diff --git a/lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/BankAccount.java b/lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/BankAccount.java new file mode 100644 index 000000000..e69de29bb diff --git a/lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/BankAtm.java b/lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/BankAtm.java index 8cbcd3cc0..4b60a66ad 100644 --- a/lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/BankAtm.java +++ b/lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/BankAtm.java @@ -1,23 +1,24 @@ package com.codedifferently.lesson17.bank; -import com.codedifferently.lesson17.bank.exceptions.AccountNotFoundException; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.UUID; +import com.codedifferently.lesson17.bank.exceptions.AccountNotFoundException; + /** Represents a bank ATM. */ public class BankAtm { private final Map customerById = new HashMap<>(); - private final Map accountByNumber = new HashMap<>(); + private final Map accountByNumber = new HashMap<>(); /** * Adds a checking account to the bank. * * @param account The account to add. */ - public void addAccount(CheckingAccount account) { + public void addAccount(BankAccount account) { accountByNumber.put(account.getAccountNumber(), account); account .getOwners() @@ -33,7 +34,7 @@ public void addAccount(CheckingAccount account) { * @param customerId The ID of the customer. * @return The unique set of accounts owned by the customer. */ - public Set findAccountsByCustomerId(UUID customerId) { + public Set findAccountsByCustomerId(UUID customerId) { return customerById.containsKey(customerId) ? customerById.get(customerId).getAccounts() : Set.of(); @@ -46,7 +47,7 @@ public Set findAccountsByCustomerId(UUID customerId) { * @param amount The amount to deposit. */ public void depositFunds(String accountNumber, double amount) { - CheckingAccount account = getAccountOrThrow(accountNumber); + BankAccount account = getAccountOrThrow(accountNumber); account.deposit(amount); } @@ -57,7 +58,7 @@ public void depositFunds(String accountNumber, double amount) { * @param check The check to deposit. */ public void depositFunds(String accountNumber, Check check) { - CheckingAccount account = getAccountOrThrow(accountNumber); + BankAccount account = getAccountOrThrow(accountNumber); check.depositFunds(account); } @@ -68,7 +69,7 @@ public void depositFunds(String accountNumber, Check check) { * @param amount */ public void withdrawFunds(String accountNumber, double amount) { - CheckingAccount account = getAccountOrThrow(accountNumber); + BankAccount account = getAccountOrThrow(accountNumber); account.withdraw(amount); } @@ -78,8 +79,8 @@ public void withdrawFunds(String accountNumber, double amount) { * @param accountNumber The account number. * @return The account. */ - private CheckingAccount getAccountOrThrow(String accountNumber) { - CheckingAccount account = accountByNumber.get(accountNumber); + private BankAccount getAccountOrThrow(String accountNumber) { + BankAccount account = accountByNumber.get(accountNumber); if (account == null || account.isClosed()) { throw new AccountNotFoundException("Account not found"); } diff --git a/lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/SavingAccount.java b/lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/SavingAccount.java new file mode 100644 index 000000000..1affeb8c3 --- /dev/null +++ b/lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/SavingAccount.java @@ -0,0 +1,19 @@ +package com.codedifferently.lesson17.bank; + +import java.util.Set; + +/** Represents a savings account. */ +public class SavingAccount extends BankAccount { + + /** + * Creates a new savings account. + * + * @param accountNumber The account number. + * @param owners The owners of the account. + * @param initialBalance The initial balance of the account. + * @return + */ + public SavingAccount(String accountNumber, Set owners, double initialBalance) { + super(accountNumber, owners, initialBalance); + } +} \ No newline at end of file diff --git a/lesson_17/bank/bank_app/src/test/java/com/codedifferently/lesson17/bank/BankAtmTest.java b/lesson_17/bank/bank_app/src/test/java/com/codedifferently/lesson17/bank/BankAtmTest.java index fa4a913a2..74cfe0601 100644 --- a/lesson_17/bank/bank_app/src/test/java/com/codedifferently/lesson17/bank/BankAtmTest.java +++ b/lesson_17/bank/bank_app/src/test/java/com/codedifferently/lesson17/bank/BankAtmTest.java @@ -1,110 +1,96 @@ package com.codedifferently.lesson17.bank; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import com.codedifferently.lesson17.bank.exceptions.AccountNotFoundException; -import com.codedifferently.lesson17.bank.exceptions.CheckVoidedException; import java.util.Set; import java.util.UUID; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.codedifferently.lesson17.bank.exceptions.AccountNotFoundException; +import com.codedifferently.lesson17.bank.exceptions.CheckVoidedException; class BankAtmTest { private BankAtm classUnderTest; private CheckingAccount account1; - private CheckingAccount account2; + private SavingAccount account2; private Customer customer1; private Customer customer2; - @BeforeEach + @BeforeEach void setUp() { classUnderTest = new BankAtm(); customer1 = new Customer(UUID.randomUUID(), "John Doe"); customer2 = new Customer(UUID.randomUUID(), "Jane Smith"); account1 = new CheckingAccount("123456789", Set.of(customer1), 100.0); - account2 = new CheckingAccount("987654321", Set.of(customer1, customer2), 200.0); + account2 = new SavingAccount("987654321", Set.of(customer1, customer2), 200.0); customer1.addAccount(account1); customer1.addAccount(account2); customer2.addAccount(account2); classUnderTest.addAccount(account1); classUnderTest.addAccount(account2); } - @Test void testAddAccount() { // Arrange Customer customer3 = new Customer(UUID.randomUUID(), "Alice Johnson"); CheckingAccount account3 = new CheckingAccount("555555555", Set.of(customer3), 300.0); customer3.addAccount(account3); - // Act classUnderTest.addAccount(account3); // Assert - Set accounts = classUnderTest.findAccountsByCustomerId(customer3.getId()); + Set accounts = classUnderTest.findAccountsByCustomerId(customer3.getId()); assertThat(accounts).containsOnly(account3); } @Test void testFindAccountsByCustomerId() { // Act - Set accounts = classUnderTest.findAccountsByCustomerId(customer1.getId()); + Set accounts = classUnderTest.findAccountsByCustomerId(customer1.getId()); // Assert assertThat(accounts).containsOnly(account1, account2); } - @Test void testDepositFunds() { // Act classUnderTest.depositFunds(account1.getAccountNumber(), 50.0); - // Assert assertThat(account1.getBalance()).isEqualTo(150.0); } - @Test void testDepositFunds_Check() { // Arrange Check check = new Check("987654321", 100.0, account1); - // Act classUnderTest.depositFunds("987654321", check); - // Assert assertThat(account1.getBalance()).isEqualTo(0); assertThat(account2.getBalance()).isEqualTo(300.0); } - @Test void testDepositFunds_DoesntDepositCheckTwice() { Check check = new Check("987654321", 100.0, account1); - classUnderTest.depositFunds("987654321", check); - assertThatExceptionOfType(CheckVoidedException.class) .isThrownBy(() -> classUnderTest.depositFunds("987654321", check)) .withMessage("Check is voided"); } - @Test void testWithdrawFunds() { // Act classUnderTest.withdrawFunds(account2.getAccountNumber(), 50.0); - // Assert assertThat(account2.getBalance()).isEqualTo(150.0); } - @Test void testWithdrawFunds_AccountNotFound() { String nonExistingAccountNumber = "999999999"; - // Act & Assert assertThatExceptionOfType(AccountNotFoundException.class) .isThrownBy(() -> classUnderTest.withdrawFunds(nonExistingAccountNumber, 50.0)) .withMessage("Account not found"); } -} +} \ No newline at end of file diff --git a/lesson_17/bank/bank_app/src/test/java/com/codedifferently/lesson17/bank/SavingAccountTest.java b/lesson_17/bank/bank_app/src/test/java/com/codedifferently/lesson17/bank/SavingAccountTest.java new file mode 100644 index 000000000..e69de29bb