Skip to content

Commit 379f71e

Browse files
author
“A1-4U2T1NN”
committed
feat: created SavingsAccount and corresponding test; Created abstract class BankAccount that extends to SavingsAccount and CheckingAccount; Created MoneyOrder and corresponding test; Updated classes to take BankAccount instead of Checking Account where necessary;
1 parent 1494a09 commit 379f71e

File tree

7 files changed

+89
-9
lines changed

7 files changed

+89
-9
lines changed

lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/BankAccount.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.util.Set;
55

66
public abstract class BankAccount {
7-
protected final Set<Customer> owners;
7+
protected final Set<Customer> owners;
88
protected final String accountNumber;
99
protected double balance;
1010
protected boolean isActive;

lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/BankAtm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public Set<CheckingAccount> findAccountsByCustomerId(UUID customerId) {
4646
* @param amount The amount to deposit.
4747
*/
4848
public void depositFunds(String accountNumber, double amount) {
49-
CheckingAccount account = getAccountOrThrow(accountNumber);
49+
BankAccount account = getAccountOrThrow(accountNumber);
5050
account.deposit(amount);
5151
}
5252

lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/CheckingAccount.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.Set;
44

55
/** Represents a checking account. */
6-
public class CheckingAccount extends BankAccount{
6+
public class CheckingAccount extends BankAccount {
77

88
/**
99
* Creates a new checking account.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.codedifferently.lesson17.bank;
2+
3+
public class MoneyOrder {
4+
private final BankAccount account;
5+
private final double amount;
6+
7+
public MoneyOrder(BankAccount account, double amount) {
8+
this.account = account;
9+
this.amount = amount;
10+
11+
account.withdraw(amount);
12+
}
13+
14+
public String getAmount() {
15+
return "$" + amount + " Taken from: " + account;
16+
}
17+
}
18+

lesson_17/bank/bank_app/src/main/java/com/codedifferently/lesson17/bank/SavingsAccount.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.Set;
44

55
/** Represents a checking account. */
6-
public class SavingsAccount extends BankAccount{
6+
public class SavingsAccount extends BankAccount {
77

88
/**
99
* Creates a new checking account.
@@ -16,22 +16,26 @@ public SavingsAccount(String accountNumber, Set<Customer> owners, double initial
1616
super(accountNumber, owners, initialBalance);
1717
}
1818

19+
public void writeCheck(double amount) {
20+
throw new UnsupportedOperationException("Cannot write checks against savings accounts.");
21+
}
22+
1923
@Override
2024
public int hashCode() {
2125
return accountNumber.hashCode();
2226
}
2327

2428
@Override
2529
public boolean equals(Object obj) {
26-
if (obj instanceof CheckingAccount other) {
30+
if (obj instanceof SavingsAccount other) {
2731
return accountNumber.equals(other.accountNumber);
2832
}
2933
return false;
3034
}
3135

3236
@Override
3337
public String toString() {
34-
return "CheckingAccount{"
38+
return "SavingsAccount{"
3539
+ "accountNumber='"
3640
+ accountNumber
3741
+ '\''
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.codedifferently.lesson17.bank;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import org.junit.jupiter.api.BeforeEach;
6+
import org.junit.jupiter.api.Test;
7+
8+
public class MoneyOrderTest {
9+
10+
private BankAccount account;
11+
12+
@BeforeEach
13+
public void setup() {
14+
// Arrange
15+
account = new CheckingAccount("12345678", null, 999.0);
16+
}
17+
18+
@Test
19+
public void testMoneyOrderCreation() {
20+
//Arrange
21+
double expectedAccountAmmount = 499.00;
22+
23+
// Act
24+
MoneyOrder moneyOrder = new MoneyOrder(account, 500.0);
25+
26+
// Assert
27+
assertEquals(expectedAccountAmmount, account.balance);
28+
}
29+
30+
31+
@Test
32+
public void testMoneyOrderGetAmmount() {
33+
// Act
34+
MoneyOrder moneyOrder = new MoneyOrder(account, 500.0);
35+
36+
// Arrange
37+
String expectedMessage = "$" + 500.0 + " Taken from: " + account;
38+
39+
// Assert
40+
assertEquals(expectedMessage, moneyOrder.getAmount());
41+
}
42+
}

lesson_17/bank/bank_app/src/test/java/com/codedifferently/lesson17/bank/SavingsAccountTest.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,16 @@
33
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
44
import static org.junit.jupiter.api.Assertions.assertEquals;
55
import static org.junit.jupiter.api.Assertions.assertFalse;
6+
import static org.junit.jupiter.api.Assertions.assertThrows;
67
import static org.junit.jupiter.api.Assertions.assertTrue;
78

9+
import com.codedifferently.lesson17.bank.exceptions.InsufficientFundsException;
810
import java.util.HashSet;
911
import java.util.Set;
1012
import java.util.UUID;
11-
1213
import org.junit.jupiter.api.BeforeEach;
1314
import org.junit.jupiter.api.Test;
1415

15-
import com.codedifferently.lesson17.bank.exceptions.InsufficientFundsException;
16-
1716
public class SavingsAccountTest {
1817
private SavingsAccount classUnderTest;
1918
private Set<Customer> owners;
@@ -104,4 +103,21 @@ void toStringTest() {
104103
String expected = "SavingsAccount{accountNumber='123456789', balance=100.0, isActive=true}";
105104
assertEquals(expected, classUnderTest.toString());
106105
}
106+
107+
@Test
108+
void testWriteCheck() {
109+
// Arrange
110+
SavingsAccount account = new SavingsAccount("12345678", null, 1000.00);
111+
112+
// Act
113+
UnsupportedOperationException thrown =
114+
assertThrows(
115+
UnsupportedOperationException.class,
116+
() -> {
117+
account.writeCheck(100);
118+
});
119+
120+
// Assert
121+
assertEquals("Cannot write checks against savings accounts.", thrown.getMessage());
122+
}
107123
}

0 commit comments

Comments
 (0)