package banking; import dev.banking.model.*; import dev.banking.processor.TransactionProcessor; import org.junit.jupiter.api.Test; import java.util.*; import java.util.concurrent.*; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; public class TransactionProcessorMixedTransactionIntegrationTest { @Test void mixedTransactionsShouldExecuteCorrectly() { BankAccount a = new BankAccount(1, 1000); BankAccount b = new BankAccount(2, 2000); BankAccount c = new BankAccount(3, 1500); Map accounts = new HashMap<>(); accounts.put(1, a); accounts.put(2, b); accounts.put(3, c); TransactionProcessor processor = new TransactionProcessor(accounts); ExecutorService executor = Executors.newFixedThreadPool(8); List txs = List.of( new DepositTransaction(1, 100), new WithdrawTransaction(2, 50), new TransferTransaction(1, 2, 30), new TransferTransaction(2, 3, 70), new DepositTransaction(3, 200) ); assertDoesNotThrow(() -> { for (Transaction tx : txs) { executor.submit(() -> processor.process(tx)); } executor.shutdown(); executor.awaitTermination(5, TimeUnit.SECONDS); }); } }