diff --git a/src/Class-diagram-core.png b/src/Class-diagram-core.png new file mode 100644 index 000000000..e6d8ba4d4 Binary files /dev/null and b/src/Class-diagram-core.png differ diff --git a/src/class-diagram-extension.png b/src/class-diagram-extension.png new file mode 100644 index 000000000..a4ab5b11b Binary files /dev/null and b/src/class-diagram-extension.png differ diff --git a/src/domain-model.md b/src/domain-model.md new file mode 100644 index 000000000..623a1929e --- /dev/null +++ b/src/domain-model.md @@ -0,0 +1,90 @@ +# User stories + +As a customer: +- I want to create a current account. +- I want to create a savings account. +- I want to generate bank statements with transaction dates, amounts, and balance at the time of transaction. +- I want to deposit and withdraw funds. + + +| Classes | Instance variables | Methods | Scenario | Output | +|-------------|----------------------------------------------|----------------------------------------------------|---------------------------------------------|--------------------------------------------------------------------------------------------| +| Customer | List accounts | boolean createAccount(String) | if customer wants to create current account | add Account to accounts and return true | +| | | | if customer wants to create savings account | add Account to accounts and return true | +| | | String generateStatement(int accountId) | always | return statement with transaction dates, amounts and balance | +| | | boolean withdrawFunds(int accountId, float amount) | if balance >= amount | return true and subtract amount from balance | +| | | | if balance < amount | return false | +| | | boolean depositFunds(int accountId, float amount) | if amount > 0 | add amount to balance and return true | +| | | | if amount < 0 | return false | +| ----------- | | | | | +| Account - | - float balance | String generateStatement() | always | return statement with transaction dates, amounts and balance | +| abstract | - List transactions | boolean withdrawFunds(float amount) | if balance >= amount | subtract amount from balance, create Transaction and add to transactions list, return true | +| | - static int nextId | | if balance < amount | return false | +| | - int accountId | boolean depositFunds(float amount) | if amount > 0 | add amount to balance, create Transaction and add to transactions list and return true | +| | | | if amount < 0 | return false | +| | | int getId() | always | return accountID | +| ----------- | | | | | +| Savings | -inherits methods and variables from Account | | | | +| ----------- | | | | | +| Current | -inherits methods and variables from Account | | | | +| ----------- | | | | | +| Transaction | -LocalDate date | String generateStatement() | always | return String transaction date, amount and balance | +| | - float amount | | | | +| | - float balance | | | | +| | -String accountType | | | | + + + +## Extensions - user stories + +As an engineer, +- I want account balances to be calculated based on transaction history instead of stored in memory. + +As a bank manager, +- I want accounts to be associated with specific branches. +- I want to approve or reject overdraft requests. + +As a customer, +- I want to be able to request an overdraft on my account. +- I want statements to be sent as messages to my phone. + + + +| Classes | Instance variables | Methods | Scenario | Output | +|---------------|----------------------------------------------|------------------------------------------------------------------------|-------------------------------------------------------------|--------------------------------------------------------------------------------------------| +| Customer | List accounts | boolean createAccount(String) | if customer wants to create current account | add Account to accounts and return true | +| | | | if customer wants to create savings account | add Account to accounts and return true | +| | | String generateStatement(int accountId) | always | return statement with transaction dates, amounts and balance | +| | | boolean withdrawFunds(int accountId, float amount) | if balance >= amount | return true and subtract amount from balance | +| | | | if balance < amount | return false | +| | | boolean depositFunds(int accountId, float amount) | if amount > 0 | add amount to balance and return true | +| | | | if amount < 0 | return false | +| | | List getAccounts() | always | return list of accounts | +| | | boolean requestOverdraft(Manager manager, int accountId, float amount) | if account in accounts list | send request to overdraft to manager | +| | | | if account not in accounts list | return false | +| | | | | | +| ----------- | | | | | +| Account - | - float balance | String generateStatement() | always | return statement with transaction dates, amounts and balance | +| abstract | - List transactions | boolean withdrawFunds(float amount) | if balance >= amount | subtract amount from balance, create Transaction and add to transactions list, return true | +| | - static int nextId | | if balance < amount | return false | +| | - int accountId | boolean depositFunds(float amount) | if amount > 0 | add amount to balance, create Transaction and add to transactions list and return true | +| | | | if amount < 0 | return false | +| | | int getId() | always | return accountID | +| | | float getBalance() | always | return balance from transaction history | +| | | void withdrawFundsOverdraft(Manager manager, float amount) | if manager not null | subtract amount from balance | +| | | | if manager null | | +| ------------- | | | | | +| Savings | -inherits methods and variables from Account | | | | +| ----------- | | | | | +| Current | -inherits methods and variables from Account | | | | +| ----------- | | | | | +| Transaction | -LocalDate date | String generateStatement() | always | return String transaction date, amount and balance | +| | - float amount | String getType() | always | return type | +| | - float balance | float getAmount() | always | return amount | +| | -String accountType | | | | +| ------------- | | | | | +| Manager | | boolean requestOverdraft(Account account, float amount) | if account instanceof savings | return false | +| | | | if account instance of current and balance - amount <= -500 | return false | +| | | | if account instance of current and balance - amount >= -500 | call withdrawFundsOverdraft on account and return true | +| ------------- | | | | | + diff --git a/src/main/java/com/booleanuk/core/Account.java b/src/main/java/com/booleanuk/core/Account.java new file mode 100644 index 000000000..1c880ca46 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Account.java @@ -0,0 +1,47 @@ +package com.booleanuk.core; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +public abstract class Account { + private float balance; + private List transactions; + private static int nextId = 0; + private int accountId; + + public Account(){ + this.balance = 0; + this.transactions = new ArrayList<>(); + this.accountId = nextId; + nextId++; + } + + public boolean depositFunds(float amount) { + if (amount > 0){ + this.balance += amount; + transactions.add(new Transaction(LocalDate.now(),this.balance, amount, "credit")); + return true; + } return false; + } + + public int getId() { + return this.accountId; + } + + public boolean withdrawFunds(float amount) { + if (amount > 0 && amount <= this.balance){ + this.balance -= amount; + transactions.add(new Transaction(LocalDate.now(),this.balance, amount, "debit")); + return true; + } return false; + } + + public String generateStatement() { + String transactionStrings = ""; + for(Transaction transaction : transactions){ + transactionStrings += transaction.generateStatement(); + } + return transactionStrings; + } +} diff --git a/src/main/java/com/booleanuk/core/Current.java b/src/main/java/com/booleanuk/core/Current.java new file mode 100644 index 000000000..446c55fde --- /dev/null +++ b/src/main/java/com/booleanuk/core/Current.java @@ -0,0 +1,5 @@ +package com.booleanuk.core; + +public class Current extends Account { + +} diff --git a/src/main/java/com/booleanuk/core/Customer.java b/src/main/java/com/booleanuk/core/Customer.java new file mode 100644 index 000000000..3fec19cc6 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Customer.java @@ -0,0 +1,63 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.List; + +public class Customer { + private List accounts; + + public Customer(){ + this.accounts = new ArrayList<>(); + } + + public boolean createAccount(String type) { + String accountType = type.toUpperCase(); + if(accountType.equals("SAVINGS")){ + accounts.add(new Savings()); + return true; + } else if (accountType.equals("CURRENT")) { + accounts.add(new Current()); + return true; + } + return false; + } + + + public boolean depositFunds(int accountId, float amount) { + if (!accounts.isEmpty() && amount > 0) { + for (Account account : accounts) { + if (account.getId() == accountId) { + return account.depositFunds(amount); + } + } + } + return false; + } + + public boolean withdrawFunds(int accountId, float amount) { + if (!accounts.isEmpty() && amount > 0) { + for (Account account : accounts) { + if (account.getId() == accountId) { + return account.withdrawFunds(amount); + } + } + } + return false; + } + + public String generateStatement(int accountId) { + String transactions = String.format(" %-15s || %-15s || %-15s || %s " , "date", "credit", "debit", "balance"); + if(!accounts.isEmpty()){ + for(Account account: accounts){ + if (account.getId() == accountId){ + transactions += account.generateStatement(); + } + } + } return transactions; + + } + + public List getAccounts(){ + return accounts; + } +} diff --git a/src/main/java/com/booleanuk/core/Savings.java b/src/main/java/com/booleanuk/core/Savings.java new file mode 100644 index 000000000..9f0e18a68 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Savings.java @@ -0,0 +1,5 @@ +package com.booleanuk.core; + +public class Savings extends Account{ + +} diff --git a/src/main/java/com/booleanuk/core/Transaction.java b/src/main/java/com/booleanuk/core/Transaction.java new file mode 100644 index 000000000..2266158d5 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Transaction.java @@ -0,0 +1,26 @@ +package com.booleanuk.core; + +import java.time.LocalDate; + +public class Transaction { + private LocalDate date; + private float balance; + private float amount; + private String type; + + public Transaction(LocalDate now, float balance, float amount, String type) { + this.date = now; + this.balance = balance; + this.amount = amount; + this.type = type; + } + + public String generateStatement() { + String transaction = ""; + if (this.type.equals("credit")) { + transaction += "\n" + (String.format(" %-15s || %-15s || %-15s || %s " , String.valueOf(this.date) , this.amount, " ", this.balance )); + } else { + transaction += "\n" + (String.format(" %-15s || %-15s || %-15s || %s " , String.valueOf(this.date) , " ", this.amount, this.balance )); } + return transaction; + } +} diff --git a/src/main/java/com/booleanuk/extension/Account.java b/src/main/java/com/booleanuk/extension/Account.java new file mode 100644 index 000000000..889769bd9 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Account.java @@ -0,0 +1,68 @@ +package com.booleanuk.extension; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +public abstract class Account { + private float balance; + private List transactions; + private static int nextId = 0; + private int accountId; + private String branch; + private boolean canOverdraft; + + public Account(){ + this.balance = 0; + this.transactions = new ArrayList<>(); + this.accountId = nextId++; + this.canOverdraft = false; + } + + public boolean depositFunds(float amount) { + if (amount > 0){ + this.balance += amount; + transactions.add(new Transaction(LocalDate.now(),this.balance, amount, "credit")); + return true; + } return false; + } + + public int getId() { + return this.accountId; + } + + public boolean withdrawFunds(float amount) { + if ((amount > 0 && amount <= this.balance) || (amount > 0 && canOverdraft)){ + this.balance -= amount; + transactions.add(new Transaction(LocalDate.now(),this.balance, amount, "debit")); + return true; + } return false; + } + + public String generateStatement() { + String transactionStrings = ""; + for(Transaction transaction : transactions){ + transactionStrings += transaction.generateStatement(); + } + return transactionStrings; + } + + public float getBalance(){ + float sum = 0; + if (!transactions.isEmpty()){ + for(Transaction transaction: transactions){ + if(transaction.getType().equals("credit")){ + sum += transaction.getAmount(); + } else sum -= transaction.getAmount(); + } + } return sum; + } + + void withdrawFundsOverdraft(Manager manager, float amount) { + if (manager == null ){ + throw new SecurityException("Only managers can change basket capacity"); + } + this.balance -= amount; + transactions.add(new Transaction(LocalDate.now(),this.balance, amount, "debit")); + } +} diff --git a/src/main/java/com/booleanuk/extension/Current.java b/src/main/java/com/booleanuk/extension/Current.java new file mode 100644 index 000000000..1831675c6 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Current.java @@ -0,0 +1,5 @@ +package com.booleanuk.extension; + +public class Current extends Account { + +} diff --git a/src/main/java/com/booleanuk/extension/Customer.java b/src/main/java/com/booleanuk/extension/Customer.java new file mode 100644 index 000000000..73be2810f --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Customer.java @@ -0,0 +1,75 @@ +package com.booleanuk.extension; + +import java.util.ArrayList; +import java.util.List; + +public class Customer { + private List accounts; + + public Customer(){ + this.accounts = new ArrayList<>(); + } + + public boolean createAccount(String type) { + String accountType = type.toUpperCase(); + if(accountType.equals("SAVINGS")){ + accounts.add(new Savings()); + return true; + } else if (accountType.equals("CURRENT")) { + accounts.add(new Current()); + return true; + } + return false; + } + + + public boolean depositFunds(int accountId, float amount) { + if (!accounts.isEmpty() && amount > 0) { + for (Account account : accounts) { + if (account.getId() == accountId) { + return account.depositFunds(amount); + } + } + } + return false; + } + + public boolean withdrawFunds(int accountId, float amount) { + if (!accounts.isEmpty() && amount > 0) { + for (Account account : accounts) { + if (account.getId() == accountId) { + return account.withdrawFunds(amount); + } + } + } + return false; + } + + public String generateStatement(int accountId) { + String transactions = String.format(" %-15s || %-15s || %-15s || %s " , "date", "credit", "debit", "balance"); + if(!accounts.isEmpty()){ + for(Account account: accounts){ + if (account.getId() == accountId){ + transactions += account.generateStatement(); + } + } + } return transactions; + + } + + public List getAccounts(){ + return accounts; + } + + + public Boolean requestOverdraft(Manager manager, int accountId, float amount) { + if(!accounts.isEmpty()){ + for(Account account: accounts){ + if (account.getId() == accountId){ + return manager.requestOverdraft(account,amount); + } + } + } return false; + + } +} diff --git a/src/main/java/com/booleanuk/extension/Manager.java b/src/main/java/com/booleanuk/extension/Manager.java new file mode 100644 index 000000000..e494734da --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Manager.java @@ -0,0 +1,15 @@ +package com.booleanuk.extension; + + +public class Manager { + + public Boolean requestOverdraft(Account account, float amount) { + if(account instanceof Savings){ + return false; + } + if (account.getBalance() - amount <= -500){ + return false; + } account.withdrawFundsOverdraft(this, amount); + return true; + } +} diff --git a/src/main/java/com/booleanuk/extension/Savings.java b/src/main/java/com/booleanuk/extension/Savings.java new file mode 100644 index 000000000..b5fa48279 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Savings.java @@ -0,0 +1,5 @@ +package com.booleanuk.extension; + +public class Savings extends Account { + +} diff --git a/src/main/java/com/booleanuk/extension/Transaction.java b/src/main/java/com/booleanuk/extension/Transaction.java new file mode 100644 index 000000000..5bdf8d0b5 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Transaction.java @@ -0,0 +1,34 @@ +package com.booleanuk.extension; + +import java.time.LocalDate; + +public class Transaction { + private LocalDate date; + private float balance; + private float amount; + private String type; + + public Transaction(LocalDate now, float balance, float amount, String type) { + this.date = now; + this.balance = balance; + this.amount = amount; + this.type = type; + } + + public String generateStatement() { + String transaction = ""; + if (this.type.equals("credit")) { + transaction += "\n" + (String.format(" %-15s || %-15s || %-15s || %s " , String.valueOf(this.date) , this.amount, " ", this.balance )); + } else { + transaction += "\n" + (String.format(" %-15s || %-15s || %-15s || %s " , String.valueOf(this.date) , " ", this.amount, this.balance )); } + return transaction; + } + + public String getType() { + return this.type; + } + + public float getAmount() { + return this.amount; + } +} diff --git a/src/test/java/com/booleanuk/core/AccountTest.java b/src/test/java/com/booleanuk/core/AccountTest.java new file mode 100644 index 000000000..cc93de5ad --- /dev/null +++ b/src/test/java/com/booleanuk/core/AccountTest.java @@ -0,0 +1,80 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class AccountTest { + + @Test + public void depositFundsOk(){ + Account savings = new Savings(); + Account current = new Current(); + + Assertions.assertTrue(savings.depositFunds(100)); + Assertions.assertTrue(savings.depositFunds(1 )); + Assertions.assertTrue(savings.depositFunds(100.10F)); + Assertions.assertTrue(current.depositFunds(100)); + Assertions.assertTrue(current.depositFunds(1235678)); + Assertions.assertTrue(current.depositFunds(100.10F)); + } + + @Test + public void depositFundsNotOk(){ + Account current = new Current(); + Account savings = new Savings(); + + Assertions.assertFalse(current.depositFunds(0)); + Assertions.assertFalse(current.depositFunds(-10)); + Assertions.assertFalse(current.depositFunds(-1)); + Assertions.assertFalse(savings.depositFunds(0)); + Assertions.assertFalse(savings.depositFunds(-10)); + Assertions.assertFalse(savings.depositFunds(-1)); + } + + @Test + public void withdrawFundsOk(){ + Account current = new Current(); + Account savings = new Savings(); + current.depositFunds(1000000000); + savings.depositFunds(1000000000); + + Assertions.assertTrue(current.withdrawFunds(1)); + Assertions.assertTrue(current.withdrawFunds(5000)); + Assertions.assertTrue(current.withdrawFunds(1123423)); + Assertions.assertTrue(current.withdrawFunds(1.123F)); + Assertions.assertTrue(current.withdrawFunds(100F)); + Assertions.assertTrue(current.withdrawFunds(9876.1234F)); + Assertions.assertTrue(current.withdrawFunds(24)); + + Assertions.assertTrue(savings.withdrawFunds(1)); + Assertions.assertTrue(savings.withdrawFunds(5000)); + Assertions.assertTrue(savings.withdrawFunds(1123423)); + Assertions.assertTrue(savings.withdrawFunds(1.123F)); + Assertions.assertTrue(savings.withdrawFunds(100F)); + Assertions.assertTrue(savings.withdrawFunds(9876.1234F)); + Assertions.assertTrue(savings.withdrawFunds(24)); + } + + @Test + public void withdrawFundsNotOk(){ + Account current = new Current(); + Account savings = new Savings(); + + Assertions.assertFalse(current.withdrawFunds(0)); + Assertions.assertFalse(current.withdrawFunds(-10)); + Assertions.assertFalse(savings.withdrawFunds(0)); + Assertions.assertFalse(current.withdrawFunds(-1)); + } + + @Test + public void generateStatement(){ + Account current = new Current(); + current.depositFunds(100); + current.withdrawFunds(50); + + String content = current.generateStatement(); + System.out.println(content); + Assertions.assertTrue(content.contains("100.0")); + Assertions.assertTrue(content.contains("50.0"));; + } +} diff --git a/src/test/java/com/booleanuk/core/CustomerTest.java b/src/test/java/com/booleanuk/core/CustomerTest.java new file mode 100644 index 000000000..e1160ba1d --- /dev/null +++ b/src/test/java/com/booleanuk/core/CustomerTest.java @@ -0,0 +1,114 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; +import java.util.List; + +public class CustomerTest { + + @Test + public void createAccountOk(){ + Customer customer = new Customer(); + + Assertions.assertTrue(customer.createAccount("savings")); + Assertions.assertTrue(customer.createAccount("saViNgs")); + Assertions.assertTrue(customer.createAccount("CURRENT")); + Assertions.assertTrue(customer.createAccount("CUrrenT")); + } + + @Test + public void createAccountNotOk(){ + Customer customer = new Customer(); + + Assertions.assertFalse(customer.createAccount("")); + Assertions.assertFalse(customer.createAccount("something")); + Assertions.assertFalse(customer.createAccount("!!")); + Assertions.assertFalse(customer.createAccount("asdasda")); + Assertions.assertFalse(customer.createAccount("123")); + } + + @Test + public void depositFundsOk(){ + Customer customer = new Customer(); + customer.createAccount("savings"); + customer.createAccount("current"); + List accounts = customer.getAccounts(); + + Assertions.assertTrue(customer.depositFunds(accounts.get(0).getId(), 100)); + Assertions.assertTrue(customer.depositFunds(accounts.get(1).getId(), 100000)); + } + + @Test + public void depositFundsNotOk(){ + Customer customer = new Customer(); + customer.createAccount("savings"); + customer.createAccount("current"); + List accounts = customer.getAccounts(); + + Assertions.assertFalse(customer.depositFunds(accounts.get(0).getId(), -100)); + Assertions.assertFalse(customer.depositFunds(accounts.get(1).getId(), 0)); + } + + @Test + public void withdrawFunds(){ + Customer customer = new Customer(); + customer.createAccount("savings"); + List accounts = customer.getAccounts(); + + customer.depositFunds(accounts.get(0).getId(),100); + + Assertions.assertTrue(customer.withdrawFunds(accounts.get(0).getId(), 10)); + Assertions.assertTrue(customer.withdrawFunds(accounts.get(0).getId(), 20)); + Assertions.assertTrue(customer.withdrawFunds(accounts.get(0).getId(), 40)); + Assertions.assertTrue(customer.withdrawFunds(accounts.get(0).getId(), 1)); + } + + @Test + public void withdrawFundsNotOk(){ + Customer customer = new Customer(); + customer.createAccount("savings"); + List accounts = customer.getAccounts(); + + Assertions.assertFalse(customer.withdrawFunds(accounts.get(0).getId(),100)); + customer.depositFunds(accounts.get(0).getId(), 100); + Assertions.assertFalse(customer.withdrawFunds(accounts.get(0).getId(),101)); + } + + @Test + public void generateStatement(){ + Customer customer = new Customer(); + customer.createAccount("savings"); + List accounts = customer.getAccounts(); + customer.depositFunds(accounts.get(0).getId(), 100); + customer.withdrawFunds(accounts.get(0).getId(),10); + + String content = customer.generateStatement(accounts.get(0).getId()); + System.out.println(content); + + Assertions.assertTrue(content.contains("100.0")); + Assertions.assertTrue(content.contains("10.0")); + Assertions.assertTrue(content.contains("90.0")); + } + + @Test + public void generateStatement2(){ + Customer customer = new Customer(); + customer.createAccount("current"); + List accounts = customer.getAccounts(); + customer.depositFunds(accounts.get(0).getId(), 1000); + customer.withdrawFunds(accounts.get(0).getId(),90); + customer.withdrawFunds(accounts.get(0).getId(),10); + customer.withdrawFunds(accounts.get(0).getId(),300); + + String content = customer.generateStatement(accounts.get(0).getId()); + System.out.println(content); + + Assertions.assertTrue(content.contains("1000.0")); + Assertions.assertTrue(content.contains("10.0")); + Assertions.assertTrue(content.contains("90.0")); + Assertions.assertTrue(content.contains("300.0")); + Assertions.assertTrue(content.contains(String.valueOf(LocalDate.now()))); + } +} diff --git a/src/test/java/com/booleanuk/core/TransactionTest.java b/src/test/java/com/booleanuk/core/TransactionTest.java new file mode 100644 index 000000000..527279ff1 --- /dev/null +++ b/src/test/java/com/booleanuk/core/TransactionTest.java @@ -0,0 +1,22 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; + +public class TransactionTest { + + @Test + public void generateStatement(){ + Transaction transaction = new Transaction(LocalDate.now(), 100, 10, "credit"); + String date = String.valueOf(LocalDate.now()); + String content = String.valueOf(transaction.generateStatement()); + + System.out.println(content); + + Assertions.assertTrue(content.contains(date)); + Assertions.assertTrue(content.contains("10.0"));; + Assertions.assertTrue(content.contains("100.0")); + } +} diff --git a/src/test/java/com/booleanuk/extension/AccountExtensionTest.java b/src/test/java/com/booleanuk/extension/AccountExtensionTest.java new file mode 100644 index 000000000..13bbb9fa7 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/AccountExtensionTest.java @@ -0,0 +1,21 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class AccountExtensionTest { + + @Test + public void calculateBalanceFromTransactions(){ + + Account savings = new Savings(); + savings.depositFunds(100); + savings.depositFunds(100); + savings.depositFunds(100); + savings.withdrawFunds(50); + + Assertions.assertEquals(250, savings.getBalance()); + } + + +} diff --git a/src/test/java/com/booleanuk/extension/CustomerExtensionTest.java b/src/test/java/com/booleanuk/extension/CustomerExtensionTest.java new file mode 100644 index 000000000..147f66725 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/CustomerExtensionTest.java @@ -0,0 +1,56 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.List; + +public class CustomerExtensionTest { + + @Test + public void requestOverDraftOk(){ + Customer customer = new Customer(); + customer.createAccount("current"); + List accounts = customer.getAccounts(); + Manager manager = new Manager(); + + Assertions.assertTrue(customer.requestOverdraft(manager, accounts.get(0).getId(), 10 )); + Assertions.assertTrue(customer.requestOverdraft(manager, accounts.get(0).getId(), 40 )); + Assertions.assertTrue(customer.requestOverdraft(manager, accounts.get(0).getId(), 349 )); + Assertions.assertFalse(customer.requestOverdraft(manager,accounts.getFirst().getId(), 1000)); + + String content = customer.generateStatement(accounts.get(0).getId()); + System.out.println(content); + + } + + @Test + public void requestOverDraftOk2(){ + Customer customer = new Customer(); + customer.createAccount("current"); + List accounts = customer.getAccounts(); + Manager manager = new Manager(); + + customer.depositFunds(accounts.getFirst().getId(), 100); + + Assertions.assertTrue(customer.requestOverdraft(manager, accounts.get(0).getId(), 400 )); + Assertions.assertTrue(customer.requestOverdraft(manager, accounts.get(0).getId(), 40 )); + Assertions.assertTrue(customer.requestOverdraft(manager, accounts.get(0).getId(), 10 )); + + String content = customer.generateStatement(accounts.get(0).getId()); + System.out.println(content); + + } + + @Test + public void requestOverDraftNotOk(){ + Customer customer = new Customer(); + customer.createAccount("savings"); + customer.createAccount("current"); + List accounts = customer.getAccounts(); + Manager manager = new Manager(); + + Assertions.assertFalse(customer.requestOverdraft(manager, accounts.get(0).getId(), 100)); + Assertions.assertFalse(customer.requestOverdraft(manager, accounts.get(1).getId(), 500)); + } +}