diff --git a/src/main/java/bank/Bank.java b/src/main/java/bank/Bank.java index 03366bf..fa16b72 100644 --- a/src/main/java/bank/Bank.java +++ b/src/main/java/bank/Bank.java @@ -97,4 +97,19 @@ public interface Bank { * @return the list of all transactions by type */ List getTransactionsByType(String account, boolean positive); + + + /** + * Delets an existing account + * @param account the account to be deleted + * @throws AccountDoesNotExistException + * @throws IOException + */ + void deleteAccount(String account) throws AccountDoesNotExistException, IOException; + + /** + * Returns a list of all account names + * @return + */ + List getAllAccounts(); } diff --git a/src/main/java/bank/PrivateBank.java b/src/main/java/bank/PrivateBank.java index b400f37..fa51135 100644 --- a/src/main/java/bank/PrivateBank.java +++ b/src/main/java/bank/PrivateBank.java @@ -362,6 +362,47 @@ public class PrivateBank implements Bank, JsonSerializer, JsonDeser return transactions; } + /** + * Delets an existing account + * + * @param account the account to be deleted + * @throws AccountDoesNotExistException + * @throws IOException + */ + @Override + public void deleteAccount(String account) throws AccountDoesNotExistException, IOException { + if (this.containsAccount(account)) { + // delete account + this.accountsToTransactions.remove(account); + + // delete corresponding JSON file + String filename = directoryName + "/" + account + ".json"; + File file = new File(filename); + if (!file.delete()) + throw new IOException(); + } else { + throw new AccountDoesNotExistException(); + } + } + + /** + * Returns a list of all account names + * + * @return List of all accounts + */ + @Override + public List getAllAccounts() { + List accounts = new ArrayList<>(); + + this.accountsToTransactions.forEach( + (account, transactions) -> { + accounts.add(account); + } + ); + + return accounts; + } + /** * Import Accounts from existing JSON Files * @@ -535,4 +576,6 @@ public class PrivateBank implements Bank, JsonSerializer, JsonDeser return rootObject; } + + } diff --git a/src/test/java/PrivateBankTest.java b/src/test/java/PrivateBankTest.java index 6bc19ee..4bc1e8d 100644 --- a/src/test/java/PrivateBankTest.java +++ b/src/test/java/PrivateBankTest.java @@ -429,4 +429,67 @@ public class PrivateBankTest { AccountAlreadyExistsException.class, () -> privateBank.readAccounts() ); } + + + @DisplayName("Delete existing account") + @Order(20) + @Test + public void testDeleteExistingAccount() { + assertDoesNotThrow( + () -> privateBank.createAccount( + "Konto_X", + List.of( + new OutgoingTransfer( + "01.01.2000", + 100, + "OutgoingTransfer to Hans", + "Konto_X", + "Hans" + ), + new IncomingTransfer( + "01.01.2000", + 100, + "IncomingTransfer from Hans", + "Hans", + "Konto_X" + ), + new IncomingTransfer( + "01.01.2000", + 300, + "IncomingTransfer from Tom", + "Tom", + "Konto_X" + ) + + ) + ) + ); + + assertDoesNotThrow( + () -> privateBank.writeAccount("Konto_X") + ); + + assertTrue( + () -> privateBank.containsAccount("Konto_X") + ); + + assertDoesNotThrow( + () -> privateBank.deleteAccount("Konto_X") + ); + + assertFalse( + () -> privateBank.containsAccount("Konto_X") + ); + + } + + @DisplayName("Delete non existing account") + @Order(21) + @Test + public void testDeleteNonExistingAccount() { + assertThrows( + AccountDoesNotExistException.class, () -> privateBank.deleteAccount("Konto_X") + ); + } + }