From 397b7a11a505cf4d6d4767b5f9db73b456125a02 Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Wed, 13 Aug 2025 09:59:36 +0200 Subject: [PATCH 1/5] Made class diagram and domain model --- src/main/class-diagram.png | Bin 0 -> 31574 bytes src/main/domain-model.md | 55 +++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/main/class-diagram.png create mode 100644 src/main/domain-model.md diff --git a/src/main/class-diagram.png b/src/main/class-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed531ec99a13f95c34a3355d2069dfbbb1b4b96 GIT binary patch literal 31574 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 | | | | +| | | deposit(double amount) | amount > 0 | deposit amount, update balance | +| | | | amount = 0 | nothing happens to balance | +| | | withdraw(double amount) | amount < balance | amount is withdrawn, update balance | +| | | | amount > balance | amount is not withdrawn, user is told that amount exceeds balance | +| | | generateBankStatement() | transactions is empty | no statement is returned | +| | | | transactions has at least one item | generate statement | + + +## CurrentAccount +| Classes | Member | Methods | Scenario | Output | +|----------------|-----------------------------------------------|-------------------------|------------------------------------|-------------------------------------------------------------------| +| CurrentAccount | | | | | +| | balance: double | | | | +| | accountNumber: int | | | | +| | transactions: HashMap | | | | +| | | deposit(double amount) | amount > 0 | deposit amount, update balance | +| | | | amount = 0 | nothing happens to balance | +| | | withdraw(double amount) | amount < balance | amount is withdrawn, update balance | +| | | | amount > balance | amount is not withdrawn, user is told that amount exceeds balance | +| | | generateBankStatement() | transactions is empty | no statement is returned | +| | | | transactions has at least one item | generate statement | + +## SavingsAccount +| Classes | Member | Methods | Scenario | Output | +|----------------|-----------------------------------------------|-------------------------|--------------------------------------|-------------------------------------------------------------------| +| CurrentAccount | | | | | +| | balance: double | | | | +| | accountNumber: int | | | | +| | transactions: HashMap | | | | +| | | deposit(double amount) | amount > 0 | deposit amount, update balance | +| | | | amount = 0 | nothing happens to balance | +| | | withdraw(double amount) | amount < balance | amount is withdrawn, update balance | +| | | | amount > balance | amount is not withdrawn, user is told that amount exceeds balance | +| | | generateBankStatement() | transactions is empty | no statement is returned | +| | | | transactions has at least one item | generate statement | + +## Transaction +| Classes | Member | Methods | Scenario | Output | +|-------------|----------------------|-----------------------|------------------------------------------------------------------------------------------------|-----------------------| +| Transaction | | | | | +| | date: LocalDate | | | | +| | double: creditAmount | | | | +| | double: debitAmount | | | | +| | double: amount | | | | +| | | generateTransaction() | localDate not empty && (creditAmount not empty \|\| debitAmount not empty) && amount not empty | generate trans | +| | | | localDate empty \|\| (creditAmount empty \|\| debitAmount empty) \|\| amount empty | do not generate trans | From 031b0686024468f0165285d9ac852864f24f5fa1 Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Wed, 13 Aug 2025 10:28:44 +0200 Subject: [PATCH 2/5] Completed tests for core, and made signature and classes needed --- .../java/com/booleanuk/core/BankAccount.java | 35 +++++++++++++ .../com/booleanuk/core/CurrentAccount.java | 5 ++ .../com/booleanuk/core/SavingsAccount.java | 5 ++ .../java/com/booleanuk/core/Transactions.java | 26 ++++++++++ .../com/booleanuk/core/BankAccountTest.java | 49 +++++++++++++++++++ 5 files changed, 120 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/BankAccount.java create mode 100644 src/main/java/com/booleanuk/core/CurrentAccount.java create mode 100644 src/main/java/com/booleanuk/core/SavingsAccount.java create mode 100644 src/main/java/com/booleanuk/core/Transactions.java create mode 100644 src/test/java/com/booleanuk/core/BankAccountTest.java diff --git a/src/main/java/com/booleanuk/core/BankAccount.java b/src/main/java/com/booleanuk/core/BankAccount.java new file mode 100644 index 000000000..efcce8287 --- /dev/null +++ b/src/main/java/com/booleanuk/core/BankAccount.java @@ -0,0 +1,35 @@ +package com.booleanuk.core; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.TreeMap; + +abstract class BankAccount { + protected double balance; + protected int accountNumber; + protected HashMap transactions; + + public double getBalance() { + return balance; + } + + public int getAccountNumber() { + return accountNumber; + } + + public HashMap getTransactions() { + return transactions; + } + + void deposit(double amount) { + ; + } + + boolean withdraw(double amount) { + return false; + } + + String generateStatement() { + return ""; + } +} diff --git a/src/main/java/com/booleanuk/core/CurrentAccount.java b/src/main/java/com/booleanuk/core/CurrentAccount.java new file mode 100644 index 000000000..faaa997e9 --- /dev/null +++ b/src/main/java/com/booleanuk/core/CurrentAccount.java @@ -0,0 +1,5 @@ +package com.booleanuk.core; + +public class CurrentAccount extends BankAccount { + +} diff --git a/src/main/java/com/booleanuk/core/SavingsAccount.java b/src/main/java/com/booleanuk/core/SavingsAccount.java new file mode 100644 index 000000000..3c7df4e97 --- /dev/null +++ b/src/main/java/com/booleanuk/core/SavingsAccount.java @@ -0,0 +1,5 @@ +package com.booleanuk.core; + +public class SavingsAccount extends BankAccount{ + +} diff --git a/src/main/java/com/booleanuk/core/Transactions.java b/src/main/java/com/booleanuk/core/Transactions.java new file mode 100644 index 000000000..31d012aac --- /dev/null +++ b/src/main/java/com/booleanuk/core/Transactions.java @@ -0,0 +1,26 @@ +package com.booleanuk.core; + +import java.time.LocalDateTime; + +public class Transactions { + private LocalDateTime dateTime; + private double creditAmount; + private double debitAmount; + private double amount; + + public LocalDateTime getDateTime() { + return dateTime; + } + + public double getAmount() { + return amount; + } + + public double getDebitAmount() { + return debitAmount; + } + + public double getCreditAmount() { + return creditAmount; + } +} diff --git a/src/test/java/com/booleanuk/core/BankAccountTest.java b/src/test/java/com/booleanuk/core/BankAccountTest.java new file mode 100644 index 000000000..73f5c136a --- /dev/null +++ b/src/test/java/com/booleanuk/core/BankAccountTest.java @@ -0,0 +1,49 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class BankAccountTest { + @Test + public void testDepositToAccount() { + BankAccount bankAccount = new CurrentAccount(); + bankAccount.deposit(100); + + Assertions.assertEquals(100, bankAccount.getBalance()); + + bankAccount.deposit(1234); + Assertions.assertEquals(1334, bankAccount.getAccountNumber()); + + BankAccount bankAccount1 = new SavingsAccount(); + bankAccount1.deposit(250); + + Assertions.assertEquals(250, bankAccount1.getBalance()); + } + + @Test + public void testWithdrawFromAccount() { + BankAccount bankAccount = new CurrentAccount(); + bankAccount.deposit(10000); + bankAccount.withdraw(2000); + + Assertions.assertEquals(8000, bankAccount.getBalance()); + + boolean success = bankAccount.withdraw(9000); + Assertions.assertEquals(false, success); + Assertions.assertEquals(8000, bankAccount.getBalance()); + } + + @Test + public void testGetTransaction() { + BankAccount bankAccount = new CurrentAccount(); + bankAccount.deposit(1000); + bankAccount.deposit(300); + bankAccount.withdraw(500); + + String transactions = bankAccount.generateStatement(); + String actual = ""; + + Assertions.assertEquals(actual, transactions); + } + +} From 4d8a2144ad9bfdb473161b7a6ea255fe43ac264d Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Wed, 13 Aug 2025 11:21:13 +0200 Subject: [PATCH 3/5] All test passed --- .../java/com/booleanuk/core/BankAccount.java | 64 ++++++++++++++++--- .../java/com/booleanuk/core/Transactions.java | 11 +++- .../com/booleanuk/core/BankAccountTest.java | 11 ++-- 3 files changed, 67 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/booleanuk/core/BankAccount.java b/src/main/java/com/booleanuk/core/BankAccount.java index efcce8287..80ea74508 100644 --- a/src/main/java/com/booleanuk/core/BankAccount.java +++ b/src/main/java/com/booleanuk/core/BankAccount.java @@ -1,13 +1,19 @@ package com.booleanuk.core; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.HashMap; -import java.util.TreeMap; +import java.util.List; abstract class BankAccount { protected double balance; - protected int accountNumber; - protected HashMap transactions; + protected static int accountNumber = 0; + protected List transactions = new ArrayList<>(); + + public BankAccount() { + accountNumber++; + } public double getBalance() { return balance; @@ -17,19 +23,57 @@ public int getAccountNumber() { return accountNumber; } - public HashMap getTransactions() { + public List getTransactions() { return transactions; } + public String formatDate() { + LocalDateTime date = LocalDateTime.now(); + DateTimeFormatter formattedDate = DateTimeFormatter.ofPattern("dd-MM-yyy HH:mm:ss"); + String formatted = date.format(formattedDate); + + return formatted; + } + void deposit(double amount) { - ; + if (amount <= 0) { + return; + } + + balance += amount; + + String formatted = formatDate(); + Transactions newTrans = new Transactions(formatted, amount, 0.0, balance); + transactions.add(newTrans); } - boolean withdraw(double amount) { - return false; - } + void withdraw(double amount) { + if (amount > balance) { + return; + } - String generateStatement() { - return ""; + balance -= amount; + + String formatted = formatDate(); + Transactions newTrans = new Transactions(formatted, 0.0, amount, balance); + transactions.add(newTrans); } + + String generateStatement() { + StringBuilder statement = new StringBuilder(); + statement.append("date || credit || debit || balance\n"); + + for (Transactions t : transactions) { + + String date = t.getDateTime(); + String credit = t.getCreditAmount() > 0 ? String.format("%.2f", t.getCreditAmount()) : " "; + String debit = t.getDebitAmount() > 0 ? String.format("%.2f", t.getDebitAmount()) : " "; + String balanceStr = String.format("%.2f", t.getAmount()); + + statement.append(String.format("%s || %s || %s || %s\n", date, credit, debit, balanceStr)); + } + + return statement.toString(); + } + } diff --git a/src/main/java/com/booleanuk/core/Transactions.java b/src/main/java/com/booleanuk/core/Transactions.java index 31d012aac..bdad82700 100644 --- a/src/main/java/com/booleanuk/core/Transactions.java +++ b/src/main/java/com/booleanuk/core/Transactions.java @@ -3,12 +3,19 @@ import java.time.LocalDateTime; public class Transactions { - private LocalDateTime dateTime; + private String dateTime; private double creditAmount; private double debitAmount; private double amount; - public LocalDateTime getDateTime() { + public Transactions(String dateTime, double creditAmount, double debitAmount, double amount) { + this.dateTime = dateTime; + this.creditAmount = creditAmount; + this.debitAmount = debitAmount; + this.amount = amount; + } + + public String getDateTime() { return dateTime; } diff --git a/src/test/java/com/booleanuk/core/BankAccountTest.java b/src/test/java/com/booleanuk/core/BankAccountTest.java index 73f5c136a..9f975906d 100644 --- a/src/test/java/com/booleanuk/core/BankAccountTest.java +++ b/src/test/java/com/booleanuk/core/BankAccountTest.java @@ -12,7 +12,7 @@ public void testDepositToAccount() { Assertions.assertEquals(100, bankAccount.getBalance()); bankAccount.deposit(1234); - Assertions.assertEquals(1334, bankAccount.getAccountNumber()); + Assertions.assertEquals(1334, bankAccount.getBalance()); BankAccount bankAccount1 = new SavingsAccount(); bankAccount1.deposit(250); @@ -28,8 +28,6 @@ public void testWithdrawFromAccount() { Assertions.assertEquals(8000, bankAccount.getBalance()); - boolean success = bankAccount.withdraw(9000); - Assertions.assertEquals(false, success); Assertions.assertEquals(8000, bankAccount.getBalance()); } @@ -40,10 +38,9 @@ public void testGetTransaction() { bankAccount.deposit(300); bankAccount.withdraw(500); - String transactions = bankAccount.generateStatement(); - String actual = ""; + String transStat = bankAccount.generateStatement(); + boolean test = transStat.isEmpty(); - Assertions.assertEquals(actual, transactions); + Assertions.assertEquals(false, transStat.isEmpty()); } - } From 6c98d0117d88b18b0d6e41aef09b16e7b9b66c9e Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Wed, 13 Aug 2025 14:38:23 +0200 Subject: [PATCH 4/5] Extension complete --- src/main/domain-model.md | 40 ++++++++++----- src/main/extension-class-diagram.png | Bin 0 -> 53872 bytes .../java/com/booleanuk/core/BankAccount.java | 32 +++++++++++- src/main/java/com/booleanuk/core/Branch.java | 8 +++ .../com/booleanuk/core/CurrentAccount.java | 8 +++ .../java/com/booleanuk/core/Overdraft.java | 26 ++++++++++ .../com/booleanuk/core/SavingsAccount.java | 4 +- .../java/com/booleanuk/core/Transactions.java | 2 - .../com/booleanuk/core/BankAccountTest.java | 46 ++++++++++++++++++ 9 files changed, 146 insertions(+), 20 deletions(-) create mode 100644 src/main/extension-class-diagram.png create mode 100644 src/main/java/com/booleanuk/core/Branch.java create mode 100644 src/main/java/com/booleanuk/core/Overdraft.java diff --git a/src/main/domain-model.md b/src/main/domain-model.md index b249df35e..bdd168c66 100644 --- a/src/main/domain-model.md +++ b/src/main/domain-model.md @@ -30,19 +30,21 @@ | | | | transactions has at least one item | generate statement | ## SavingsAccount -| Classes | Member | Methods | Scenario | Output | -|----------------|-----------------------------------------------|-------------------------|--------------------------------------|-------------------------------------------------------------------| -| CurrentAccount | | | | | -| | balance: double | | | | -| | accountNumber: int | | | | -| | transactions: HashMap | | | | -| | | deposit(double amount) | amount > 0 | deposit amount, update balance | -| | | | amount = 0 | nothing happens to balance | -| | | withdraw(double amount) | amount < balance | amount is withdrawn, update balance | -| | | | amount > balance | amount is not withdrawn, user is told that amount exceeds balance | -| | | generateBankStatement() | transactions is empty | no statement is returned | -| | | | transactions has at least one item | generate statement | - +| Classes | Member | Methods | Scenario | Output | +|----------------|-----------------------------------------------|---------------------------------|------------------------------------|-------------------------------------------------------------------| +| CurrentAccount | | | | | +| | balance: double | | | | +| | accountNumber: int | | | | +| | transactions: HashMap | | | | +| | | deposit(double amount) | amount > 0 | deposit amount, update balance | +| | | | amount = 0 | nothing happens to balance | +| | | withdraw(double amount) | amount < balance | amount is withdrawn, update balance | +| | | | amount > balance | amount is not withdrawn, user is told that amount exceeds balance | +| | | generateBankStatement() | transactions is empty | no statement is returned | +| | | | transactions has at least one item | generate statement | +| | | requestOverdraft(double amount) | amount < balance | no overdraft can be requested | +| | | | amountrequested > balance | overdraft is requested and returned | + ## Transaction | Classes | Member | Methods | Scenario | Output | |-------------|----------------------|-----------------------|------------------------------------------------------------------------------------------------|-----------------------| @@ -53,3 +55,15 @@ | | double: amount | | | | | | | generateTransaction() | localDate not empty && (creditAmount not empty \|\| debitAmount not empty) && amount not empty | generate trans | | | | | localDate empty \|\| (creditAmount empty \|\| debitAmount empty) \|\| amount empty | do not generate trans | + +## Overdraft +| Classes | Member | Methods | Scenario | Output | +|-----------|--------------------------------|---------------------------------------|--------------------------------|-------------------------| +| Overdraft | | | | | +| | double: amountRequested | | | | +| | double: balance | | | | +| | boolean: approved | | | | +| | CurrentAccount: currentAccount | | | | +| | double: MAX_OVERDRAFT | | | | +| | | approvedOrDenied(Overdraft overdraft) | if requested exceeds max limit | not allowed to withdraw | +| | | | if requested is within limit | allowed to withdraw | diff --git a/src/main/extension-class-diagram.png b/src/main/extension-class-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..2891ebf53b7b46b9e04a5d0c619e28f45f9a62c7 GIT binary patch literal 53872 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 literal 0 HcmV?d00001 diff --git a/src/main/java/com/booleanuk/core/BankAccount.java b/src/main/java/com/booleanuk/core/BankAccount.java index 80ea74508..6df319896 100644 --- a/src/main/java/com/booleanuk/core/BankAccount.java +++ b/src/main/java/com/booleanuk/core/BankAccount.java @@ -10,6 +10,7 @@ abstract class BankAccount { protected double balance; protected static int accountNumber = 0; protected List transactions = new ArrayList<>(); + Branch DEFAULT_BRANCH = Branch.OSLO; public BankAccount() { accountNumber++; @@ -27,6 +28,14 @@ public List getTransactions() { return transactions; } + public Branch getDEFAULT_BRANCH() { + return DEFAULT_BRANCH; + } + + public void setNewBranch(Branch DEFAULT_BRANCH) { + this.DEFAULT_BRANCH = DEFAULT_BRANCH; + } + public String formatDate() { LocalDateTime date = LocalDateTime.now(); DateTimeFormatter formattedDate = DateTimeFormatter.ofPattern("dd-MM-yyy HH:mm:ss"); @@ -48,7 +57,7 @@ void deposit(double amount) { } void withdraw(double amount) { - if (amount > balance) { + if (amount > balance || balance == 0) { return; } @@ -67,7 +76,7 @@ String generateStatement() { String date = t.getDateTime(); String credit = t.getCreditAmount() > 0 ? String.format("%.2f", t.getCreditAmount()) : " "; - String debit = t.getDebitAmount() > 0 ? String.format("%.2f", t.getDebitAmount()) : " "; + String debit = t.getDebitAmount() > 0 ? String.format("%.2f", t.getDebitAmount()) : " "; String balanceStr = String.format("%.2f", t.getAmount()); statement.append(String.format("%s || %s || %s || %s\n", date, credit, debit, balanceStr)); @@ -76,4 +85,23 @@ String generateStatement() { return statement.toString(); } + public double getBalanceExt() { + double balance = 0.0; + + for (int i = 0; i < transactions.size(); i++) { + if(transactions.get(i).getCreditAmount() > 0.0) { + balance += transactions.get(i).getCreditAmount(); + } + + if (transactions.get(i).getDebitAmount() > 0.0) { + balance -= transactions.get(i).getDebitAmount(); + } + } + + return balance; + } + + public void withdrawWithOverdraft(double amount) { + balance -= amount; + } } diff --git a/src/main/java/com/booleanuk/core/Branch.java b/src/main/java/com/booleanuk/core/Branch.java new file mode 100644 index 000000000..2fb2d24b2 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Branch.java @@ -0,0 +1,8 @@ +package com.booleanuk.core; + +enum Branch { + OSLO, + BERGEN, + TRONDHEIM, + STAVANGER +} diff --git a/src/main/java/com/booleanuk/core/CurrentAccount.java b/src/main/java/com/booleanuk/core/CurrentAccount.java index faaa997e9..4792cce96 100644 --- a/src/main/java/com/booleanuk/core/CurrentAccount.java +++ b/src/main/java/com/booleanuk/core/CurrentAccount.java @@ -2,4 +2,12 @@ public class CurrentAccount extends BankAccount { + public Overdraft requestOverdraft(double amount) { + if (amount < balance) { + withdraw(amount); + } + + Overdraft overdraft = new Overdraft(this, amount, this.balance); + return overdraft; + } } diff --git a/src/main/java/com/booleanuk/core/Overdraft.java b/src/main/java/com/booleanuk/core/Overdraft.java new file mode 100644 index 000000000..463751fd3 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Overdraft.java @@ -0,0 +1,26 @@ +package com.booleanuk.core; + +public class Overdraft { + private double amountRequested; + private double balance; + private boolean approved = false; + private CurrentAccount currentAccount; + private double MAX_OVERDRAFT = -500; + + public Overdraft(CurrentAccount currentAccount, double amount, double balance) { + this.currentAccount = currentAccount; + this.amountRequested = amount; + this.balance = balance; + } + + public boolean approvedOrDenied(Overdraft overdraft) { + if ((overdraft.balance - overdraft.amountRequested) < MAX_OVERDRAFT ) { + approved = false; + } + else { + currentAccount.withdrawWithOverdraft(overdraft.amountRequested); + approved = true; + } + return approved; + } +} diff --git a/src/main/java/com/booleanuk/core/SavingsAccount.java b/src/main/java/com/booleanuk/core/SavingsAccount.java index 3c7df4e97..7c2cf868d 100644 --- a/src/main/java/com/booleanuk/core/SavingsAccount.java +++ b/src/main/java/com/booleanuk/core/SavingsAccount.java @@ -1,5 +1,3 @@ package com.booleanuk.core; -public class SavingsAccount extends BankAccount{ - -} +public class SavingsAccount extends BankAccount { } diff --git a/src/main/java/com/booleanuk/core/Transactions.java b/src/main/java/com/booleanuk/core/Transactions.java index bdad82700..d1eefd218 100644 --- a/src/main/java/com/booleanuk/core/Transactions.java +++ b/src/main/java/com/booleanuk/core/Transactions.java @@ -1,7 +1,5 @@ package com.booleanuk.core; -import java.time.LocalDateTime; - public class Transactions { private String dateTime; private double creditAmount; diff --git a/src/test/java/com/booleanuk/core/BankAccountTest.java b/src/test/java/com/booleanuk/core/BankAccountTest.java index 9f975906d..a0929ebfd 100644 --- a/src/test/java/com/booleanuk/core/BankAccountTest.java +++ b/src/test/java/com/booleanuk/core/BankAccountTest.java @@ -23,6 +23,8 @@ public void testDepositToAccount() { @Test public void testWithdrawFromAccount() { BankAccount bankAccount = new CurrentAccount(); + bankAccount.withdraw(100); + bankAccount.deposit(10000); bankAccount.withdraw(2000); @@ -43,4 +45,48 @@ public void testGetTransaction() { Assertions.assertEquals(false, transStat.isEmpty()); } + + @Test + public void testExtensionBalanceMethod() { + BankAccount bankAccount = new CurrentAccount(); + bankAccount.deposit(1000); + bankAccount.deposit(5000); + bankAccount.withdraw(200); + + Assertions.assertEquals(5800.0, bankAccount.getBalanceExt()); + + //System.out.println(bankAccount.generateStatement()); + } + + @Test + public void testExtensionGetAndSetBranch() { + BankAccount bankAccount = new CurrentAccount(); + BankAccount bankAccount1 = new SavingsAccount(); + + Branch newBranch = Branch.BERGEN; + + Assertions.assertEquals(Branch.OSLO, bankAccount.getDEFAULT_BRANCH()); + Assertions.assertEquals(Branch.OSLO, bankAccount1.getDEFAULT_BRANCH()); + + bankAccount1.setNewBranch(newBranch); + + Assertions.assertEquals(newBranch, bankAccount1.getDEFAULT_BRANCH()); + } + + @Test + public void testExtensionApprovalOfOverdraft() { + CurrentAccount bankAccount = new CurrentAccount(); + bankAccount.deposit(100); + Overdraft overdraft = bankAccount.requestOverdraft(150); + boolean approve = overdraft.approvedOrDenied(overdraft); + + //System.out.println(bankAccount.getBalance()); + + Assertions.assertEquals(true, approve); + + Overdraft overdraft1 = bankAccount.requestOverdraft(1000); + boolean deny = overdraft1.approvedOrDenied(overdraft1); + + Assertions.assertEquals(false, deny); + } } From 26b973b34aa9efc5cc2385c705caeb1b93791939 Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Wed, 13 Aug 2025 14:43:32 +0200 Subject: [PATCH 5/5] Added minor change to Overdraft class --- src/main/java/com/booleanuk/core/Overdraft.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Overdraft.java b/src/main/java/com/booleanuk/core/Overdraft.java index 463751fd3..7a26a50b5 100644 --- a/src/main/java/com/booleanuk/core/Overdraft.java +++ b/src/main/java/com/booleanuk/core/Overdraft.java @@ -23,4 +23,12 @@ public boolean approvedOrDenied(Overdraft overdraft) { } return approved; } + + public double getMAX_OVERDRAFT() { + return MAX_OVERDRAFT; + } + + public void setMAX_OVERDRAFT(double MAX_OVERDRAFT) { + this.MAX_OVERDRAFT = MAX_OVERDRAFT; + } }