Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Class Diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
55 changes: 55 additions & 0 deletions Domain Model Java Bank Challenge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
```
As a customer,
So I can safely store and use my money,
I want to create a current account.
```

| Classes | Member var. | Methods | Scenario | Output |
| ------- | -------------- | ------------ | ------------ | ------- |
| Account | String accName | getBalance() | balance == 0 | 0 |
| | float balance | | balance >0 | balance |
| CurrAcc | String accName | | | |
| | float balance | | | |


```
As a customer,
So I can save for a rainy day,
I want to create a savings account.
```

| Classes | Member var. | Methods | Scenario | Output |
| ------- | -------------- | ------------ | ------------ | ------- |
| Account | String accName | getBalance() | balance == 0 | 0 |
| | int Balance | | balance >0 | balance |
| SavAcc | String accName | | | |
| | int Balance | | | |
```
As a customer,
So I can keep a record of my finances,
I want to generate bank statements with transaction dates, amounts, and balance at the time of transaction.
```
| Classes | Member var. | Methods | Scenario | Output |
| ------------- | -------------------------------- | ---------------------- | ----------------------------- | --------------------------------------------- |
| BankStatement | List<`Transaction`> Transactions | generate() | transactions is empty | header of bankstatements |
| | | | transactions got transactions | return string of transactions in right format |
| Transaction | localDate currDate | | | |
| | float credit | | | |
| | float debit | | | |
| | float balance | | | |
| Account | BankStatement bankStatement | getBankStatementOutput | | |

```
As a customer,
So I can use my account,
I want to deposit and withdraw funds.
```

| Classes | Member var. | Methods | Scenario | Output |
| ------- | -------------- | -------------------- | ----------------------------- | ------ |
| Account | String accName | deposit(int Amount) | amount =< 0 | False |
| | float balance | | amount > 0 | True |
| | | withdraw(int Amount) | amount =< 0 | False |
| | | | amount > 0 && amount<balance | True |
| | | | amount > 0 && amount >balance | False |

59 changes: 59 additions & 0 deletions src/main/java/com/booleanuk/core/Account.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.booleanuk.core;

public class Account{
private String accName;
private float balance;
private BankStatement bankStatement;

public Account(String accName){
this.accName = accName;
this.balance = 0.0f;
bankStatement = new BankStatement();
}

public String getAccName() {
return accName;
}

public float getBalance() {
return balance;
}

public BankStatement getBankStatement() {
return bankStatement;
}

public boolean deposit(float amount){
if(amount > 0) {
this.balance += amount;
makeTransaction(amount, "Credit");
return true;
}
return false;
}

public boolean withdraw(float amount){
if(amount>0 && this.balance>amount){
this.balance -= amount;
makeTransaction(amount, "Debit");
return true;
}
return false;
}

public boolean makeTransaction(float amount, String type){
Transaction transaction;
if(type == "Credit") {
transaction = new Transaction(amount, 0f, this.balance);
bankStatement.getTransactions().add(transaction);
}else if(type == "Debit") {
transaction = new Transaction(0f, amount, this.balance);
bankStatement.getTransactions().add(transaction);
}
return true;
}

public String getBankStatementOutput(){
return bankStatement.generate();
}
}
48 changes: 48 additions & 0 deletions src/main/java/com/booleanuk/core/BankStatement.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.booleanuk.core;

import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;

public class BankStatement {
private List<Transaction> transactions;

BankStatement(){
this.transactions = new ArrayList<Transaction>();
}

public List<Transaction> getTransactions() {
return transactions;
}

public String generate() {
String result = "date || credit || debit || balance\n";

List<Transaction> reversedList = new ArrayList<>(transactions);
Collections.reverse(reversedList);

for (Transaction tran : reversedList) {
String date = tran.getCurrDate().getDayOfMonth() + "/" +
tran.getCurrDate().getMonthValue() + "/" +
tran.getCurrDate().getYear();

String credit = "";
if (tran.getCredit() != 0) {
credit = String.format(Locale.US,"%.2f", tran.getCredit());
}

String debit = "";
if (tran.getDebit() != 0) {
debit = String.format(Locale.US,"%.2f", tran.getDebit());
}

String balance = String.format(Locale.US,"%.2f", tran.getBalance());;

result = result + date + " || " + credit + " || " + debit + " || " + balance + "\n";
}

return result;
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/booleanuk/core/CurrAcc.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.booleanuk.core;

public class CurrAcc extends Account{
public CurrAcc(String accName){
super(accName);
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/booleanuk/core/SavAcc.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.booleanuk.core;

public class SavAcc extends Account{
public SavAcc(String accName){
super(accName);
}
}
33 changes: 33 additions & 0 deletions src/main/java/com/booleanuk/core/Transaction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.booleanuk.core;

import java.time.LocalDate;

public class Transaction {
private LocalDate currDate;
private float credit;
private float debit;
private float balance;

public Transaction(float credit, float debit, float balance){
this.credit = credit;
this.debit = debit;
this.balance = balance;
this.currDate = LocalDate.now();
}

public LocalDate getCurrDate() {
return currDate;
}

public float getCredit() {
return credit;
}

public float getDebit() {
return debit;
}

public float getBalance() {
return balance;
}
}
79 changes: 79 additions & 0 deletions src/test/java/com/booleanuk/core/AccountTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
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 AccountTest {
@Test
public void ShouldDepositAmount(){
Account account = new SavAcc("Test Account");

Assertions.assertEquals(0f, account.getBalance());
Assertions.assertTrue(account.deposit(1000f));
Assertions.assertEquals(1000f, account.getBalance());
Assertions.assertTrue(account.deposit(300f));
Assertions.assertEquals(1300f, account.getBalance());

Assertions.assertFalse(account.deposit(-100f));
Assertions.assertFalse(account.deposit(0f));
}

@Test
public void ShouldWithdrawAmount(){
Account account = new Account("Test Account");

Assertions.assertFalse(account.withdraw(500f));

account.deposit(1000f);

Assertions.assertTrue(account.withdraw(500f));
Assertions.assertEquals(500f, account.getBalance());
Assertions.assertFalse(account.withdraw(1000f));
Assertions.assertFalse(account.withdraw(0f));
Assertions.assertFalse(account.withdraw(-100));
}

@Test
public void ShouldRegisterTransaction(){
Account account = new CurrAcc("Test Account");

account.deposit(1000f);
account.withdraw(500f);

List<Transaction> transactions = account.getBankStatement().getTransactions();

Assertions.assertEquals(2, transactions.size());

Transaction tran1 = transactions.get(0);
Assertions.assertEquals(1000f, tran1.getCredit());
Assertions.assertEquals(0f, tran1.getDebit());
Assertions.assertEquals(1000f, tran1.getBalance());
Assertions.assertEquals(LocalDate.now(), tran1.getCurrDate());

Transaction tran2 = transactions.get(1);
Assertions.assertEquals(0f, tran2.getCredit());
Assertions.assertEquals(500f, tran2.getDebit());
Assertions.assertEquals(500f, tran2.getBalance());
Assertions.assertEquals(LocalDate.now(), tran2.getCurrDate());
}

@Test
public void shouldGenerateBankStatement() {
Account account = new Account("Test");
account.deposit(1000f);

Transaction tran = account.getBankStatement().getTransactions().get(0);

String date = tran.getCurrDate().getDayOfMonth() + "/" +
tran.getCurrDate().getMonthValue() + "/" +
tran.getCurrDate().getYear();

String bankStatement =
"date || credit || debit || balance\n" + date + " || 1000.00 || || 1000.00\n";

Assertions.assertEquals(bankStatement, account.getBankStatement().generate());
}
}
Loading