Skip to content

Commit ca428cf

Browse files
committed
files changed and added files to support changes.
1 parent 21f47d5 commit ca428cf

File tree

7 files changed

+273
-0
lines changed

7 files changed

+273
-0
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,18 @@ public boolean equals(Object obj) {
6767
return false;
6868
}
6969

70+
public String getCheckNumber() {
71+
return checkNumber;
72+
}
73+
74+
public double getAmount() {
75+
return amount;
76+
}
77+
78+
public CheckingAccount newAccount() {
79+
return account;
80+
}
81+
7082
@Override
7183
public String toString() {
7284
return "Check{"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ public CheckingAccount(String accountNumber, Set<Customer> owners, double initia
2525
isActive = true;
2626
}
2727

28+
public boolean getIsActive() {
29+
return isActive;
30+
}
31+
2832
/**
2933
* Gets the account number.
3034
*
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.codedifferently.lesson17.bank;
2+
3+
import java.util.Set;
4+
5+
public class SavingsAccount extends CheckingAccount {
6+
7+
public SavingsAccount(String accountNumber, Set<Customer> owners, double initialBalance) {
8+
super(accountNumber, owners, initialBalance);
9+
}
10+
11+
@Override
12+
public String toString() {
13+
return "SavingsAccount{"
14+
+ "accountNumber='"
15+
+ getAccountNumber()
16+
+ '\''
17+
+ ", balance="
18+
+ getBalance()
19+
+ ", isActive="
20+
+ getIsActive()
21+
+ '}';
22+
}
23+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.codedifferently.lesson17.bank.exceptions;
2+
3+
public class moneyOrderVoidedException extends RuntimeException {
4+
5+
public moneyOrderVoidedException() {}
6+
7+
public moneyOrderVoidedException(String message) {
8+
super(message);
9+
}
10+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.codedifferently.lesson17.bank;
2+
3+
import com.codedifferently.lesson17.bank.exceptions.moneyOrderVoidedException;
4+
5+
public class moneyOrder extends Check {
6+
7+
public moneyOrder(String checkNumber, double amount, CheckingAccount account) {
8+
super(checkNumber, amount, account);
9+
if (amount < 0) {
10+
throw new IllegalArgumentException("moneyOrder is positive");
11+
}
12+
account.withdraw(amount);
13+
}
14+
15+
@Override
16+
public boolean equals(Object obj) {
17+
if (obj instanceof moneyOrder other) {
18+
return getCheckNumber().equals(other.getCheckNumber());
19+
}
20+
return false;
21+
}
22+
23+
@Override
24+
/**
25+
* Deposits the check into an account.
26+
*
27+
* @param toAccount The account to deposit the check into.
28+
*/
29+
public void depositFunds(CheckingAccount toAccount) {
30+
if (getIsVoided()) {
31+
throw new moneyOrderVoidedException("moneyOrder is voided");
32+
}
33+
toAccount.deposit(getAmount());
34+
voidCheck();
35+
}
36+
37+
@Override
38+
public String toString() {
39+
return "moneyOrder{"
40+
+ "moneyOrderNumber='"
41+
+ getCheckNumber()
42+
+ '\''
43+
+ ", amount="
44+
+ getAmount()
45+
+ ", account="
46+
+ newAccount().getAccountNumber()
47+
+ '}';
48+
}
49+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package com.codedifferently.lesson17.bank;
2+
3+
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import static org.junit.jupiter.api.Assertions.assertFalse;
6+
import static org.junit.jupiter.api.Assertions.assertTrue;
7+
8+
import com.codedifferently.lesson17.bank.exceptions.InsufficientFundsException;
9+
import java.util.HashSet;
10+
import java.util.Set;
11+
import java.util.UUID;
12+
import org.junit.jupiter.api.BeforeEach;
13+
import org.junit.jupiter.api.Test;
14+
15+
public class SavingsAccountTest {
16+
17+
private SavingsAccount classUnderTest;
18+
private Set<Customer> owners;
19+
20+
@BeforeEach
21+
void setUp() {
22+
owners = new HashSet<>();
23+
owners.add(new Customer(UUID.randomUUID(), "John Doe"));
24+
owners.add(new Customer(UUID.randomUUID(), "Jane Smith"));
25+
classUnderTest = new SavingsAccount("123456789", owners, 100.0);
26+
}
27+
28+
@Test
29+
void getAccountNumber() {
30+
assertEquals("123456789", classUnderTest.getAccountNumber());
31+
}
32+
33+
@Test
34+
void getOwners() {
35+
assertEquals(owners, classUnderTest.getOwners());
36+
}
37+
38+
@Test
39+
void deposit() {
40+
classUnderTest.deposit(50.0);
41+
assertEquals(150.0, classUnderTest.getBalance());
42+
}
43+
44+
@Test
45+
void deposit_withNegativeAmount() {
46+
assertThatExceptionOfType(IllegalArgumentException.class)
47+
.isThrownBy(() -> classUnderTest.deposit(-50.0));
48+
}
49+
50+
@Test
51+
void withdraw() {
52+
classUnderTest.withdraw(50.0);
53+
assertEquals(50.0, classUnderTest.getBalance());
54+
}
55+
56+
@Test
57+
void withdraw_withNegativeAmount() {
58+
assertThatExceptionOfType(IllegalStateException.class)
59+
.isThrownBy(() -> classUnderTest.withdraw(-50.0))
60+
.withMessage("Withdrawal amount must be positive");
61+
}
62+
63+
@Test
64+
void withdraw_withInsufficientBalance() {
65+
assertThatExceptionOfType(InsufficientFundsException.class)
66+
.isThrownBy(() -> classUnderTest.withdraw(150.0))
67+
.withMessage("Account does not have enough funds for withdrawal");
68+
}
69+
70+
@Test
71+
void getBalance() {
72+
assertEquals(100.0, classUnderTest.getBalance());
73+
}
74+
75+
@Test
76+
void closeAccount_withPositiveBalance() {
77+
assertThatExceptionOfType(IllegalStateException.class)
78+
.isThrownBy(() -> classUnderTest.closeAccount());
79+
}
80+
81+
@Test
82+
void isClosed() {
83+
assertFalse(classUnderTest.isClosed());
84+
classUnderTest.withdraw(100);
85+
classUnderTest.closeAccount();
86+
assertTrue(classUnderTest.isClosed());
87+
}
88+
89+
@Test
90+
void equals() {
91+
SavingsAccount otherAccount = new SavingsAccount("123456789", owners, 200.0);
92+
assertEquals(classUnderTest, otherAccount);
93+
}
94+
95+
@Test
96+
void hashCodeTest() {
97+
SavingsAccount otherAccount = new SavingsAccount("123456789", owners, 200.0);
98+
assertEquals(classUnderTest.hashCode(), otherAccount.hashCode());
99+
}
100+
101+
@Test
102+
void toStringTest() {
103+
String expected = "SavingsAccount{accountNumber='123456789', balance=100.0, isActive=true}";
104+
assertEquals(expected, classUnderTest.toString());
105+
}
106+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.codedifferently.lesson17.bank;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
5+
6+
import com.codedifferently.lesson17.bank.exceptions.moneyOrderVoidedException;
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.Test;
9+
10+
class moneyOrderTest {
11+
12+
private CheckingAccount account1;
13+
private CheckingAccount account2;
14+
private moneyOrder classUnderTest;
15+
16+
@BeforeEach
17+
void setUp() {
18+
account1 = new CheckingAccount("123456789", null, 100.0);
19+
account2 = new CheckingAccount("987654321", null, 200.0);
20+
classUnderTest = new moneyOrder("123456789", 50.0, account1);
21+
}
22+
23+
@Test
24+
void testDepositFunds() {
25+
// Act
26+
classUnderTest.depositFunds(account2);
27+
// Assert
28+
assertThat(account1.getBalance()).isEqualTo(50.0);
29+
assertThat(account2.getBalance()).isEqualTo(250.0);
30+
}
31+
32+
@Test
33+
void testDepositFunds_moneyOrderVoided() {
34+
// Arrange
35+
classUnderTest.voidCheck();
36+
37+
// Act & Assert
38+
assertThatExceptionOfType(moneyOrderVoidedException.class)
39+
.isThrownBy(() -> classUnderTest.depositFunds(account2))
40+
.withMessage("moneyOrder is voided");
41+
}
42+
43+
@Test
44+
void testHashCode() {
45+
// Arrange
46+
moneyOrder otherCheck = new moneyOrder("123456789", 50.0, account1);
47+
48+
// Assert
49+
assertThat(classUnderTest.hashCode()).isEqualTo(otherCheck.hashCode());
50+
}
51+
52+
@Test
53+
void testEquals() {
54+
// Arrange
55+
moneyOrder newPaymentOrder = new moneyOrder("123456789", 25.0, account1);
56+
moneyOrder differentCheck = new moneyOrder("987654321", 25.0, account1);
57+
58+
// Assert
59+
assertThat(classUnderTest.equals(newPaymentOrder)).isTrue();
60+
assertThat(classUnderTest.equals(differentCheck)).isFalse();
61+
}
62+
63+
@Test
64+
void testToString() {
65+
// Assert
66+
assertThat(classUnderTest.toString())
67+
.isEqualTo("moneyOrder{moneyOrderNumber='123456789', amount=50.0, account=123456789}");
68+
}
69+
}

0 commit comments

Comments
 (0)