From 790dad96fecbd992ae5c5430a57c15d38c4386b9 Mon Sep 17 00:00:00 2001 From: cmartano Date: Wed, 22 Jan 2020 13:25:55 -0500 Subject: [PATCH 01/70] added target/ --- .gitignore | 3 +++ .idea/misc.xml | 2 +- .idea/{sbt.xml => vcs.xml} | 4 ++-- SoftwareEngineeringPractice.iml | 2 -- 4 files changed, 6 insertions(+), 5 deletions(-) rename .idea/{sbt.xml => vcs.xml} (51%) delete mode 100644 SoftwareEngineeringPractice.iml diff --git a/.gitignore b/.gitignore index 3c8b8dd5..00e87a5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 +target/ + + # User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index d87af9ac..bcc0317e 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/.idea/sbt.xml b/.idea/vcs.xml similarity index 51% rename from .idea/sbt.xml rename to .idea/vcs.xml index 20187435..35eb1ddf 100644 --- a/.idea/sbt.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - - \ No newline at end of file diff --git a/SoftwareEngineeringPractice.iml b/SoftwareEngineeringPractice.iml deleted file mode 100644 index 78b2cc53..00000000 --- a/SoftwareEngineeringPractice.iml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file From c40830fe9a2accb07a4b349c885a05fa48db7dbc Mon Sep 17 00:00:00 2001 From: cmartano Date: Wed, 22 Jan 2020 13:35:12 -0500 Subject: [PATCH 02/70] isEmailValidtest update --- src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index d19ecb02..8efb195a 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -18,15 +18,18 @@ void withdrawTest() { BankAccount bankAccount = new BankAccount("a@b.com", 200); bankAccount.withdraw(100); + assertEquals(100, bankAccount.getBalance()); } + @Test void isEmailValidTest(){ - assertTrue(BankAccount.isEmailValid( "a@b.com")); - assertFalse( BankAccount.isEmailValid("")); + assertTrue(BankAccount.isEmailValid( "abc@google.com")); + assertFalse( BankAccount.isEmailValid("abc-@google.com")); } + @Test void constructorTest() { BankAccount bankAccount = new BankAccount("a@b.com", 200); From 432eadf0c1befa06c684e10fc83de6491fe8bfaa Mon Sep 17 00:00:00 2001 From: cmartano Date: Wed, 22 Jan 2020 13:37:15 -0500 Subject: [PATCH 03/70] isEmailValidtest update --- src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index 8efb195a..9a40bada 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -26,7 +26,7 @@ void withdrawTest() { @Test void isEmailValidTest(){ assertTrue(BankAccount.isEmailValid( "abc@google.com")); - assertFalse( BankAccount.isEmailValid("abc-@google.com")); + assertFalse( BankAccount.isEmailValid("abc-@mail.com")); } From 23f892de67cfe5484b050581d7fa53d077696a7c Mon Sep 17 00:00:00 2001 From: cmartano Date: Thu, 23 Jan 2020 20:29:53 -0500 Subject: [PATCH 04/70] isEmailValidtest update --- src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index 9a40bada..8e3f8f96 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -24,9 +24,12 @@ void withdrawTest() { @Test - void isEmailValidTest(){ - assertTrue(BankAccount.isEmailValid( "abc@google.com")); + void isEmailValidTestUpdated(){ + assertTrue(BankAccount.isEmailValid("abc@google.com")); assertFalse( BankAccount.isEmailValid("abc-@mail.com")); + assertFalse( BankAccount.isEmailValid("abc.@mail.com")); + assertFalse( BankAccount.isEmailValid(".abc@mail.com")); + assertFalse( BankAccount.isEmailValid("abc#def@mail.com")); } From 0826b991d67c1c7cf876b853eee904d608225842 Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 27 Jan 2020 13:38:34 -0500 Subject: [PATCH 05/70] isEmailValidtest update with equivalence clases and border cases --- .../ithaca/dragon/bank/BankAccountTest.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index 8e3f8f96..4b57c4d2 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -25,6 +25,42 @@ void withdrawTest() { @Test void isEmailValidTestUpdated(){ + // checks for a basic, valid email and for empty string + assertTrue(BankAccount.isEmailValid( "a@b.com")); + assertFalse( BankAccount.isEmailValid("")); + + // checks for forbidden characters... border case: one forbidden characters is present + assertFalse(BankAccount.isEmailValid("ab#c@gmail.com")); + assertFalse(BankAccount.isEmailValid("ab-c @gmail.com")); + + // checks for 1 period after the @... border case: 0, 1, or 2 periods found + assertTrue(BankAccount.isEmailValid("hay@mail.com")); + assertFalse(BankAccount.isEmailValid("hayyy@mailcom")); + assertFalse(BankAccount.isEmailValid("hay@ma.il.com")); + + // checks for the proper number of @ symbols... border case: 0, 1, or 2 @'s present + assertTrue(BankAccount.isEmailValid("cmartano@gmail.com")); + assertFalse(BankAccount.isEmailValid("cmartanoaol.com")); + assertFalse(BankAccount.isEmailValid("c@martano@yahoo.com")); + + // checks for the number of characters after the last period... border case: 1 or 2 + assertTrue(BankAccount.isEmailValid("name@place.co")); + assertFalse(BankAccount.isEmailValid("name@place.c")); + + // checks that each dash is a "legal" dash... border case: dash to start, 2 in a row, before @ symbol + assertTrue(BankAccount.isEmailValid("c-martano@gmail.com")); + assertFalse(BankAccount.isEmailValid("marta--no@gmail.com")); + assertFalse(BankAccount.isEmailValid("-christianmar-tano@aol.com")); + assertFalse(BankAccount.isEmailValid("c-l-martano-@gmail.com")); + + // checks that each period is a "legal" period... border case: period to start, 2 in a row, before @ symbol + assertTrue(BankAccount.isEmailValid("c.martano@gmail.com")); + assertFalse(BankAccount.isEmailValid("c.ma..rtano@gmail.com")); + assertFalse(BankAccount.isEmailValid(".christian@gmail.com")); + assertFalse(BankAccount.isEmailValid("c.l.martano.@gmail.com")); + + + //presence of invalid character assertTrue(BankAccount.isEmailValid("abc@google.com")); assertFalse( BankAccount.isEmailValid("abc-@mail.com")); assertFalse( BankAccount.isEmailValid("abc.@mail.com")); From f153d22b38ef8dad3561c331f2e5c08b76d4a9b8 Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 28 Jan 2020 12:05:27 -0500 Subject: [PATCH 06/70] withdraw test with equivalence classes --- .../edu/ithaca/dragon/bank/BankAccount.java | 3 +++ .../ithaca/dragon/bank/BankAccountTest.java | 27 ++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index e340e0ea..9ec415cc 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -31,6 +31,9 @@ public String getEmail(){ */ public void withdraw (double amount) { balance -= amount; + if (amount<0) + System.out.print("Cannot withdraw negative amount"); + } diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index 4b57c4d2..40131c5c 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -14,12 +14,33 @@ void getBalanceTest() { } @Test - void withdrawTest() { + void withdrawTest() throws InsufficientFundsException{ + //greater than balance + assertThrows(InsufficientFundsException.class, ()-> new BankAccount("a@b.com", 100).withdraw(101)); + + //less than balance BankAccount bankAccount = new BankAccount("a@b.com", 200); bankAccount.withdraw(100); + assertEquals(100, bankAccount.getBalance()); - assertEquals(100, bankAccount.getBalance()); + //equal to balance + bankAccount = new BankAccount("a@b.com", 300); + bankAccount.withdraw(300); + assertEquals(0, bankAccount.getBalance()); + + + //negative + bankAccount = new BankAccount("a@b.com", 300); + bankAccount.withdraw(-1); + assertEquals(300, bankAccount.getBalance()); + + + //negative + bankAccount = new BankAccount("a@b.com", 200); + bankAccount.withdraw(-300); + assertEquals(200, bankAccount.getBalance()); + } @@ -27,7 +48,7 @@ void withdrawTest() { void isEmailValidTestUpdated(){ // checks for a basic, valid email and for empty string assertTrue(BankAccount.isEmailValid( "a@b.com")); - assertFalse( BankAccount.isEmailValid("")); + assertFalse( BankAccount.isEmailValid(" ")); // checks for forbidden characters... border case: one forbidden characters is present assertFalse(BankAccount.isEmailValid("ab#c@gmail.com")); From 2414e94d98bab258c15a8afc368b9c8eb5c26d6c Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 28 Jan 2020 12:08:45 -0500 Subject: [PATCH 07/70] withdraw test with equivalence classes error fix --- .../ithaca/dragon/bank/BankAccountTest.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index 40131c5c..e801cceb 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -19,27 +19,27 @@ void withdrawTest() throws InsufficientFundsException{ assertThrows(InsufficientFundsException.class, ()-> new BankAccount("a@b.com", 100).withdraw(101)); //less than balance - BankAccount bankAccount = new BankAccount("a@b.com", 200); - bankAccount.withdraw(100); - assertEquals(100, bankAccount.getBalance()); + BankAccount bankaccount = new BankAccount("a@b.com", 200); + bankaccount.withdraw(100); + assertEquals(100, bankaccount.getBalance()); //equal to balance - bankAccount = new BankAccount("a@b.com", 300); - bankAccount.withdraw(300); - assertEquals(0, bankAccount.getBalance()); + bankaccount = new BankAccount("a@b.com", 300); + bankaccount.withdraw(300); + assertEquals(0, bankaccount.getBalance()); //negative - bankAccount = new BankAccount("a@b.com", 300); - bankAccount.withdraw(-1); - assertEquals(300, bankAccount.getBalance()); + bankaccount = new BankAccount("a@b.com", 300); + bankaccount.withdraw(-1); + assertEquals(300, bankaccount.getBalance()); //negative - bankAccount = new BankAccount("a@b.com", 200); - bankAccount.withdraw(-300); - assertEquals(200, bankAccount.getBalance()); + bankaccount = new BankAccount("a@b.com", 200); + bankaccount.withdraw(-300); + assertEquals(200, bankaccount.getBalance()); } From a595550eec6bc1538cb8d5a569819f0c86d38847 Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 28 Jan 2020 19:38:46 -0500 Subject: [PATCH 08/70] isAmountValidTest added --- .../edu/ithaca/dragon/bank/BankAccount.java | 135 ++++++++++++++++-- .../ithaca/dragon/bank/BankAccountTest.java | 38 +++-- 2 files changed, 148 insertions(+), 25 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index 9ec415cc..c0694bf0 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -8,42 +8,147 @@ public class BankAccount { /** * @throws IllegalArgumentException if email is invalid */ - public BankAccount(String email, double startingBalance){ - if (isEmailValid(email)){ + public BankAccount(String email, double startingBalance) { + if (isEmailValid(email)) { this.email = email; this.balance = startingBalance; - } - else { + } else { throw new IllegalArgumentException("Email address: " + email + " is invalid, cannot create account"); } } - public double getBalance(){ + public double getBalance() { return balance; } - public String getEmail(){ + public String getEmail() { return email; } + /** + * @post checks if inputted dollar amount is a valid dollar amount + * + * + */ + public static boolean isAmountValid(double amount) { + + if (amount < 0) { + return false; + } + + String amtstring = String.valueOf(amount); + int decimalplace = amtstring.indexOf("."); + String postdecimal = amtstring.substring(decimalplace+1); + + if (postdecimal.length() > 2) { + return false; + } + + return true; + + } + + + + /** * @post reduces the balance by amount if amount is non-negative and smaller than balance + * @throws InsufficientFundsException if trying to withdraw more than whats in account. + * */ - public void withdraw (double amount) { - balance -= amount; - if (amount<0) - System.out.print("Cannot withdraw negative amount"); + + public void withdraw (double amount) throws InsufficientFundsException, IllegalArgumentException { + + if (!isAmountValid(amount)) { + throw new IllegalArgumentException("Invalid Input"); + } + + if (balance < amount) { + throw new InsufficientFundsException("Cannot withdraw an amount larger than you balance"); + } + + else{ + balance -= amount; + } } - public static boolean isEmailValid(String email){ - if (email.indexOf('@') == -1){ + /** + * @post checks if inputted email is a valid email. + * + * + */ + public static boolean isEmailValid(String email) { + //get index of @ + int atsym = email.indexOf('@'); + + //empty string + if (atsym == -1) + return false; + + //invalid characters at start and before @ symbol + if (email.charAt(0) == '-' || email.charAt(atsym - 1) == '-') return false; + + if (email.charAt(0) == '.' || email.charAt(atsym - 1) == '.') + return false; + + //isolate domain + String domain = email.substring(atsym + 1); + + //get index of period + int period = domain.indexOf('.'); + + //empty string + if (period == -1) + return false; + + //keeps track of periods in domain + int pdcount = 0; + + + for (int i = 0; i < domain.length(); i++) { + //checks for 2 @'s next to each other + if (domain.charAt(i) == '@') + return false; + + else if (domain.charAt(i) == '.') + pdcount++; } - else { - return true; + + //can only be one period in domain + if (pdcount != 1) + return false; + + //must be at least 2 characters after period + if (domain.substring(period).length() < 2) + return false; + + + for (int i = 0; i < email.length(); i++) { + //invalid character check + if (email.charAt(i) == '#') + return false; + //no spaces allowed + else if (email.charAt(i) == ' ') + return false; + //2 periods in a row check + else if (email.charAt(i) == '.') { + if (email.charAt(i + 1) == '.') + return false; + } + + //2 dashes in a row check + else if (email.charAt(i) == '-') { + if (email.charAt(i + 1) == '-') + return false; + } } + + return true; + + } } -} + diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index e801cceb..770afe1b 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -8,16 +8,39 @@ class BankAccountTest { @Test void getBalanceTest() { + BankAccount bankAccount = new BankAccount("a@b.com", 200); assertEquals(200, bankAccount.getBalance()); } @Test - void withdrawTest() throws InsufficientFundsException{ + void isAmountValidTest(){ + //negative amount border case + assertFalse(BankAccount.isAmountValid(-00.01)); + + //negative amount + assertFalse(BankAccount.isAmountValid(-100)); + + //positive border case + assertTrue(BankAccount.isAmountValid(00.01)); + + //positive amount + assertTrue(BankAccount.isAmountValid(100.00)); + + //invalid format border case + assertFalse(BankAccount.isAmountValid(123.987)); + + //invalid format + assertFalse(BankAccount.isAmountValid(83746.82736453)); + } + + @Test + void withdrawTest() throws InsufficientFundsException, IllegalArgumentException{ //greater than balance assertThrows(InsufficientFundsException.class, ()-> new BankAccount("a@b.com", 100).withdraw(101)); + //less than balance BankAccount bankaccount = new BankAccount("a@b.com", 200); bankaccount.withdraw(100); @@ -30,17 +53,12 @@ void withdrawTest() throws InsufficientFundsException{ assertEquals(0, bankaccount.getBalance()); - //negative - bankaccount = new BankAccount("a@b.com", 300); - bankaccount.withdraw(-1); - assertEquals(300, bankaccount.getBalance()); - + //negative - argument thrown + assertThrows(IllegalArgumentException.class,() -> new BankAccount("a@b.com", 300).withdraw(-1)); - //negative - bankaccount = new BankAccount("a@b.com", 200); - bankaccount.withdraw(-300); - assertEquals(200, bankaccount.getBalance()); + //invalid input + assertThrows(IllegalArgumentException.class,() -> new BankAccount("a@b.com",200).withdraw(100.005)); } From aaf83693a118b39550a1e8137c002a7015573e08 Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 28 Jan 2020 19:54:52 -0500 Subject: [PATCH 09/70] constructor code and test updated --- .../java/edu/ithaca/dragon/bank/BankAccount.java | 12 ++++++++++-- .../java/edu/ithaca/dragon/bank/BankAccountTest.java | 11 +++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index c0694bf0..f7602383 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -11,10 +11,18 @@ public class BankAccount { public BankAccount(String email, double startingBalance) { if (isEmailValid(email)) { this.email = email; - this.balance = startingBalance; - } else { + } + else { throw new IllegalArgumentException("Email address: " + email + " is invalid, cannot create account"); } + + if (isAmountValid(startingBalance)){ + this.balance = startingBalance; + } + + else { + throw new IllegalArgumentException("Dollar Amount: " + startingBalance + " is invalid, cannot create account"); + } } public double getBalance() { diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index 770afe1b..18fc6c36 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -110,12 +110,19 @@ void isEmailValidTestUpdated(){ @Test void constructorTest() { + //valid test case BankAccount bankAccount = new BankAccount("a@b.com", 200); - assertEquals("a@b.com", bankAccount.getEmail()); assertEquals(200, bankAccount.getBalance()); - //check for exception thrown correctly + + //check for email exception thrown correctly assertThrows(IllegalArgumentException.class, ()-> new BankAccount("", 100)); + + //check for balance exception thrown correctly, border case + assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", -00.01)); + } + + } \ No newline at end of file From 3309bd34952d03217490799bcaeacecab2421ffb Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 28 Jan 2020 20:57:12 -0500 Subject: [PATCH 10/70] Deposit and Transfer methods added, all tests updated and passing --- .../edu/ithaca/dragon/bank/BankAccount.java | 59 +++++++++++++++++-- .../ithaca/dragon/bank/BankAccountTest.java | 9 ++- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index f7602383..6557773c 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -6,7 +6,9 @@ public class BankAccount { private double balance; /** + * @post creates a bank account object * @throws IllegalArgumentException if email is invalid + * */ public BankAccount(String email, double startingBalance) { if (isEmailValid(email)) { @@ -36,7 +38,6 @@ public String getEmail() { /** * @post checks if inputted dollar amount is a valid dollar amount * - * */ public static boolean isAmountValid(double amount) { @@ -62,17 +63,19 @@ public static boolean isAmountValid(double amount) { /** * @post reduces the balance by amount if amount is non-negative and smaller than balance * @throws InsufficientFundsException if trying to withdraw more than whats in account. + * @throws IllegalArgumentException if inputted amount is invalid. * */ public void withdraw (double amount) throws InsufficientFundsException, IllegalArgumentException { + //checks for valid input if (!isAmountValid(amount)) { throw new IllegalArgumentException("Invalid Input"); } - + //checks for valid withdraw amount if (balance < amount) { - throw new InsufficientFundsException("Cannot withdraw an amount larger than you balance"); + throw new InsufficientFundsException("Cannot withdraw an amount larger than your balance"); } else{ @@ -86,7 +89,6 @@ public void withdraw (double amount) throws InsufficientFundsException, IllegalA /** * @post checks if inputted email is a valid email. * - * */ public static boolean isEmailValid(String email) { //get index of @ @@ -131,7 +133,7 @@ else if (domain.charAt(i) == '.') return false; //must be at least 2 characters after period - if (domain.substring(period).length() < 2) + if (domain.substring(period+1).length() < 2) return false; @@ -158,5 +160,52 @@ else if (email.charAt(i) == '-') { return true; } + + + /** + * @post Adds the amount to the balance if amount is non-negative and smaller than balance + * @throws IllegalArgumentException if inputted amount is invalid. + * + */ + public void Deposit(double amount) throws IllegalArgumentException, InsufficientFundsException { + //checks for valid input + if (!isAmountValid(amount)) { + throw new IllegalArgumentException("Invalid Input"); + } + else { + balance += amount; + } + } + + + /** + * @post removes the amount from the balance and adds the amount to the other bank account if amount is non-negative and smaller than balance + * @throws InsufficientFundsException if trying to withdraw more than whats in account. + * @throws IllegalArgumentException if inputted amount is invalid. + * + */ + public void Transfer(BankAccount transferacct, double amount) throws IllegalArgumentException, InsufficientFundsException{ + //checks for valid input + if (!isAmountValid(amount)){ + throw new IllegalArgumentException("Invalid Input"); + } + //checks for valid transfer amount + if (balance < amount){ + throw new InsufficientFundsException("Cannot transfer an amount larger than your balance"); + } + + else{ + balance-= amount; + transferacct.balance+=amount; + } } + + + + } + + + + + diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index 18fc6c36..bc2cfcfa 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -7,11 +7,16 @@ class BankAccountTest { @Test - void getBalanceTest() { + void getBalanceTest() throws InsufficientFundsException { + //valid case BankAccount bankAccount = new BankAccount("a@b.com", 200); - assertEquals(200, bankAccount.getBalance()); + + //after successfull withdraw + bankAccount.withdraw(100); + assertEquals(100, bankAccount.getBalance()); + } @Test From e03a8f7dddbbd08c805b5dd5203a27bc2e44e34e Mon Sep 17 00:00:00 2001 From: cmartano Date: Fri, 31 Jan 2020 11:14:50 -0500 Subject: [PATCH 11/70] deposit and transfer tests added --- .../ithaca/dragon/bank/BankAccountTest.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index bc2cfcfa..6bc4bdad 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -128,6 +128,65 @@ void constructorTest() { } + @Test + void depositTest() throws IllegalArgumentException, InsufficientFundsException { + //successful deposit + BankAccount bankAccount = new BankAccount("a@b.com", 0); + bankAccount.Deposit(100); + assertEquals(100, bankAccount.getBalance()); + bankAccount.Deposit(0); + assertEquals(100, bankAccount.getBalance()); + + //checks for negative values + assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 50).Deposit(-0.01)); + assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 50).Deposit(-50)); + + //successful deposit including change + bankAccount = new BankAccount("a@b.com", 150); + bankAccount.Deposit(0.10); + assertEquals(150.10, bankAccount.getBalance()); + bankAccount.Deposit(31.31); + assertEquals(181.41, bankAccount.getBalance()); + + //invalid input check + assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 50).Deposit(100.031)); + assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 50).Deposit(0.00001)); + + + } + + @Test + void transferTest() throws IllegalArgumentException, InsufficientFundsException{ + BankAccount sender = new BankAccount("a@b.com", 500); + BankAccount reciever = new BankAccount("y@z.com", 0); + //successfull transfer + sender.Transfer(reciever,100); + assertEquals(400, sender.getBalance()); + assertEquals(100, reciever.getBalance()); + + //transfer with change + sender.Transfer(reciever, 1.50); + assertEquals(398.50, sender.getBalance()); + assertEquals(101.50, reciever.getBalance()); + + //0 dollars transfered + sender.Transfer(reciever, 0); + assertEquals(398.50, sender.getBalance()); + assertEquals(101.50, reciever.getBalance()); + + //negative amount trying to be transfered + assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 100).Transfer(new BankAccount("c@d.com", 0),-5)); + + //invalid input check + assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 100).Transfer(new BankAccount("y@z.com", 0),0.223)); + + //trying to transfer insufficent funds + assertThrows(InsufficientFundsException.class, ()-> new BankAccount("a@b.com", 100).Transfer(new BankAccount("hay@hay.com", 0),300)); + + //checks to be sure illegal argument is thrown rather than insufficient funds when both are valid + assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 10).Transfer(new BankAccount("c@d.com", 0),100.3131)); + } + } \ No newline at end of file From 5edc45af7e46fb07dfaaeb78f33aa40c93fde2fa Mon Sep 17 00:00:00 2001 From: cmartano Date: Fri, 31 Jan 2020 11:21:03 -0500 Subject: [PATCH 12/70] Deposit and transfer methods complete, all tests passing --- src/main/java/edu/ithaca/dragon/bank/BankAccount.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index 6557773c..0af5b73f 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -172,6 +172,7 @@ public void Deposit(double amount) throws IllegalArgumentException, Insufficient if (!isAmountValid(amount)) { throw new IllegalArgumentException("Invalid Input"); } + else { balance += amount; } @@ -189,6 +190,7 @@ public void Transfer(BankAccount transferacct, double amount) throws IllegalArgu if (!isAmountValid(amount)){ throw new IllegalArgumentException("Invalid Input"); } + //checks for valid transfer amount if (balance < amount){ throw new InsufficientFundsException("Cannot transfer an amount larger than your balance"); @@ -199,10 +201,8 @@ public void Transfer(BankAccount transferacct, double amount) throws IllegalArgu transferacct.balance+=amount; } } - - - } +} From 1448d95713e643a05a5b765387a4fadbe3d940a9 Mon Sep 17 00:00:00 2001 From: cmartano <34069445+cmartano@users.noreply.github.com> Date: Mon, 3 Feb 2020 13:46:28 -0500 Subject: [PATCH 13/70] Add files via upload --- AdminAPI.java | 13 +++++++++++ AdvancedAPI.java | 7 ++++++ BasicAPI.java | 16 +++++++++++++ CentralBank.java | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 AdminAPI.java create mode 100644 AdvancedAPI.java create mode 100644 BasicAPI.java create mode 100644 CentralBank.java diff --git a/AdminAPI.java b/AdminAPI.java new file mode 100644 index 00000000..51811787 --- /dev/null +++ b/AdminAPI.java @@ -0,0 +1,13 @@ +import java.util.Collection; + +public interface AdminAPI { + + public double calcTotalAssets(); + + public Collection findAcctIdsWithSuspiciousActivity(); + + public void freezeAccount(String acctId); + + public void unfreezeAcct(String acctId); + +} diff --git a/AdvancedAPI.java b/AdvancedAPI.java new file mode 100644 index 00000000..94054064 --- /dev/null +++ b/AdvancedAPI.java @@ -0,0 +1,7 @@ +//API to be used by Teller systems +public interface AdvancedAPI extends BasicAPI { + + public void createAccount(String acctId, double startingBalance); + + public void closeAccount(String acctId); +} diff --git a/BasicAPI.java b/BasicAPI.java new file mode 100644 index 00000000..efef1641 --- /dev/null +++ b/BasicAPI.java @@ -0,0 +1,16 @@ +//API to be used by ATMs +public interface BasicAPI { + + boolean confirmCredentials(String acctId, String password); + + double checkBalance(String acctId); + + void withdraw(String acctId, double amount) throws InsufficientFundsException; + + void deposit(String acctId, double amount); + + void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException; + + String transactionHistory(String acctId); + +} diff --git a/CentralBank.java b/CentralBank.java new file mode 100644 index 00000000..706a0f6c --- /dev/null +++ b/CentralBank.java @@ -0,0 +1,61 @@ +import java.util.Collection; + +public class CentralBank implements AdvancedAPI, AdminAPI { + + //----------------- BasicAPI methods -------------------------// + + public boolean confirmCredentials(String acctId, String password) { + return false; + } + + public double checkBalance(String acctId) { + return 0; + } + + public void withdraw(String acctId, double amount) throws InsufficientFundsException { + + } + + public void deposit(String acctId, double amount) { + + } + + public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException { + + } + + public String transactionHistory(String acctId) { + return null; + } + + + //----------------- AdvancedAPI methods -------------------------// + + public void createAccount(String acctId, double startingBalance) { + + } + + public void closeAccount(String acctId) { + + } + + + //------------------ AdminAPI methods -------------------------// + + public double checkTotalAssets() { + return 0; + } + + public Collection findAcctIdsWithSuspiciousActivity() { + return null; + } + + public void freezeAccount(String acctId) { + + } + + public void unfreezeAcct(String acctId) { + + } + +} From 8e38e347cddd6ba3a8a2d5d8e95b0864d0b53108 Mon Sep 17 00:00:00 2001 From: cmartano <34069445+cmartano@users.noreply.github.com> Date: Mon, 3 Feb 2020 13:47:11 -0500 Subject: [PATCH 14/70] Add files via upload --- .../java/edu/ithaca/dragon/bank/AdminAPI.java | 13 ++++ .../edu/ithaca/dragon/bank/AdvancedAPI.java | 7 +++ .../java/edu/ithaca/dragon/bank/BasicAPI.java | 16 +++++ .../edu/ithaca/dragon/bank/CentralBank.java | 61 +++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 src/main/java/edu/ithaca/dragon/bank/AdminAPI.java create mode 100644 src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java create mode 100644 src/main/java/edu/ithaca/dragon/bank/BasicAPI.java create mode 100644 src/main/java/edu/ithaca/dragon/bank/CentralBank.java diff --git a/src/main/java/edu/ithaca/dragon/bank/AdminAPI.java b/src/main/java/edu/ithaca/dragon/bank/AdminAPI.java new file mode 100644 index 00000000..51811787 --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/AdminAPI.java @@ -0,0 +1,13 @@ +import java.util.Collection; + +public interface AdminAPI { + + public double calcTotalAssets(); + + public Collection findAcctIdsWithSuspiciousActivity(); + + public void freezeAccount(String acctId); + + public void unfreezeAcct(String acctId); + +} diff --git a/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java b/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java new file mode 100644 index 00000000..94054064 --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java @@ -0,0 +1,7 @@ +//API to be used by Teller systems +public interface AdvancedAPI extends BasicAPI { + + public void createAccount(String acctId, double startingBalance); + + public void closeAccount(String acctId); +} diff --git a/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java b/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java new file mode 100644 index 00000000..efef1641 --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java @@ -0,0 +1,16 @@ +//API to be used by ATMs +public interface BasicAPI { + + boolean confirmCredentials(String acctId, String password); + + double checkBalance(String acctId); + + void withdraw(String acctId, double amount) throws InsufficientFundsException; + + void deposit(String acctId, double amount); + + void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException; + + String transactionHistory(String acctId); + +} diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java new file mode 100644 index 00000000..706a0f6c --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -0,0 +1,61 @@ +import java.util.Collection; + +public class CentralBank implements AdvancedAPI, AdminAPI { + + //----------------- BasicAPI methods -------------------------// + + public boolean confirmCredentials(String acctId, String password) { + return false; + } + + public double checkBalance(String acctId) { + return 0; + } + + public void withdraw(String acctId, double amount) throws InsufficientFundsException { + + } + + public void deposit(String acctId, double amount) { + + } + + public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException { + + } + + public String transactionHistory(String acctId) { + return null; + } + + + //----------------- AdvancedAPI methods -------------------------// + + public void createAccount(String acctId, double startingBalance) { + + } + + public void closeAccount(String acctId) { + + } + + + //------------------ AdminAPI methods -------------------------// + + public double checkTotalAssets() { + return 0; + } + + public Collection findAcctIdsWithSuspiciousActivity() { + return null; + } + + public void freezeAccount(String acctId) { + + } + + public void unfreezeAcct(String acctId) { + + } + +} From 1eb0873562feb438f5dcd6fd800c993442f99294 Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 3 Feb 2020 13:48:17 -0500 Subject: [PATCH 15/70] new files added in src/main --- AdminAPI.java | 13 ----------- AdvancedAPI.java | 7 ------ BasicAPI.java | 16 ------------- CentralBank.java | 61 ------------------------------------------------ 4 files changed, 97 deletions(-) delete mode 100644 AdminAPI.java delete mode 100644 AdvancedAPI.java delete mode 100644 BasicAPI.java delete mode 100644 CentralBank.java diff --git a/AdminAPI.java b/AdminAPI.java deleted file mode 100644 index 51811787..00000000 --- a/AdminAPI.java +++ /dev/null @@ -1,13 +0,0 @@ -import java.util.Collection; - -public interface AdminAPI { - - public double calcTotalAssets(); - - public Collection findAcctIdsWithSuspiciousActivity(); - - public void freezeAccount(String acctId); - - public void unfreezeAcct(String acctId); - -} diff --git a/AdvancedAPI.java b/AdvancedAPI.java deleted file mode 100644 index 94054064..00000000 --- a/AdvancedAPI.java +++ /dev/null @@ -1,7 +0,0 @@ -//API to be used by Teller systems -public interface AdvancedAPI extends BasicAPI { - - public void createAccount(String acctId, double startingBalance); - - public void closeAccount(String acctId); -} diff --git a/BasicAPI.java b/BasicAPI.java deleted file mode 100644 index efef1641..00000000 --- a/BasicAPI.java +++ /dev/null @@ -1,16 +0,0 @@ -//API to be used by ATMs -public interface BasicAPI { - - boolean confirmCredentials(String acctId, String password); - - double checkBalance(String acctId); - - void withdraw(String acctId, double amount) throws InsufficientFundsException; - - void deposit(String acctId, double amount); - - void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException; - - String transactionHistory(String acctId); - -} diff --git a/CentralBank.java b/CentralBank.java deleted file mode 100644 index 706a0f6c..00000000 --- a/CentralBank.java +++ /dev/null @@ -1,61 +0,0 @@ -import java.util.Collection; - -public class CentralBank implements AdvancedAPI, AdminAPI { - - //----------------- BasicAPI methods -------------------------// - - public boolean confirmCredentials(String acctId, String password) { - return false; - } - - public double checkBalance(String acctId) { - return 0; - } - - public void withdraw(String acctId, double amount) throws InsufficientFundsException { - - } - - public void deposit(String acctId, double amount) { - - } - - public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException { - - } - - public String transactionHistory(String acctId) { - return null; - } - - - //----------------- AdvancedAPI methods -------------------------// - - public void createAccount(String acctId, double startingBalance) { - - } - - public void closeAccount(String acctId) { - - } - - - //------------------ AdminAPI methods -------------------------// - - public double checkTotalAssets() { - return 0; - } - - public Collection findAcctIdsWithSuspiciousActivity() { - return null; - } - - public void freezeAccount(String acctId) { - - } - - public void unfreezeAcct(String acctId) { - - } - -} From e4b6542e461fc1a71c444447ab5e617b975db5d5 Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 4 Feb 2020 13:50:47 -0500 Subject: [PATCH 16/70] packages set --- src/main/java/edu/ithaca/dragon/bank/AdminAPI.java | 2 ++ src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java | 2 ++ src/main/java/edu/ithaca/dragon/bank/BasicAPI.java | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/main/java/edu/ithaca/dragon/bank/AdminAPI.java b/src/main/java/edu/ithaca/dragon/bank/AdminAPI.java index 51811787..b11e2b4e 100644 --- a/src/main/java/edu/ithaca/dragon/bank/AdminAPI.java +++ b/src/main/java/edu/ithaca/dragon/bank/AdminAPI.java @@ -1,3 +1,5 @@ +package edu.ithaca.dragon.bank; + import java.util.Collection; public interface AdminAPI { diff --git a/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java b/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java index 94054064..26253541 100644 --- a/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java +++ b/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java @@ -1,3 +1,5 @@ +package edu.ithaca.dragon.bank; + //API to be used by Teller systems public interface AdvancedAPI extends BasicAPI { diff --git a/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java b/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java index efef1641..bd65b941 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java +++ b/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java @@ -1,3 +1,5 @@ +package edu.ithaca.dragon.bank; + //API to be used by ATMs public interface BasicAPI { From 74eebfcc5b00b613937a8210e454a2e742bdd27f Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Tue, 4 Feb 2020 13:56:28 -0500 Subject: [PATCH 17/70] added import package in CentralBank --- .idea/compiler.xml | 1 + .idea/encodings.xml | 1 + .idea/misc.xml | 5 ++++- src/main/java/edu/ithaca/dragon/bank/CentralBank.java | 2 ++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 28c6362f..d1ff3048 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,6 +7,7 @@ + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index b26911bd..fade66b8 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index bcc0317e..ae226a7f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,9 @@ + + - + \ No newline at end of file diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index 706a0f6c..37508848 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -1,3 +1,5 @@ +package edu.ithaca.dragon.bank; + import java.util.Collection; public class CentralBank implements AdvancedAPI, AdminAPI { From edc7433c360cba5b914a04bd7bcc57dc83947aa7 Mon Sep 17 00:00:00 2001 From: cmartano Date: Wed, 5 Feb 2020 13:11:00 -0500 Subject: [PATCH 18/70] checking and savings accounts along w bank account list in central banl --- .idea/misc.xml | 2 +- .../edu/ithaca/dragon/bank/BankAccount.java | 98 +------------------ .../edu/ithaca/dragon/bank/CentralBank.java | 4 + .../ithaca/dragon/bank/CheckingAccount.java | 31 ++++++ .../ithaca/dragon/bank/SavingsAccount.java | 26 +++++ 5 files changed, 66 insertions(+), 95 deletions(-) create mode 100644 src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java create mode 100644 src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java diff --git a/.idea/misc.xml b/.idea/misc.xml index ae226a7f..7ec11deb 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + \ No newline at end of file diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index 0af5b73f..cd964c1c 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -2,7 +2,7 @@ public class BankAccount { - private String email; + private String acctId; private double balance; /** @@ -10,30 +10,15 @@ public class BankAccount { * @throws IllegalArgumentException if email is invalid * */ - public BankAccount(String email, double startingBalance) { - if (isEmailValid(email)) { - this.email = email; - } - else { - throw new IllegalArgumentException("Email address: " + email + " is invalid, cannot create account"); - } - - if (isAmountValid(startingBalance)){ - this.balance = startingBalance; - } - - else { - throw new IllegalArgumentException("Dollar Amount: " + startingBalance + " is invalid, cannot create account"); - } + public BankAccount() { + BankAccount acct = new BankAccount(); } + public double getBalance() { return balance; } - public String getEmail() { - return email; - } /** * @post checks if inputted dollar amount is a valid dollar amount @@ -59,7 +44,6 @@ public static boolean isAmountValid(double amount) { - /** * @post reduces the balance by amount if amount is non-negative and smaller than balance * @throws InsufficientFundsException if trying to withdraw more than whats in account. @@ -86,80 +70,6 @@ public void withdraw (double amount) throws InsufficientFundsException, IllegalA } - /** - * @post checks if inputted email is a valid email. - * - */ - public static boolean isEmailValid(String email) { - //get index of @ - int atsym = email.indexOf('@'); - - //empty string - if (atsym == -1) - return false; - - //invalid characters at start and before @ symbol - if (email.charAt(0) == '-' || email.charAt(atsym - 1) == '-') - return false; - - if (email.charAt(0) == '.' || email.charAt(atsym - 1) == '.') - return false; - - //isolate domain - String domain = email.substring(atsym + 1); - - //get index of period - int period = domain.indexOf('.'); - - //empty string - if (period == -1) - return false; - - //keeps track of periods in domain - int pdcount = 0; - - - for (int i = 0; i < domain.length(); i++) { - //checks for 2 @'s next to each other - if (domain.charAt(i) == '@') - return false; - - else if (domain.charAt(i) == '.') - pdcount++; - } - - //can only be one period in domain - if (pdcount != 1) - return false; - - //must be at least 2 characters after period - if (domain.substring(period+1).length() < 2) - return false; - - - for (int i = 0; i < email.length(); i++) { - //invalid character check - if (email.charAt(i) == '#') - return false; - //no spaces allowed - else if (email.charAt(i) == ' ') - return false; - //2 periods in a row check - else if (email.charAt(i) == '.') { - if (email.charAt(i + 1) == '.') - return false; - } - - //2 dashes in a row check - else if (email.charAt(i) == '-') { - if (email.charAt(i + 1) == '-') - return false; - } - } - - return true; - - } /** diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index 37508848..00534972 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -1,9 +1,13 @@ package edu.ithaca.dragon.bank; import java.util.Collection; +import java.util.LinkedList; +import java.util.List; public class CentralBank implements AdvancedAPI, AdminAPI { + private List AccountList = new LinkedList(); + //----------------- BasicAPI methods -------------------------// public boolean confirmCredentials(String acctId, String password) { diff --git a/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java b/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java new file mode 100644 index 00000000..a684abb2 --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java @@ -0,0 +1,31 @@ +package edu.ithaca.dragon.bank; + +public class CheckingAccount extends BankAccount { + + private String acctId; + private double balance; + + public CheckingAccount(String acctId, double startingBalance) { + if (isAmountValid(startingBalance)){ + this.balance = startingBalance; + this.acctId = acctId; + } + + else { + throw new IllegalArgumentException("Dollar Amount: " + startingBalance + " is invalid, cannot create account"); + } + } + + public double getBalance() { + return balance; + } + + public String getAcctId() { return acctId; } + + + + + + + +} diff --git a/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java b/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java new file mode 100644 index 00000000..a61f518e --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java @@ -0,0 +1,26 @@ +package edu.ithaca.dragon.bank; + +public class SavingsAccount extends BankAccount { + private String acctId; + private double balance; + + public SavingsAccount(String acctId, double startingBalance) { + if (isAmountValid(startingBalance)){ + this.balance = startingBalance; + this.acctId = acctId; + } + + else { + throw new IllegalArgumentException("Dollar Amount: " + startingBalance + " is invalid, cannot create account"); + } + } + + public double getBalance() { + return balance; + } + + public String getAcctId() { return acctId; } + + + +} From 13d17a6f299598f7aa9c41c0824de61dabe2b4d0 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Wed, 5 Feb 2020 13:13:08 -0500 Subject: [PATCH 19/70] Added comments to branch --- .idea/compiler.xml | 1 + .idea/misc.xml | 2 +- src/main/java/edu/ithaca/dragon/bank/CentralBank.java | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 28c6362f..c680d78c 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,6 +6,7 @@ + diff --git a/.idea/misc.xml b/.idea/misc.xml index bcc0317e..d30e7d53 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index 706a0f6c..be1380e9 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -32,11 +32,12 @@ public String transactionHistory(String acctId) { //----------------- AdvancedAPI methods -------------------------// public void createAccount(String acctId, double startingBalance) { + //Seeing if I can commit a branch to the main } public void closeAccount(String acctId) { - + // No code written here currently. } From 45cdc3db90f7420949e2d9401584c0dbe534d858 Mon Sep 17 00:00:00 2001 From: cmartano Date: Wed, 5 Feb 2020 13:39:24 -0500 Subject: [PATCH 20/70] checkbalance test --- .../edu/ithaca/dragon/bank/CentralBank.java | 3 +- .../ithaca/dragon/bank/CheckingAccount.java | 16 +- .../ithaca/dragon/bank/BankAccountTest.java | 290 ++++++++---------- .../ithaca/dragon/bank/CentralBankTest.java | 14 + 4 files changed, 155 insertions(+), 168 deletions(-) create mode 100644 src/test/java/edu/ithaca/dragon/bank/CentralBankTest.java diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index 00534972..2ce2f39e 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -24,6 +24,7 @@ public void withdraw(String acctId, double amount) throws InsufficientFundsExcep public void deposit(String acctId, double amount) { + } public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException { @@ -48,7 +49,7 @@ public void closeAccount(String acctId) { //------------------ AdminAPI methods -------------------------// - public double checkTotalAssets() { + public double calcTotalAssets() { return 0; } diff --git a/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java b/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java index a684abb2..ccf83570 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java @@ -1,24 +1,22 @@ package edu.ithaca.dragon.bank; -public class CheckingAccount extends BankAccount { +public class CheckingAccount { private String acctId; private double balance; public CheckingAccount(String acctId, double startingBalance) { - if (isAmountValid(startingBalance)){ + // if (isAmountValid(startingBalance)){ this.balance = startingBalance; this.acctId = acctId; - } + //} - else { - throw new IllegalArgumentException("Dollar Amount: " + startingBalance + " is invalid, cannot create account"); - } + //else { + //throw new IllegalArgumentException("Dollar Amount: " + startingBalance + " is invalid, cannot create account"); + // } } - public double getBalance() { - return balance; - } + public double getBalance() { return balance; } public String getAcctId() { return acctId; } diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index 6bc4bdad..0ab22325 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -6,18 +6,18 @@ class BankAccountTest { - @Test - void getBalanceTest() throws InsufficientFundsException { - - //valid case - BankAccount bankAccount = new BankAccount("a@b.com", 200); - assertEquals(200, bankAccount.getBalance()); - - //after successfull withdraw - bankAccount.withdraw(100); - assertEquals(100, bankAccount.getBalance()); - - } +// @Test +// void getBalanceTest() throws InsufficientFundsException { +// +// //valid case +// BankAccount bankAccount = new BankAccount("", 200); +// assertEquals(200, bankAccount.getBalance()); +// +// //after successfull withdraw +// bankAccount.withdraw(100); +// assertEquals(100, bankAccount.getBalance()); +// +// } @Test void isAmountValidTest(){ @@ -40,152 +40,126 @@ void isAmountValidTest(){ assertFalse(BankAccount.isAmountValid(83746.82736453)); } - @Test - void withdrawTest() throws InsufficientFundsException, IllegalArgumentException{ - //greater than balance - assertThrows(InsufficientFundsException.class, ()-> new BankAccount("a@b.com", 100).withdraw(101)); - - - //less than balance - BankAccount bankaccount = new BankAccount("a@b.com", 200); - bankaccount.withdraw(100); - assertEquals(100, bankaccount.getBalance()); - - - //equal to balance - bankaccount = new BankAccount("a@b.com", 300); - bankaccount.withdraw(300); - assertEquals(0, bankaccount.getBalance()); - - - //negative - argument thrown - assertThrows(IllegalArgumentException.class,() -> new BankAccount("a@b.com", 300).withdraw(-1)); - - - //invalid input - assertThrows(IllegalArgumentException.class,() -> new BankAccount("a@b.com",200).withdraw(100.005)); - } - - - @Test - void isEmailValidTestUpdated(){ - // checks for a basic, valid email and for empty string - assertTrue(BankAccount.isEmailValid( "a@b.com")); - assertFalse( BankAccount.isEmailValid(" ")); - - // checks for forbidden characters... border case: one forbidden characters is present - assertFalse(BankAccount.isEmailValid("ab#c@gmail.com")); - assertFalse(BankAccount.isEmailValid("ab-c @gmail.com")); - - // checks for 1 period after the @... border case: 0, 1, or 2 periods found - assertTrue(BankAccount.isEmailValid("hay@mail.com")); - assertFalse(BankAccount.isEmailValid("hayyy@mailcom")); - assertFalse(BankAccount.isEmailValid("hay@ma.il.com")); - - // checks for the proper number of @ symbols... border case: 0, 1, or 2 @'s present - assertTrue(BankAccount.isEmailValid("cmartano@gmail.com")); - assertFalse(BankAccount.isEmailValid("cmartanoaol.com")); - assertFalse(BankAccount.isEmailValid("c@martano@yahoo.com")); - - // checks for the number of characters after the last period... border case: 1 or 2 - assertTrue(BankAccount.isEmailValid("name@place.co")); - assertFalse(BankAccount.isEmailValid("name@place.c")); - - // checks that each dash is a "legal" dash... border case: dash to start, 2 in a row, before @ symbol - assertTrue(BankAccount.isEmailValid("c-martano@gmail.com")); - assertFalse(BankAccount.isEmailValid("marta--no@gmail.com")); - assertFalse(BankAccount.isEmailValid("-christianmar-tano@aol.com")); - assertFalse(BankAccount.isEmailValid("c-l-martano-@gmail.com")); - - // checks that each period is a "legal" period... border case: period to start, 2 in a row, before @ symbol - assertTrue(BankAccount.isEmailValid("c.martano@gmail.com")); - assertFalse(BankAccount.isEmailValid("c.ma..rtano@gmail.com")); - assertFalse(BankAccount.isEmailValid(".christian@gmail.com")); - assertFalse(BankAccount.isEmailValid("c.l.martano.@gmail.com")); - - - //presence of invalid character - assertTrue(BankAccount.isEmailValid("abc@google.com")); - assertFalse( BankAccount.isEmailValid("abc-@mail.com")); - assertFalse( BankAccount.isEmailValid("abc.@mail.com")); - assertFalse( BankAccount.isEmailValid(".abc@mail.com")); - assertFalse( BankAccount.isEmailValid("abc#def@mail.com")); - } - - - @Test - void constructorTest() { - //valid test case - BankAccount bankAccount = new BankAccount("a@b.com", 200); - assertEquals("a@b.com", bankAccount.getEmail()); - assertEquals(200, bankAccount.getBalance()); - - //check for email exception thrown correctly - assertThrows(IllegalArgumentException.class, ()-> new BankAccount("", 100)); - - //check for balance exception thrown correctly, border case - assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", -00.01)); - - } - - @Test - void depositTest() throws IllegalArgumentException, InsufficientFundsException { - //successful deposit - BankAccount bankAccount = new BankAccount("a@b.com", 0); - bankAccount.Deposit(100); - assertEquals(100, bankAccount.getBalance()); - bankAccount.Deposit(0); - assertEquals(100, bankAccount.getBalance()); - - //checks for negative values - assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 50).Deposit(-0.01)); - assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 50).Deposit(-50)); - - //successful deposit including change - bankAccount = new BankAccount("a@b.com", 150); - bankAccount.Deposit(0.10); - assertEquals(150.10, bankAccount.getBalance()); - bankAccount.Deposit(31.31); - assertEquals(181.41, bankAccount.getBalance()); - - //invalid input check - assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 50).Deposit(100.031)); - assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 50).Deposit(0.00001)); - - - } - - @Test - void transferTest() throws IllegalArgumentException, InsufficientFundsException{ - BankAccount sender = new BankAccount("a@b.com", 500); - BankAccount reciever = new BankAccount("y@z.com", 0); - //successfull transfer - sender.Transfer(reciever,100); - assertEquals(400, sender.getBalance()); - assertEquals(100, reciever.getBalance()); - - //transfer with change - sender.Transfer(reciever, 1.50); - assertEquals(398.50, sender.getBalance()); - assertEquals(101.50, reciever.getBalance()); - - //0 dollars transfered - sender.Transfer(reciever, 0); - assertEquals(398.50, sender.getBalance()); - assertEquals(101.50, reciever.getBalance()); - - //negative amount trying to be transfered - assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 100).Transfer(new BankAccount("c@d.com", 0),-5)); - - //invalid input check - assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 100).Transfer(new BankAccount("y@z.com", 0),0.223)); - - //trying to transfer insufficent funds - assertThrows(InsufficientFundsException.class, ()-> new BankAccount("a@b.com", 100).Transfer(new BankAccount("hay@hay.com", 0),300)); - - //checks to be sure illegal argument is thrown rather than insufficient funds when both are valid - assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 10).Transfer(new BankAccount("c@d.com", 0),100.3131)); - } +// @Test +// void withdrawTest() throws InsufficientFundsException, IllegalArgumentException{ +// //greater than balance +// assertThrows(InsufficientFundsException.class, ()-> new BankAccount("a@b.com", 100).withdraw(101)); +// +// +// //less than balance +// BankAccount bankaccount = new BankAccount("a@b.com", 200); +// bankaccount.withdraw(100); +// assertEquals(100, bankaccount.getBalance()); +// +// +// //equal to balance +// bankaccount = new BankAccount("a@b.com", 300); +// bankaccount.withdraw(300); +// assertEquals(0, bankaccount.getBalance()); +// +// +// //negative - argument thrown +// assertThrows(IllegalArgumentException.class,() -> new BankAccount("a@b.com", 300).withdraw(-1)); +// +// +// //invalid input +// assertThrows(IllegalArgumentException.class,() -> new BankAccount("a@b.com",200).withdraw(100.005)); +// } + + +// @Test +// void isEmailValidTestUpdated(){ +// // checks for a basic, valid email and for empty string +// assertTrue(BankAccount.isEmailValid( "a@b.com")); +// assertFalse( BankAccount.isEmailValid(" ")); +// +// // checks for forbidden characters... border case: one forbidden characters is present +// assertFalse(BankAccount.isEmailValid("ab#c@gmail.com")); +// assertFalse(BankAccount.isEmailValid("ab-c @gmail.com")); +// +// // checks for 1 period after the @... border case: 0, 1, or 2 periods found +// assertTrue(BankAccount.isEmailValid("hay@mail.com")); +// assertFalse(BankAccount.isEmailValid("hayyy@mailcom")); +// assertFalse(BankAccount.isEmailValid("hay@ma.il.com")); +// +// // checks for the proper number of @ symbols... border case: 0, 1, or 2 @'s present +// assertTrue(BankAccount.isEmailValid("cmartano@gmail.com")); +// assertFalse(BankAccount.isEmailValid("cmartanoaol.com")); +// assertFalse(BankAccount.isEmailValid("c@martano@yahoo.com")); +// +// // checks for the number of characters after the last period... border case: 1 or 2 +// assertTrue(BankAccount.isEmailValid("name@place.co")); +// assertFalse(BankAccount.isEmailValid("name@place.c")); +// +// // checks that each dash is a "legal" dash... border case: dash to start, 2 in a row, before @ symbol +// assertTrue(BankAccount.isEmailValid("c-martano@gmail.com")); +// assertFalse(BankAccount.isEmailValid("marta--no@gmail.com")); +// assertFalse(BankAccount.isEmailValid("-christianmar-tano@aol.com")); +// assertFalse(BankAccount.isEmailValid("c-l-martano-@gmail.com")); +// +// // checks that each period is a "legal" period... border case: period to start, 2 in a row, before @ symbol +// assertTrue(BankAccount.isEmailValid("c.martano@gmail.com")); +// assertFalse(BankAccount.isEmailValid("c.ma..rtano@gmail.com")); +// assertFalse(BankAccount.isEmailValid(".christian@gmail.com")); +// assertFalse(BankAccount.isEmailValid("c.l.martano.@gmail.com")); +// +// +// //presence of invalid character +// assertTrue(BankAccount.isEmailValid("abc@google.com")); +// assertFalse( BankAccount.isEmailValid("abc-@mail.com")); +// assertFalse( BankAccount.isEmailValid("abc.@mail.com")); +// assertFalse( BankAccount.isEmailValid(".abc@mail.com")); +// assertFalse( BankAccount.isEmailValid("abc#def@mail.com")); +// } +// +// +// @Test +// void constructorTest() { +// //valid test case +// BankAccount bankAccount = new BankAccount("a@b.com", 200); +// assertEquals("a@b.com", bankAccount.getEmail()); +// assertEquals(200, bankAccount.getBalance()); +// +// //check for email exception thrown correctly +// assertThrows(IllegalArgumentException.class, ()-> new BankAccount("", 100)); +// +// //check for balance exception thrown correctly, border case +// assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", -00.01)); +// +// } + + +// @Test +// void transferTest() throws IllegalArgumentException, InsufficientFundsException{ +// BankAccount sender = new BankAccount("a@b.com", 500); +// BankAccount reciever = new BankAccount("y@z.com", 0); +// //successfull transfer +// sender.Transfer(reciever,100); +// assertEquals(400, sender.getBalance()); +// assertEquals(100, reciever.getBalance()); +// +// //transfer with change +// sender.Transfer(reciever, 1.50); +// assertEquals(398.50, sender.getBalance()); +// assertEquals(101.50, reciever.getBalance()); +// +// //0 dollars transfered +// sender.Transfer(reciever, 0); +// assertEquals(398.50, sender.getBalance()); +// assertEquals(101.50, reciever.getBalance()); +// +// //negative amount trying to be transfered +// assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 100).Transfer(new BankAccount("c@d.com", 0),-5)); +// +// //invalid input check +// assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 100).Transfer(new BankAccount("y@z.com", 0),0.223)); +// +// //trying to transfer insufficent funds +// assertThrows(InsufficientFundsException.class, ()-> new BankAccount("a@b.com", 100).Transfer(new BankAccount("hay@hay.com", 0),300)); +// +// //checks to be sure illegal argument is thrown rather than insufficient funds when both are valid +// assertThrows(IllegalArgumentException.class, ()-> new BankAccount("a@b.com", 10).Transfer(new BankAccount("c@d.com", 0),100.3131)); +// } diff --git a/src/test/java/edu/ithaca/dragon/bank/CentralBankTest.java b/src/test/java/edu/ithaca/dragon/bank/CentralBankTest.java new file mode 100644 index 00000000..6e4b0fb8 --- /dev/null +++ b/src/test/java/edu/ithaca/dragon/bank/CentralBankTest.java @@ -0,0 +1,14 @@ +package edu.ithaca.dragon.bank; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CentralBankTest { + @Test + void checkbalanceTest(){ + CheckingAccount acct =new CheckingAccount("christian",200); + assertEquals(200,acct.getBalance()); + } + +} From 6e2d0d55d4de6abba3355327c157fa35741cbc5d Mon Sep 17 00:00:00 2001 From: cmartano Date: Wed, 5 Feb 2020 19:32:20 -0500 Subject: [PATCH 21/70] updated classes to match our class diagram --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 29 +++++++++ .../java/edu/ithaca/dragon/bank/Admin.java | 22 +++++++ .../edu/ithaca/dragon/bank/BankAccount.java | 12 +++- .../edu/ithaca/dragon/bank/CentralBank.java | 60 ++++--------------- .../ithaca/dragon/bank/CheckingAccount.java | 27 ++------- .../ithaca/dragon/bank/SavingsAccount.java | 24 ++------ .../java/edu/ithaca/dragon/bank/Teller.java | 15 +++++ .../java/edu/ithaca/dragon/bank/User.java | 18 ++++++ 8 files changed, 115 insertions(+), 92 deletions(-) create mode 100644 src/main/java/edu/ithaca/dragon/bank/ATM.java create mode 100644 src/main/java/edu/ithaca/dragon/bank/Admin.java create mode 100644 src/main/java/edu/ithaca/dragon/bank/Teller.java create mode 100644 src/main/java/edu/ithaca/dragon/bank/User.java diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java new file mode 100644 index 00000000..da12ba6d --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -0,0 +1,29 @@ +package edu.ithaca.dragon.bank; + +public class ATM implements BasicAPI{ + public boolean confirmCredentials(String acctId, String password) { + return false; + } + + public double checkBalance(String acctId) { + return 0; + } + + public void withdraw(String acctId, double amount) throws InsufficientFundsException { + + } + + public void deposit(String acctId, double amount) { + + + } + + public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException { + + } + + public String transactionHistory(String acctId) { + return null; + } + +} diff --git a/src/main/java/edu/ithaca/dragon/bank/Admin.java b/src/main/java/edu/ithaca/dragon/bank/Admin.java new file mode 100644 index 00000000..ef62c30b --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/Admin.java @@ -0,0 +1,22 @@ +package edu.ithaca.dragon.bank; + +import java.util.Collection; + +public class Admin implements AdminAPI { + + public double calcTotalAssets() { + return 0; + } + + public Collection findAcctIdsWithSuspiciousActivity() { + return null; + } + + public void freezeAccount(String acctId) { + + } + + public void unfreezeAcct(String acctId) { + + } +} diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index cd964c1c..f8a38faf 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -4,14 +4,22 @@ public class BankAccount { private String acctId; private double balance; + private boolean frozen = false; /** * @post creates a bank account object * @throws IllegalArgumentException if email is invalid * */ - public BankAccount() { - BankAccount acct = new BankAccount(); + public BankAccount(double startingBalance, String acctId) { + if (isAmountValid(startingBalance)){ + this.balance = startingBalance; + this.acctId = acctId; + } + + else { + throw new IllegalArgumentException("Dollar Amount: " + startingBalance + " is invalid, cannot create account"); + } } diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index 2ce2f39e..33f84a5c 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -1,68 +1,30 @@ package edu.ithaca.dragon.bank; import java.util.Collection; -import java.util.LinkedList; -import java.util.List; -public class CentralBank implements AdvancedAPI, AdminAPI { +public class CentralBank { - private List AccountList = new LinkedList(); + Collection accounts; + Collection admins; + Collection atms; + Collection users; - //----------------- BasicAPI methods -------------------------// + public void withdraw(BankAccount account, double amount) { - public boolean confirmCredentials(String acctId, String password) { - return false; } - public double checkBalance(String acctId) { - return 0; - } - - public void withdraw(String acctId, double amount) throws InsufficientFundsException { - - } - - public void deposit(String acctId, double amount) { - - - } - - public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException { - - } - - public String transactionHistory(String acctId) { - return null; - } - - - //----------------- AdvancedAPI methods -------------------------// - - public void createAccount(String acctId, double startingBalance) { - - } - - public void closeAccount(String acctId) { + public void deposit(BankAccount account, double amount) { } + public void transfer(BankAccount fromAccount, BankAccount toAccount, double amount) { - //------------------ AdminAPI methods -------------------------// - - public double calcTotalAssets() { - return 0; - } - - public Collection findAcctIdsWithSuspiciousActivity() { - return null; } - public void freezeAccount(String acctId) { - + public double getBalance(BankAccount account) { + return account.getBalance(); } - public void unfreezeAcct(String acctId) { - } -} +} \ No newline at end of file diff --git a/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java b/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java index ccf83570..bd6883ce 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/CheckingAccount.java @@ -1,29 +1,10 @@ package edu.ithaca.dragon.bank; -public class CheckingAccount { - - private String acctId; - private double balance; - - public CheckingAccount(String acctId, double startingBalance) { - // if (isAmountValid(startingBalance)){ - this.balance = startingBalance; - this.acctId = acctId; - //} - - //else { - //throw new IllegalArgumentException("Dollar Amount: " + startingBalance + " is invalid, cannot create account"); - // } +public class CheckingAccount extends BankAccount { + public CheckingAccount(double startingBalance, String acctId) { + super(startingBalance,acctId); } - - public double getBalance() { return balance; } - - public String getAcctId() { return acctId; } - - - - +} -} diff --git a/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java b/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java index a61f518e..ed7ca5ee 100644 --- a/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java @@ -1,26 +1,14 @@ package edu.ithaca.dragon.bank; public class SavingsAccount extends BankAccount { - private String acctId; - private double balance; + private double interestRate; + private double maximumWithdrawal; - public SavingsAccount(String acctId, double startingBalance) { - if (isAmountValid(startingBalance)){ - this.balance = startingBalance; - this.acctId = acctId; - } - else { - throw new IllegalArgumentException("Dollar Amount: " + startingBalance + " is invalid, cannot create account"); - } + public SavingsAccount(double startingBalance, String acctId, double interestRate, double maximumWithdrawal) { + super(startingBalance,acctId); + this.interestRate = interestRate; + this.maximumWithdrawal = maximumWithdrawal; } - public double getBalance() { - return balance; - } - - public String getAcctId() { return acctId; } - - - } diff --git a/src/main/java/edu/ithaca/dragon/bank/Teller.java b/src/main/java/edu/ithaca/dragon/bank/Teller.java new file mode 100644 index 00000000..08fdbef1 --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/Teller.java @@ -0,0 +1,15 @@ +package edu.ithaca.dragon.bank; + +public class Teller extends ATM implements AdvancedAPI { + + + @Override + public void createAccount(String acctId, double startingBalance) { + + } + + @Override + public void closeAccount(String acctId) { + + } +} diff --git a/src/main/java/edu/ithaca/dragon/bank/User.java b/src/main/java/edu/ithaca/dragon/bank/User.java new file mode 100644 index 00000000..b586c2df --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/User.java @@ -0,0 +1,18 @@ +package edu.ithaca.dragon.bank; + +import java.util.Collection; + + +public class User { + + private Collection AccountList; + private String username; + private String password; + + public User(String username, String password){ + this.username=username; + this.password=password; + } + + +} From 232f38dcc055fef073aa4a3047c5ff2a8c3ffd17 Mon Sep 17 00:00:00 2001 From: cmartano Date: Sun, 9 Feb 2020 16:41:21 -0500 Subject: [PATCH 22/70] admin constructor and account collection added --- .idea/compiler.xml | 2 +- src/main/java/edu/ithaca/dragon/bank/Admin.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index d1ff3048..8e55586a 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,8 +6,8 @@ - + diff --git a/src/main/java/edu/ithaca/dragon/bank/Admin.java b/src/main/java/edu/ithaca/dragon/bank/Admin.java index ef62c30b..ef5fefe2 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Admin.java +++ b/src/main/java/edu/ithaca/dragon/bank/Admin.java @@ -3,6 +3,12 @@ import java.util.Collection; public class Admin implements AdminAPI { + Collection accounts; + + public Admin(Collection accounts){ + this.accounts=accounts; + } + public double calcTotalAssets() { return 0; From f6c11797711222d8da1d940a77688aee0c2e3619 Mon Sep 17 00:00:00 2001 From: cmartano Date: Sun, 9 Feb 2020 22:00:19 -0500 Subject: [PATCH 23/70] update on atm,teller,user,admin classes --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 13 +++++++++++-- src/main/java/edu/ithaca/dragon/bank/Admin.java | 1 + .../java/edu/ithaca/dragon/bank/CentralBank.java | 1 + src/main/java/edu/ithaca/dragon/bank/Teller.java | 12 ++++++++++-- src/main/java/edu/ithaca/dragon/bank/User.java | 5 +++++ 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index da12ba6d..7ab6e334 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -1,7 +1,16 @@ package edu.ithaca.dragon.bank; +import java.util.Collection; + public class ATM implements BasicAPI{ - public boolean confirmCredentials(String acctId, String password) { + + Collection users; + public ATM(Collection users){ + this.users=users; + } + + + public boolean confirmCredentials(String username, String password) { return false; } @@ -9,13 +18,13 @@ public double checkBalance(String acctId) { return 0; } + public void withdraw(String acctId, double amount) throws InsufficientFundsException { } public void deposit(String acctId, double amount) { - } public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException { diff --git a/src/main/java/edu/ithaca/dragon/bank/Admin.java b/src/main/java/edu/ithaca/dragon/bank/Admin.java index ef5fefe2..62b90d10 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Admin.java +++ b/src/main/java/edu/ithaca/dragon/bank/Admin.java @@ -5,6 +5,7 @@ public class Admin implements AdminAPI { Collection accounts; + public Admin(Collection accounts){ this.accounts=accounts; } diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index 33f84a5c..afc980e2 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -7,6 +7,7 @@ public class CentralBank { Collection accounts; Collection admins; Collection atms; + Collection tellers; Collection users; public void withdraw(BankAccount account, double amount) { diff --git a/src/main/java/edu/ithaca/dragon/bank/Teller.java b/src/main/java/edu/ithaca/dragon/bank/Teller.java index 08fdbef1..626db762 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Teller.java +++ b/src/main/java/edu/ithaca/dragon/bank/Teller.java @@ -1,14 +1,22 @@ package edu.ithaca.dragon.bank; +import java.util.Collection; + public class Teller extends ATM implements AdvancedAPI { + Collection accounts; + + public Teller(Collectionusers,Collection accounts){ + super(users); + this.accounts=accounts; + + } - @Override public void createAccount(String acctId, double startingBalance) { } - @Override + public void closeAccount(String acctId) { } diff --git a/src/main/java/edu/ithaca/dragon/bank/User.java b/src/main/java/edu/ithaca/dragon/bank/User.java index b586c2df..d04844ca 100644 --- a/src/main/java/edu/ithaca/dragon/bank/User.java +++ b/src/main/java/edu/ithaca/dragon/bank/User.java @@ -14,5 +14,10 @@ public User(String username, String password){ this.password=password; } + public BankAccount getAccount(String acctiD){ + return null; + + } + } From 79eaf661fa3703b17e3f4e30b530b08eb4fd506c Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 10 Feb 2020 13:22:25 -0500 Subject: [PATCH 24/70] more updates to class structure --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 9 +++--- .../java/edu/ithaca/dragon/bank/Admin.java | 9 ++---- .../edu/ithaca/dragon/bank/CentralBank.java | 28 +++++++------------ .../java/edu/ithaca/dragon/bank/Teller.java | 8 ++---- 4 files changed, 19 insertions(+), 35 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index 7ab6e334..86346dbb 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -2,13 +2,12 @@ import java.util.Collection; -public class ATM implements BasicAPI{ +public class ATM extends CentralBank implements BasicAPI{ - Collection users; - public ATM(Collection users){ - this.users=users; - } + public ATM(Collection accounts, Collection users) { + super(accounts, users); + } public boolean confirmCredentials(String username, String password) { return false; diff --git a/src/main/java/edu/ithaca/dragon/bank/Admin.java b/src/main/java/edu/ithaca/dragon/bank/Admin.java index 62b90d10..64a304c5 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Admin.java +++ b/src/main/java/edu/ithaca/dragon/bank/Admin.java @@ -2,15 +2,12 @@ import java.util.Collection; -public class Admin implements AdminAPI { - Collection accounts; +public class Admin extends CentralBank implements AdminAPI { - - public Admin(Collection accounts){ - this.accounts=accounts; + public Admin(Collection accounts, Collectionusers){ + super(accounts,users); } - public double calcTotalAssets() { return 0; } diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index afc980e2..70edac40 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -1,31 +1,23 @@ package edu.ithaca.dragon.bank; +import javax.swing.plaf.basic.BasicLookAndFeel; import java.util.Collection; public class CentralBank { - Collection accounts; - Collection admins; - Collection atms; - Collection tellers; - Collection users; - - public void withdraw(BankAccount account, double amount) { - - } - - public void deposit(BankAccount account, double amount) { + public Collection accounts; + public Collection users; + public CentralBank(Collectionaccounts, Collection users){ + this.accounts=accounts; + this.users=users; } - public void transfer(BankAccount fromAccount, BankAccount toAccount, double amount) { - + public Collection getAccounts() { + return accounts; } - public double getBalance(BankAccount account) { - return account.getBalance(); + public Collection getUsers() { + return users; } - - - } \ No newline at end of file diff --git a/src/main/java/edu/ithaca/dragon/bank/Teller.java b/src/main/java/edu/ithaca/dragon/bank/Teller.java index 626db762..0251a765 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Teller.java +++ b/src/main/java/edu/ithaca/dragon/bank/Teller.java @@ -3,15 +3,11 @@ import java.util.Collection; public class Teller extends ATM implements AdvancedAPI { - Collection accounts; - - public Teller(Collectionusers,Collection accounts){ - super(users); - this.accounts=accounts; + public Teller(Collection accounts, Collection users) { + super(accounts, users); } - public void createAccount(String acctId, double startingBalance) { } From 634cc48ca6c5fb25aede2e3c32f0be203fb63e2f Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Mon, 10 Feb 2020 19:08:04 -0500 Subject: [PATCH 25/70] added + started writing AdminTest --- .idea/misc.xml | 2 +- .../java/edu/ithaca/dragon/bank/AdminTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/test/java/edu/ithaca/dragon/bank/AdminTest.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 7ec11deb..ae226a7f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + \ No newline at end of file diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTest.java b/src/test/java/edu/ithaca/dragon/bank/AdminTest.java new file mode 100644 index 00000000..be80a2d6 --- /dev/null +++ b/src/test/java/edu/ithaca/dragon/bank/AdminTest.java @@ -0,0 +1,15 @@ +package edu.ithaca.dragon.bank; + +import org.junit.jupiter.api.Test; + + +import static org.junit.jupiter.api.Assertions.*; + +public class AdminTest { + + @Test + void findAcctIdsWithSuspiciousActivityTest() { + + } + +} From cc4063abeed588b82fc5f79121efc06d8a44ce69 Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Mon, 10 Feb 2020 19:41:13 -0500 Subject: [PATCH 26/70] added transactionHistory property to BankAccount and added functionality --- .idea/misc.xml | 2 +- src/main/java/edu/ithaca/dragon/bank/BankAccount.java | 6 +++++- src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java | 4 ++++ src/test/java/edu/ithaca/dragon/bank/CentralBankTest.java | 4 ++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 7ec11deb..ae226a7f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + \ No newline at end of file diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index f8a38faf..49ddb238 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -1,10 +1,13 @@ package edu.ithaca.dragon.bank; +import java.util.ArrayList; + public class BankAccount { private String acctId; private double balance; private boolean frozen = false; + private ArrayList transactionHistory = new ArrayList(); /** * @post creates a bank account object @@ -74,7 +77,7 @@ public void withdraw (double amount) throws InsufficientFundsException, IllegalA balance -= amount; } - + transactionHistory.add(-amount); } @@ -94,6 +97,7 @@ public void Deposit(double amount) throws IllegalArgumentException, Insufficient else { balance += amount; } + transactionHistory.add(amount); } diff --git a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java index 0ab22325..13ae218f 100644 --- a/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/BankAccountTest.java @@ -2,6 +2,9 @@ import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.Collection; + import static org.junit.jupiter.api.Assertions.*; class BankAccountTest { @@ -40,6 +43,7 @@ void isAmountValidTest(){ assertFalse(BankAccount.isAmountValid(83746.82736453)); } + // @Test // void withdrawTest() throws InsufficientFundsException, IllegalArgumentException{ // //greater than balance diff --git a/src/test/java/edu/ithaca/dragon/bank/CentralBankTest.java b/src/test/java/edu/ithaca/dragon/bank/CentralBankTest.java index 6e4b0fb8..6dadecdf 100644 --- a/src/test/java/edu/ithaca/dragon/bank/CentralBankTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/CentralBankTest.java @@ -7,8 +7,8 @@ class CentralBankTest { @Test void checkbalanceTest(){ - CheckingAccount acct =new CheckingAccount("christian",200); - assertEquals(200,acct.getBalance()); + //CheckingAccount acct =new CheckingAccount("christian",200); + //assertEquals(200,acct.getBalance()); } } From 761cb84a225faec2c0c0a7c6d3e4eadf1cd21e5f Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Mon, 10 Feb 2020 19:46:39 -0500 Subject: [PATCH 27/70] test --- src/main/java/edu/ithaca/dragon/bank/BankAccount.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index 49ddb238..a4ce6de8 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -8,6 +8,7 @@ public class BankAccount { private double balance; private boolean frozen = false; private ArrayList transactionHistory = new ArrayList(); + //. /** * @post creates a bank account object From 5f88cf7298611063bd55bd743ad07fda685466f8 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Mon, 10 Feb 2020 20:00:05 -0500 Subject: [PATCH 28/70] I'm midway through writing my code --- .../edu/ithaca/dragon/bank/AdvancedAPI.java | 2 +- .../java/edu/ithaca/dragon/bank/Teller.java | 2 +- .../edu/ithaca/dragon/bank/TellerTest.java | 27 +++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/test/java/edu/ithaca/dragon/bank/TellerTest.java diff --git a/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java b/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java index 26253541..9eb45fd9 100644 --- a/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java +++ b/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java @@ -3,7 +3,7 @@ //API to be used by Teller systems public interface AdvancedAPI extends BasicAPI { - public void createAccount(String acctId, double startingBalance); + public void createAccount(String acctId, double startingBalance, boolean Savings); public void closeAccount(String acctId); } diff --git a/src/main/java/edu/ithaca/dragon/bank/Teller.java b/src/main/java/edu/ithaca/dragon/bank/Teller.java index 0251a765..7def45aa 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Teller.java +++ b/src/main/java/edu/ithaca/dragon/bank/Teller.java @@ -8,7 +8,7 @@ public Teller(Collection accounts, Collection users) { super(accounts, users); } - public void createAccount(String acctId, double startingBalance) { + public void createAccount(String acctId, double startingBalance, boolean savings) { } diff --git a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java new file mode 100644 index 00000000..d55d44d4 --- /dev/null +++ b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java @@ -0,0 +1,27 @@ +package edu.ithaca.dragon.bank; +import java.io.*; +x +import org.junit.jupiter.api.Test; + +import java.util.Collection; + +import static org.junit.jupiter.api.Assertions.*; + +public class TellerTest { + + @Test + void createAccountTest() { + Collection accounts = new ArrayList(); + + Collection users = new ArrayList(); + Teller acct= new Teller(accounts, users); + acct.createAccount("Charles", 100, true); + if( accounts.size()>0) { + assertEquals(accounts. + } + + + + + } +} From 43edcd8610c2fbebc20857cdaddefab691cb697d Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Mon, 10 Feb 2020 20:24:20 -0500 Subject: [PATCH 29/70] calcTotalAssetsTest WIP --- src/test/java/edu/ithaca/dragon/bank/AdminTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTest.java b/src/test/java/edu/ithaca/dragon/bank/AdminTest.java index be80a2d6..24b16ba0 100644 --- a/src/test/java/edu/ithaca/dragon/bank/AdminTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/AdminTest.java @@ -3,12 +3,18 @@ import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.Collection; + import static org.junit.jupiter.api.Assertions.*; public class AdminTest { @Test - void findAcctIdsWithSuspiciousActivityTest() { + void calcTotalAssetsTest() { + Collection accounts = new ArrayList(); + Collection users = new ArrayList(); + } From df86a8b666d9229af647ccdefe5c8f33c2e0cccf Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Mon, 10 Feb 2020 20:32:51 -0500 Subject: [PATCH 30/70] updated CentralBank constructor --- src/main/java/edu/ithaca/dragon/bank/CentralBank.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index 70edac40..fef91f15 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -1,6 +1,7 @@ package edu.ithaca.dragon.bank; import javax.swing.plaf.basic.BasicLookAndFeel; +import java.util.ArrayList; import java.util.Collection; public class CentralBank { @@ -8,7 +9,9 @@ public class CentralBank { public Collection accounts; public Collection users; - public CentralBank(Collectionaccounts, Collection users){ + public CentralBank(){ + Collection accounts = new ArrayList(); + Collection users = new ArrayList(); this.accounts=accounts; this.users=users; } From 33612fc49316453d05ab40229cef0fbb6676db2e Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 10 Feb 2020 21:43:39 -0500 Subject: [PATCH 31/70] freeze and unfreeze tests added --- .../java/edu/ithaca/dragon/bank/Admin.java | 4 +- .../edu/ithaca/dragon/bank/BankAccount.java | 3 + .../edu/ithaca/dragon/bank/AdminTesttt.java | 60 +++++++++++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java diff --git a/src/main/java/edu/ithaca/dragon/bank/Admin.java b/src/main/java/edu/ithaca/dragon/bank/Admin.java index 64a304c5..ccdfbaea 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Admin.java +++ b/src/main/java/edu/ithaca/dragon/bank/Admin.java @@ -4,8 +4,8 @@ public class Admin extends CentralBank implements AdminAPI { - public Admin(Collection accounts, Collectionusers){ - super(accounts,users); + public Admin(){ + super(); } public double calcTotalAssets() { diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index a4ce6de8..1b37f9fb 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -31,6 +31,9 @@ public double getBalance() { return balance; } + public boolean isFrozen() { + return frozen; + } /** * @post checks if inputted dollar amount is a valid dollar amount diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java new file mode 100644 index 00000000..837b8094 --- /dev/null +++ b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java @@ -0,0 +1,60 @@ +package edu.ithaca.dragon.bank; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Collection; + +import static org.junit.jupiter.api.Assertions.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class AdminTesttt { + + @Test + void freezeAccountTest() { + BankAccount christian = new CheckingAccount(1000, "christian"); + CentralBank myBank = new CentralBank(); + myBank.accounts.add(christian); + Admin admin = new Admin(); + //no change + assertEquals(false, christian.isFrozen()); + + admin.freezeAccount("christian"); + //after freezing check + assertEquals(true, christian.isFrozen()); + + admin.freezeAccount("christian"); + //freexing a frozen account + assertEquals(true, christian.isFrozen()); + //Checking with IDs not present in collection + assertThrows(IllegalArgumentException.class, () -> admin.freezeAccount("123")); + assertThrows(IllegalArgumentException.class, () -> admin.freezeAccount("")); + assertThrows(IllegalArgumentException.class, () -> admin.freezeAccount("abcd")); + + } + + @Test + void unFreezeAccountTest() { + BankAccount christian = new CheckingAccount(1000, "christian"); + CentralBank myBank = new CentralBank(); + myBank.accounts.add(christian); + Admin admin = new Admin(); + //no change + assertEquals(false, christian.isFrozen()); + + admin.freezeAccount("christian"); + admin.unfreezeAcct("christian"); + //after unfreezing check + assertEquals(false, christian.isFrozen()); + admin.unfreezeAcct("christian"); + //unfreezing an unfrozen account + assertEquals(false, christian.isFrozen()); + //Checking with IDs not present in collection + assertThrows(IllegalArgumentException.class, () -> admin.freezeAccount("123")); + assertThrows(IllegalArgumentException.class, () -> admin.freezeAccount("")); + assertThrows(IllegalArgumentException.class, () -> admin.freezeAccount("abcd")); + + } +} From a3774a0ad598dd4e344cb54d64d83788fe8a4643 Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 10 Feb 2020 21:52:28 -0500 Subject: [PATCH 32/70] freeze and unfreeze tests added --- .idea/misc.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index ae226a7f..7ec11deb 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + \ No newline at end of file From 2d076a764b640a05f3820d8a2785a3c25e592e6a Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 10 Feb 2020 22:18:12 -0500 Subject: [PATCH 33/70] freeze and unfreeze methods added, along with data members and constructors for ATM teller and Admin --- .idea/misc.xml | 2 +- src/main/java/edu/ithaca/dragon/bank/ATM.java | 8 ++--- .../java/edu/ithaca/dragon/bank/Admin.java | 34 ++++++++++++++++--- .../edu/ithaca/dragon/bank/BankAccount.java | 10 +++++- .../java/edu/ithaca/dragon/bank/Teller.java | 7 ++-- .../edu/ithaca/dragon/bank/AdminTesttt.java | 4 +-- 6 files changed, 50 insertions(+), 15 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index ae226a7f..583f781a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + \ No newline at end of file diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index 86346dbb..6ea17078 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -2,11 +2,11 @@ import java.util.Collection; -public class ATM extends CentralBank implements BasicAPI{ +public class ATM implements BasicAPI{ + CentralBank bank; - - public ATM(Collection accounts, Collection users) { - super(accounts, users); + public ATM(CentralBank bank){ + this.bank=bank; } public boolean confirmCredentials(String username, String password) { diff --git a/src/main/java/edu/ithaca/dragon/bank/Admin.java b/src/main/java/edu/ithaca/dragon/bank/Admin.java index ccdfbaea..5ec6fd3a 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Admin.java +++ b/src/main/java/edu/ithaca/dragon/bank/Admin.java @@ -1,11 +1,12 @@ package edu.ithaca.dragon.bank; import java.util.Collection; +import java.util.Iterator; +public class Admin implements AdminAPI { + CentralBank bank; -public class Admin extends CentralBank implements AdminAPI { - - public Admin(){ - super(); + public Admin(CentralBank bank){ + this.bank=bank; } public double calcTotalAssets() { @@ -17,10 +18,35 @@ public Collection findAcctIdsWithSuspiciousActivity() { } public void freezeAccount(String acctId) { + boolean accountpresent = false; + Iterator itr = this.bank.accounts.iterator(); + while (itr.hasNext()){ + BankAccount current = itr.next(); + if (current.getAcctId()== acctId){ + accountpresent = true; + current.setFrozen(true); + } + } + if (accountpresent ==false){ + throw new IllegalArgumentException("invalid account id"); + } + } public void unfreezeAcct(String acctId) { + boolean accountpresent = false; + Iterator itr = this.bank.accounts.iterator(); + while (itr.hasNext()){ + BankAccount current = itr.next(); + if (current.getAcctId()== acctId){ + accountpresent = true; + current.setFrozen(false); + } + } + if (accountpresent == false){ + throw new IllegalArgumentException("invalid account id"); + } } } diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index 1b37f9fb..0ef91f1a 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -12,7 +12,7 @@ public class BankAccount { /** * @post creates a bank account object - * @throws IllegalArgumentException if email is invalid + * @throws IllegalArgumentException if dollar amount is invalid * */ public BankAccount(double startingBalance, String acctId) { @@ -35,6 +35,14 @@ public boolean isFrozen() { return frozen; } + public String getAcctId() { + return acctId; + } + + public void setFrozen(boolean frozen) { + this.frozen = frozen; + } + /** * @post checks if inputted dollar amount is a valid dollar amount * diff --git a/src/main/java/edu/ithaca/dragon/bank/Teller.java b/src/main/java/edu/ithaca/dragon/bank/Teller.java index 0251a765..dbf7698e 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Teller.java +++ b/src/main/java/edu/ithaca/dragon/bank/Teller.java @@ -3,11 +3,12 @@ import java.util.Collection; public class Teller extends ATM implements AdvancedAPI { + CentralBank bank; - public Teller(Collection accounts, Collection users) { - super(accounts, users); - } + public Teller(CentralBank bank){ + super(bank); + } public void createAccount(String acctId, double startingBalance) { } diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java index 837b8094..4a7093b7 100644 --- a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java +++ b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java @@ -17,7 +17,7 @@ void freezeAccountTest() { BankAccount christian = new CheckingAccount(1000, "christian"); CentralBank myBank = new CentralBank(); myBank.accounts.add(christian); - Admin admin = new Admin(); + Admin admin = new Admin(myBank); //no change assertEquals(false, christian.isFrozen()); @@ -40,7 +40,7 @@ void unFreezeAccountTest() { BankAccount christian = new CheckingAccount(1000, "christian"); CentralBank myBank = new CentralBank(); myBank.accounts.add(christian); - Admin admin = new Admin(); + Admin admin = new Admin(myBank); //no change assertEquals(false, christian.isFrozen()); From 190151d9ca22dc0f14846d93be7458387a71a37b Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 10 Feb 2020 22:40:26 -0500 Subject: [PATCH 34/70] merge test --- src/main/java/edu/ithaca/dragon/bank/Admin.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/edu/ithaca/dragon/bank/Admin.java b/src/main/java/edu/ithaca/dragon/bank/Admin.java index 5ec6fd3a..de252dc0 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Admin.java +++ b/src/main/java/edu/ithaca/dragon/bank/Admin.java @@ -17,6 +17,7 @@ public Collection findAcctIdsWithSuspiciousActivity() { return null; } + //freeze accounts public void freezeAccount(String acctId) { boolean accountpresent = false; Iterator itr = this.bank.accounts.iterator(); From 76d5ae37010a3a7b2e47e0791758686ee1efa3fe Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Tue, 11 Feb 2020 00:30:43 -0500 Subject: [PATCH 35/70] finished calcTotalAssetsTest --- .../edu/ithaca/dragon/bank/AdminTest.java | 21 ------------------- .../edu/ithaca/dragon/bank/AdminTesttt.java | 13 ++++++++++++ 2 files changed, 13 insertions(+), 21 deletions(-) delete mode 100644 src/test/java/edu/ithaca/dragon/bank/AdminTest.java diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTest.java b/src/test/java/edu/ithaca/dragon/bank/AdminTest.java deleted file mode 100644 index 24b16ba0..00000000 --- a/src/test/java/edu/ithaca/dragon/bank/AdminTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package edu.ithaca.dragon.bank; - -import org.junit.jupiter.api.Test; - - -import java.util.ArrayList; -import java.util.Collection; - -import static org.junit.jupiter.api.Assertions.*; - -public class AdminTest { - - @Test - void calcTotalAssetsTest() { - Collection accounts = new ArrayList(); - Collection users = new ArrayList(); - - - } - -} diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java index 4a7093b7..e358ddd7 100644 --- a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java +++ b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java @@ -57,4 +57,17 @@ void unFreezeAccountTest() { assertThrows(IllegalArgumentException.class, () -> admin.freezeAccount("abcd")); } + + @Test + void calcTotalAssetsTest() { + BankAccount acc1 = new CheckingAccount(1000, "acc1"); + BankAccount acc2 = new CheckingAccount(1500, "acc2"); + BankAccount acc3 = new SavingsAccount(3000, "acc3", .1, 3000); + CentralBank bank = new CentralBank(); + bank.accounts.add(acc1); + bank.accounts.add(acc2); + bank.accounts.add(acc3); + Admin admin = new Admin(bank); + assertEquals(5500, admin.calcTotalAssets()); + } } From 1d6b790ffdcf5460f5838161d274d32ed9242a93 Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Tue, 11 Feb 2020 00:36:32 -0500 Subject: [PATCH 36/70] implemented calcTotalAssets --- src/main/java/edu/ithaca/dragon/bank/Admin.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/Admin.java b/src/main/java/edu/ithaca/dragon/bank/Admin.java index de252dc0..a669a168 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Admin.java +++ b/src/main/java/edu/ithaca/dragon/bank/Admin.java @@ -10,7 +10,13 @@ public Admin(CentralBank bank){ } public double calcTotalAssets() { - return 0; + double totalAssets = 0; + Iterator itr = this.bank.accounts.iterator(); + while(itr.hasNext()) { + BankAccount curr = itr.next(); + totalAssets += curr.getBalance(); + } + return totalAssets; } public Collection findAcctIdsWithSuspiciousActivity() { From c0ea754a6955b56827a209a7aceac5e2d2faf7e0 Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Tue, 11 Feb 2020 01:06:45 -0500 Subject: [PATCH 37/70] added tests for findAccIdsWithSuspiciousActivity --- .../edu/ithaca/dragon/bank/AdminTesttt.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java index e358ddd7..f5ac6801 100644 --- a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java +++ b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java @@ -70,4 +70,30 @@ void calcTotalAssetsTest() { Admin admin = new Admin(bank); assertEquals(5500, admin.calcTotalAssets()); } + + @Test + void findAcctIdsWithSuspiciousActivityTest() throws InsufficientFundsException { + BankAccount acc1 = new CheckingAccount(1000, "acc1"); + BankAccount acc2 = new CheckingAccount(1500, "acc2"); + BankAccount acc3 = new SavingsAccount(3000, "acc3", .1, 3000); + BankAccount acc4 = new CheckingAccount(10000, "acc4"); + CentralBank bank = new CentralBank(); + bank.accounts.add(acc1); + bank.accounts.add(acc2); + bank.accounts.add(acc3); + bank.accounts.add(acc4); + Admin admin = new Admin(bank); + + //should flag as suspicious - withdrawing more than 50% of balance + acc1.withdraw(1000); + //should not flag as suspicious - withdrawing less than 50% of balance + acc2.withdraw(300); + //should flag as suspicious - depositing more than 200% of balance + acc3.Deposit(1000000); + //should not flag as suspicious - depositing less than 200% of balance + acc4.Deposit(15000); + + assertEquals("acc1 acc3 ", admin.findAcctIdsWithSuspiciousActivity()); + + } } From 562b99fd5a6fb75b82bebb9e916c0ae3b6721ef8 Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Tue, 11 Feb 2020 01:53:40 -0500 Subject: [PATCH 38/70] added Transaction class and fixed transactionHistory, implemented findAccIdsWithSuspiciousActivity --- .../java/edu/ithaca/dragon/bank/Admin.java | 19 +++++++++++- .../edu/ithaca/dragon/bank/BankAccount.java | 17 ++++++++--- .../edu/ithaca/dragon/bank/Transaction.java | 30 +++++++++++++++++++ .../edu/ithaca/dragon/bank/AdminTesttt.java | 10 ++++++- 4 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 src/main/java/edu/ithaca/dragon/bank/Transaction.java diff --git a/src/main/java/edu/ithaca/dragon/bank/Admin.java b/src/main/java/edu/ithaca/dragon/bank/Admin.java index a669a168..3aa11e5f 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Admin.java +++ b/src/main/java/edu/ithaca/dragon/bank/Admin.java @@ -1,5 +1,6 @@ package edu.ithaca.dragon.bank; +import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Admin implements AdminAPI { @@ -20,7 +21,23 @@ public double calcTotalAssets() { } public Collection findAcctIdsWithSuspiciousActivity() { - return null; + Collection ids = new ArrayList(); + double depositThreshold = 2; + double withdrawThreshold = .5; + + Iterator itr = this.bank.accounts.iterator(); + while(itr.hasNext()) { + BankAccount curr = itr.next(); + Iterator itr2 = curr.transactionHistory.iterator(); + while(itr2.hasNext()) { + Transaction curr2 = itr2.next(); + if(curr2.getFlagSuspicious()) { + ids.add(curr.getAcctId()); + break; + } + } + } + return ids; } //freeze accounts diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index 0ef91f1a..b2af00d8 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -7,7 +7,7 @@ public class BankAccount { private String acctId; private double balance; private boolean frozen = false; - private ArrayList transactionHistory = new ArrayList(); + public ArrayList transactionHistory = new ArrayList(); //. /** @@ -86,10 +86,14 @@ public void withdraw (double amount) throws InsufficientFundsException, IllegalA } else{ + boolean flag = false; + if(amount > balance/2) { + flag = true; + } + transactionHistory.add(new Transaction(this.balance, -amount, flag)); + balance -= amount; } - - transactionHistory.add(-amount); } @@ -107,9 +111,14 @@ public void Deposit(double amount) throws IllegalArgumentException, Insufficient } else { + boolean flag = false; + if(amount > (balance*2)) { + flag = true; + } + transactionHistory.add(new Transaction(this.balance, amount, flag)); + balance += amount; } - transactionHistory.add(amount); } diff --git a/src/main/java/edu/ithaca/dragon/bank/Transaction.java b/src/main/java/edu/ithaca/dragon/bank/Transaction.java new file mode 100644 index 00000000..bd7f0e83 --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/Transaction.java @@ -0,0 +1,30 @@ +package edu.ithaca.dragon.bank; + +public class Transaction { + + private double balance; + private double transactionAmount; + private boolean flagSuspicious; + + public Transaction(double balanceIn, double transactionAmountIn, boolean flagSuspiciousIn) { + this.balance = balanceIn; + this.transactionAmount = transactionAmountIn; + this.flagSuspicious = flagSuspiciousIn; + } + + public double getBalance() { + return this.balance; + } + + public double getTransactionAmount() { + return this.transactionAmount; + } + + public boolean getFlagSuspicious() { + return this.flagSuspicious; + } + + public String toString() { + return balance + " " + transactionAmount + " " + flagSuspicious; + } +} diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java index f5ac6801..359712a3 100644 --- a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java +++ b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java @@ -77,11 +77,13 @@ void findAcctIdsWithSuspiciousActivityTest() throws InsufficientFundsException { BankAccount acc2 = new CheckingAccount(1500, "acc2"); BankAccount acc3 = new SavingsAccount(3000, "acc3", .1, 3000); BankAccount acc4 = new CheckingAccount(10000, "acc4"); + BankAccount acc5 = new CheckingAccount(1000, "acc5"); CentralBank bank = new CentralBank(); bank.accounts.add(acc1); bank.accounts.add(acc2); bank.accounts.add(acc3); bank.accounts.add(acc4); + bank.accounts.add(acc5); Admin admin = new Admin(bank); //should flag as suspicious - withdrawing more than 50% of balance @@ -92,8 +94,14 @@ void findAcctIdsWithSuspiciousActivityTest() throws InsufficientFundsException { acc3.Deposit(1000000); //should not flag as suspicious - depositing less than 200% of balance acc4.Deposit(15000); + //should flag as suspicious - depositing more than 200% of balance + acc5.Deposit(3000); - assertEquals("acc1 acc3 ", admin.findAcctIdsWithSuspiciousActivity()); + Collection expectedStr = new ArrayList(); + expectedStr.add("acc1"); + expectedStr.add("acc3"); + expectedStr.add("acc5"); + assertEquals(expectedStr, admin.findAcctIdsWithSuspiciousActivity()); } } From 1f141eba4289aa8107b3a0f7b326b8965679c973 Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 11 Feb 2020 10:10:51 -0500 Subject: [PATCH 39/70] confirmcredentials test added in ATMTest --- .idea/misc.xml | 2 +- .../java/edu/ithaca/dragon/bank/ATMTest.java | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/test/java/edu/ithaca/dragon/bank/ATMTest.java diff --git a/.idea/misc.xml b/.idea/misc.xml index ae226a7f..583f781a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + \ No newline at end of file diff --git a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java new file mode 100644 index 00000000..7ec7a861 --- /dev/null +++ b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java @@ -0,0 +1,37 @@ +package edu.ithaca.dragon.bank; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Collection; + +import static org.junit.jupiter.api.Assertions.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class ATMTest { + + @Test + void confirmCredentialsTest(){ + User christian = new User("christian","martano"); + CentralBank mybank = new CentralBank(); + mybank.users.add(christian); + ATM atm = new ATM(mybank); + + //correct credentials + assertEquals(true,atm.confirmCredentials("christian","martano")); + + //incorrect credetials + assertEquals(false,atm.confirmCredentials("abc","123")); + + //correct username incorrect password + assertEquals(false,atm.confirmCredentials("christian","123")); + + //incorrect username correct password + assertEquals(false,atm.confirmCredentials("CCC","martano")); + + + + } +} From c4a22b060e668f50c72ab2fd220013de2f540a47 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Tue, 11 Feb 2020 11:16:30 -0500 Subject: [PATCH 40/70] Added tests for TellerTest --- .../java/edu/ithaca/dragon/bank/TellerTest.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java index d55d44d4..fe47898a 100644 --- a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java @@ -1,6 +1,6 @@ package edu.ithaca.dragon.bank; import java.io.*; -x +import java.util.*; import org.junit.jupiter.api.Test; import java.util.Collection; @@ -16,12 +16,19 @@ void createAccountTest() { Collection users = new ArrayList(); Teller acct= new Teller(accounts, users); acct.createAccount("Charles", 100, true); - if( accounts.size()>0) { - assertEquals(accounts. - } + assertTrue(accounts.contains("Charles")); + } + @Test + void CloseAccountTest() { + Collection accounts = new ArrayList(); + Collection users = new ArrayList(); + Teller acct= new Teller(accounts, users); + acct.createAccount("Charles", 100, true); + acct.closeAccount("Charles"); + assertFalse(accounts.contains("Charles")); } } From 7d93f159ae4ab99c6948892f6f7009666514a26b Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 11 Feb 2020 11:32:18 -0500 Subject: [PATCH 41/70] confirm credentials method added and updated user with getters --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 15 +++++++++++++++ src/main/java/edu/ithaca/dragon/bank/User.java | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index 6ea17078..9f6ac30a 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -1,6 +1,7 @@ package edu.ithaca.dragon.bank; import java.util.Collection; +import java.util.Iterator; public class ATM implements BasicAPI{ CentralBank bank; @@ -10,6 +11,20 @@ public ATM(CentralBank bank){ } public boolean confirmCredentials(String username, String password) { + Iterator itr = this.bank.users.iterator(); + while (itr.hasNext()){ + User current = itr.next(); + if (current.getUsername()== username){ + if (current.getPassword()==password){ + return true; + } + + else{ + return false; + } + } + } + return false; } diff --git a/src/main/java/edu/ithaca/dragon/bank/User.java b/src/main/java/edu/ithaca/dragon/bank/User.java index d04844ca..21486da4 100644 --- a/src/main/java/edu/ithaca/dragon/bank/User.java +++ b/src/main/java/edu/ithaca/dragon/bank/User.java @@ -19,5 +19,11 @@ public BankAccount getAccount(String acctiD){ } + public String getUsername() { + return username; + } + public String getPassword() { + return password; + } } From 595fb57eb996a4feb8c059241c449323f2ab50f2 Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 11 Feb 2020 11:41:47 -0500 Subject: [PATCH 42/70] confirm credentials method added and updated user with getters --- src/test/java/edu/ithaca/dragon/bank/ATMTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java index 7ec7a861..482ae297 100644 --- a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java @@ -19,7 +19,7 @@ void confirmCredentialsTest(){ mybank.users.add(christian); ATM atm = new ATM(mybank); - //correct credentials + //correct credentialss assertEquals(true,atm.confirmCredentials("christian","martano")); //incorrect credetials From 620a2c5690e58a23dd60658cb716737dea0489a0 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Tue, 11 Feb 2020 12:02:44 -0500 Subject: [PATCH 43/70] Made minor changes to have teller and tellerTests work with the new way other classes are currently written --- src/main/java/edu/ithaca/dragon/bank/Teller.java | 13 +++++++------ .../java/edu/ithaca/dragon/bank/TellerTest.java | 7 ++++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/Teller.java b/src/main/java/edu/ithaca/dragon/bank/Teller.java index d71d4dd0..566ee166 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Teller.java +++ b/src/main/java/edu/ithaca/dragon/bank/Teller.java @@ -5,16 +5,17 @@ public class Teller extends ATM implements AdvancedAPI { CentralBank bank; - public Teller(CentralBank bank){ + public Teller(CentralBank bank) { super(bank); - - public void createAccount(String acctId, double startingBalance, boolean savings) { - } + public void createAccount(String acctId, double startingBalance, boolean Savings){ + } - public void closeAccount(String acctId) { + public void closeAccount (String acctId){ + + } } -} + diff --git a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java index fe47898a..18650629 100644 --- a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java @@ -12,9 +12,10 @@ public class TellerTest { @Test void createAccountTest() { Collection accounts = new ArrayList(); + CentralBank myBank = new CentralBank(); Collection users = new ArrayList(); - Teller acct= new Teller(accounts, users); + Teller acct= new Teller(myBank); acct.createAccount("Charles", 100, true); assertTrue(accounts.contains("Charles")); @@ -23,9 +24,9 @@ void createAccountTest() { @Test void CloseAccountTest() { Collection accounts = new ArrayList(); - + CentralBank myBank = new CentralBank(); Collection users = new ArrayList(); - Teller acct= new Teller(accounts, users); + Teller acct= new Teller(myBank); acct.createAccount("Charles", 100, true); acct.closeAccount("Charles"); assertFalse(accounts.contains("Charles")); From 6a964197c9bdb8cf543b4a51e5ec18ebcd91bcd7 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Tue, 11 Feb 2020 12:38:44 -0500 Subject: [PATCH 44/70] I'm sorry --- .idea/compiler.xml | 5 ----- .idea/misc.xml | 2 +- pom.xml | 2 +- src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java | 8 ++++++-- src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java | 4 ++-- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index f8dc2c0e..9cc5561b 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,12 +6,7 @@ -<<<<<<< HEAD -======= - ->>>>>>> master - diff --git a/.idea/misc.xml b/.idea/misc.xml index 583f781a..f11b0ebd 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 416ce09a..8b225cb9 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ UTF-8 - 1.10 + 1.13 4.12 5.0.0 diff --git a/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java b/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java index 3ffd6220..65fa878e 100644 --- a/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java @@ -1,6 +1,10 @@ package edu.ithaca.dragon.bank; -public class giSavingsAccount extends BankAccount { +public class SavingsAccount extends BankAccount { + public SavingsAccount(double startingBalance, String acctId){ + super(startingBalance, acctId); + } +/** private double interestRate; private double maximumWithdrawal; @@ -10,5 +14,5 @@ public SavingsAccount(double startingBalance, String acctId, double interestRate this.interestRate = interestRate; this.maximumWithdrawal = maximumWithdrawal; } - + **/ } diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java index 359712a3..e801deb3 100644 --- a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java +++ b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java @@ -62,7 +62,7 @@ void unFreezeAccountTest() { void calcTotalAssetsTest() { BankAccount acc1 = new CheckingAccount(1000, "acc1"); BankAccount acc2 = new CheckingAccount(1500, "acc2"); - BankAccount acc3 = new SavingsAccount(3000, "acc3", .1, 3000); + BankAccount acc3 = new SavingsAccount(3000, "acc3"); CentralBank bank = new CentralBank(); bank.accounts.add(acc1); bank.accounts.add(acc2); @@ -75,7 +75,7 @@ void calcTotalAssetsTest() { void findAcctIdsWithSuspiciousActivityTest() throws InsufficientFundsException { BankAccount acc1 = new CheckingAccount(1000, "acc1"); BankAccount acc2 = new CheckingAccount(1500, "acc2"); - BankAccount acc3 = new SavingsAccount(3000, "acc3", .1, 3000); + BankAccount acc3 = new SavingsAccount(3000, "acc3"); BankAccount acc4 = new CheckingAccount(10000, "acc4"); BankAccount acc5 = new CheckingAccount(1000, "acc5"); CentralBank bank = new CentralBank(); From 65df2e2435805ddac93c79d26e803f095b28167c Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Tue, 11 Feb 2020 13:30:14 -0500 Subject: [PATCH 45/70] changed SavingsAccount.java --- .idea/compiler.xml | 1 + src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 9cc5561b..3efcea5a 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,6 +7,7 @@ + diff --git a/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java b/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java index 65fa878e..1af62574 100644 --- a/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/SavingsAccount.java @@ -4,7 +4,7 @@ public class SavingsAccount extends BankAccount { public SavingsAccount(double startingBalance, String acctId){ super(startingBalance, acctId); } -/** + private double interestRate; private double maximumWithdrawal; @@ -14,5 +14,4 @@ public SavingsAccount(double startingBalance, String acctId, double interestRate this.interestRate = interestRate; this.maximumWithdrawal = maximumWithdrawal; } - **/ } From 719800d12084db0c09ec5db3ea77c46b9d584ad8 Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 11 Feb 2020 14:02:38 -0500 Subject: [PATCH 46/70] getbankaccounts added to central bank --- .idea/compiler.xml | 4 ++-- .idea/misc.xml | 2 +- .../edu/ithaca/dragon/bank/CentralBank.java | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 3efcea5a..9bca3b8b 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,9 +6,9 @@ - - + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index f11b0ebd..583f781a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + \ No newline at end of file diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index fef91f15..5177be8e 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -3,6 +3,7 @@ import javax.swing.plaf.basic.BasicLookAndFeel; import java.util.ArrayList; import java.util.Collection; +import java.util.Iterator; public class CentralBank { @@ -23,4 +24,21 @@ public Collection getAccounts() { public Collection getUsers() { return users; } + + public BankAccount getBankAccount(String acctID){ + boolean accountpresent = false; + Iterator itr = this.accounts.iterator(); + while (itr.hasNext()){ + BankAccount current = itr.next(); + if (current.getAcctId()== acctID){ + return current; + } + } + if (accountpresent ==false){ + throw new IllegalArgumentException("invalid account id"); + } + + throw new IllegalArgumentException("invalid account id"); + + } } \ No newline at end of file From 142d1f09de3f676ad875e7cc212b0c1b3deda387 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Tue, 11 Feb 2020 14:11:01 -0500 Subject: [PATCH 47/70] Created a branch and wrote create method --- src/main/java/edu/ithaca/dragon/bank/Teller.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/edu/ithaca/dragon/bank/Teller.java b/src/main/java/edu/ithaca/dragon/bank/Teller.java index 566ee166..5262b85e 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Teller.java +++ b/src/main/java/edu/ithaca/dragon/bank/Teller.java @@ -10,6 +10,15 @@ public Teller(CentralBank bank) { } public void createAccount(String acctId, double startingBalance, boolean Savings){ + if(Savings){ + BankAccount acct= new SavingsAccount(startingBalance, acctId); + bank.accounts.add(acct); + + } + else if(!Savings){ + BankAccount acct= new CheckingAccount(startingBalance, acctId); + bank.accounts.add(acct); + } } From d13911b90cbfd1afb82c8d46c0c827c1e91ef846 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Wed, 12 Feb 2020 01:01:03 -0500 Subject: [PATCH 48/70] Fixed the testers such that they pass. --- .idea/misc.xml | 2 +- src/main/java/edu/ithaca/dragon/bank/Teller.java | 3 ++- src/test/java/edu/ithaca/dragon/bank/TellerTest.java | 9 ++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 583f781a..f11b0ebd 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + \ No newline at end of file diff --git a/src/main/java/edu/ithaca/dragon/bank/Teller.java b/src/main/java/edu/ithaca/dragon/bank/Teller.java index 5262b85e..f05dd08f 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Teller.java +++ b/src/main/java/edu/ithaca/dragon/bank/Teller.java @@ -3,7 +3,6 @@ import java.util.Collection; public class Teller extends ATM implements AdvancedAPI { - CentralBank bank; public Teller(CentralBank bank) { super(bank); @@ -24,6 +23,8 @@ else if(!Savings){ public void closeAccount (String acctId){ + BankAccount acct=bank.getBankAccount(acctId); + bank.accounts.remove(acct); } } diff --git a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java index 18650629..1eeef30e 100644 --- a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java @@ -11,25 +11,24 @@ public class TellerTest { @Test void createAccountTest() { - Collection accounts = new ArrayList(); CentralBank myBank = new CentralBank(); Collection users = new ArrayList(); Teller acct= new Teller(myBank); acct.createAccount("Charles", 100, true); - assertTrue(accounts.contains("Charles")); + assertTrue(myBank.accounts.contains(myBank.getBankAccount("Charles"))); } @Test void CloseAccountTest() { - Collection accounts = new ArrayList(); CentralBank myBank = new CentralBank(); + Collection users = new ArrayList(); Teller acct= new Teller(myBank); - acct.createAccount("Charles", 100, true); + acct.createAccount("Charles", 100, true); acct.closeAccount("Charles"); - assertFalse(accounts.contains("Charles")); + assertThrows(IllegalArgumentException.class, ()-> myBank.accounts.contains(myBank.getBankAccount("Charles"))); } } From df7fda10b507358a5c2294050c4e23317a928247 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Wed, 12 Feb 2020 01:02:29 -0500 Subject: [PATCH 49/70] Added two more tests --- src/test/java/edu/ithaca/dragon/bank/TellerTest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java index 1eeef30e..5181e7f5 100644 --- a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java @@ -17,6 +17,8 @@ void createAccountTest() { Teller acct= new Teller(myBank); acct.createAccount("Charles", 100, true); assertTrue(myBank.accounts.contains(myBank.getBankAccount("Charles"))); + acct.createAccount("Fredric", 100, false); + assertTrue(myBank.accounts.contains(myBank.getBankAccount("Fredric"))); } @@ -26,9 +28,12 @@ void CloseAccountTest() { Collection users = new ArrayList(); Teller acct= new Teller(myBank); - acct.createAccount("Charles", 100, true); + acct.createAccount("Charles", 100, true); acct.closeAccount("Charles"); assertThrows(IllegalArgumentException.class, ()-> myBank.accounts.contains(myBank.getBankAccount("Charles"))); + acct.createAccount("Fredric", 100, false); + acct.closeAccount("Fredric"); + assertThrows(IllegalArgumentException.class, ()-> myBank.accounts.contains(myBank.getBankAccount("Fredric"))); } } From ed170657d818643220e822f6dd0769a8d55ae8e1 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Wed, 12 Feb 2020 02:13:04 -0500 Subject: [PATCH 50/70] Added sequence diagram to read me --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 87c23b2d..b0d8857d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # SoftwareEngineeringPractice ## grading +link to Ioan's sequence diagram: +https://www.draw.io/?state=%7B%22folderId%22:%220AHtRlAMkLDZBUk9PVA%22,%22action%22:%22create%22,%22userId%22:%22102161640504284958778%22%7D#G1fHwd0fRkoscI03Zu2G8p7B5D6bBiBh87 + To Do | correct ---|--- at least 8 commits| From 8f055b4ad76087bc3325a3dcf40187c48a89fa7f Mon Sep 17 00:00:00 2001 From: cmartano <34069445+cmartano@users.noreply.github.com> Date: Wed, 12 Feb 2020 10:01:58 -0500 Subject: [PATCH 51/70] Update README.md --- README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index b0d8857d..93aaa1d1 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,7 @@ # SoftwareEngineeringPractice -## grading link to Ioan's sequence diagram: https://www.draw.io/?state=%7B%22folderId%22:%220AHtRlAMkLDZBUk9PVA%22,%22action%22:%22create%22,%22userId%22:%22102161640504284958778%22%7D#G1fHwd0fRkoscI03Zu2G8p7B5D6bBiBh87 -To Do | correct ----|--- -at least 8 commits| -isEmailValid| -withdraw| -isamountValid| -constructor & withdraw fix| +UML Diagram - https://www.draw.io/#G1BKs9DEbUAkv-ynNGjp099HZ6vRylucr6 +Use Case Diagram - https://www.draw.io/#G1OTOZ-MegXgHVpB8rYiUERVfmFXZhzAlF From 7274781f16ddc90b348bcbefd3e5b41423b149d2 Mon Sep 17 00:00:00 2001 From: cmartano <34069445+cmartano@users.noreply.github.com> Date: Wed, 12 Feb 2020 10:22:12 -0500 Subject: [PATCH 52/70] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 93aaa1d1..e28c3334 100644 --- a/README.md +++ b/README.md @@ -3,5 +3,7 @@ link to Ioan's sequence diagram: https://www.draw.io/?state=%7B%22folderId%22:%220AHtRlAMkLDZBUk9PVA%22,%22action%22:%22create%22,%22userId%22:%22102161640504284958778%22%7D#G1fHwd0fRkoscI03Zu2G8p7B5D6bBiBh87 -UML Diagram - https://www.draw.io/#G1BKs9DEbUAkv-ynNGjp099HZ6vRylucr6 -Use Case Diagram - https://www.draw.io/#G1OTOZ-MegXgHVpB8rYiUERVfmFXZhzAlF +* UML Diagram - https://drive.google.com/file/d/1BKs9DEbUAkv-ynNGjp099HZ6vRylucr6/view?usp=sharing +* Use Case Diagram - https://drive.google.com/file/d/1OTOZ-MegXgHVpB8rYiUERVfmFXZhzAlF/view?usp=sharing +* freeze account sequence diagram - https://drive.google.com/file/d/19AFoU-Of_jHAxNgIwXVeigCMnlGSpC1D/view?usp=sharing +* unfreeze account sequence diagram - https://drive.google.com/file/d/1AA96lVdDmQhyHeB5tIYJtLMJNSpWDMh1/view?usp=sharing From 1345012cb6f2a1583d5c02a58fa617f908d3c763 Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Wed, 12 Feb 2020 12:27:45 -0500 Subject: [PATCH 53/70] added suspiciousAccount sequence diagram to ReadMe, added SystemTest --- README.md | 2 + .../edu/ithaca/dragon/bank/AdminTesttt.java | 1 + .../edu/ithaca/dragon/bank/SystemTest.java | 42 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 src/test/java/edu/ithaca/dragon/bank/SystemTest.java diff --git a/README.md b/README.md index e28c3334..d7a009b3 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ link to Ioan's sequence diagram: https://www.draw.io/?state=%7B%22folderId%22:%220AHtRlAMkLDZBUk9PVA%22,%22action%22:%22create%22,%22userId%22:%22102161640504284958778%22%7D#G1fHwd0fRkoscI03Zu2G8p7B5D6bBiBh87 +link to Aidan's sequence diagram: https://drive.google.com/file/d/1L447NcwgO0GbktDt5HXLOZCDhwc7hFZX/view?usp=sharing + * UML Diagram - https://drive.google.com/file/d/1BKs9DEbUAkv-ynNGjp099HZ6vRylucr6/view?usp=sharing * Use Case Diagram - https://drive.google.com/file/d/1OTOZ-MegXgHVpB8rYiUERVfmFXZhzAlF/view?usp=sharing * freeze account sequence diagram - https://drive.google.com/file/d/19AFoU-Of_jHAxNgIwXVeigCMnlGSpC1D/view?usp=sharing diff --git a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java index e801deb3..6e835500 100644 --- a/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java +++ b/src/test/java/edu/ithaca/dragon/bank/AdminTesttt.java @@ -71,6 +71,7 @@ void calcTotalAssetsTest() { assertEquals(5500, admin.calcTotalAssets()); } + //integration test @Test void findAcctIdsWithSuspiciousActivityTest() throws InsufficientFundsException { BankAccount acc1 = new CheckingAccount(1000, "acc1"); diff --git a/src/test/java/edu/ithaca/dragon/bank/SystemTest.java b/src/test/java/edu/ithaca/dragon/bank/SystemTest.java new file mode 100644 index 00000000..f9d05497 --- /dev/null +++ b/src/test/java/edu/ithaca/dragon/bank/SystemTest.java @@ -0,0 +1,42 @@ +package edu.ithaca.dragon.bank; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Collection; + +import static org.junit.jupiter.api.Assertions.*; + +public class SystemTest { + + @Test + void SystemTest() throws InsufficientFundsException { + CentralBank bank = new CentralBank(); + + User user1 = new User("user1", "pass1"); + User user2 = new User("user2", "pass2"); + bank.users.add(user1); + bank.users.add(user2); + + CheckingAccount acc1 = new CheckingAccount(1000, "acc1"); + SavingsAccount acc2 = new SavingsAccount(1000, "acc2", .01, 200); + bank.accounts.add(acc1); + bank.accounts.add(acc2); + + acc1.Deposit(100); + acc2.Deposit(100); + acc1.withdraw(200); + acc2.withdraw(200); + + assertEquals(900, acc1.getBalance()); + assertEquals(900, acc2.getBalance()); + + Admin admin = new Admin(bank); + assertEquals(1800, admin.calcTotalAssets()); + + Collection expectedStr = new ArrayList(); + assertEquals(expectedStr, admin.findAcctIdsWithSuspiciousActivity()); + + + } +} From cc12821a182e1e4c084ccb33a1ecaeea1a42cd29 Mon Sep 17 00:00:00 2001 From: IoanDascalu <57904358+IoanDascalu@users.noreply.github.com> Date: Wed, 12 Feb 2020 12:32:21 -0500 Subject: [PATCH 54/70] Added SequenceDiagram.pdf --- SequenceDiagram.pdf | Bin 0 -> 37324 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 SequenceDiagram.pdf diff --git a/SequenceDiagram.pdf b/SequenceDiagram.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6d8a3f169db04345c5c3c67a2dee18e61b8b1ac5 GIT binary patch literal 37324 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 V78PWOvQ8X}1jH-c-6u?)_!C-DFAD$w literal 0 HcmV?d00001 From 63f3b360032c2b4375939b0d7b25906b45d52ae0 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Wed, 12 Feb 2020 12:35:00 -0500 Subject: [PATCH 55/70] Sequence diagram link --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index d7a009b3..e691e05d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # SoftwareEngineeringPractice -link to Ioan's sequence diagram: -https://www.draw.io/?state=%7B%22folderId%22:%220AHtRlAMkLDZBUk9PVA%22,%22action%22:%22create%22,%22userId%22:%22102161640504284958778%22%7D#G1fHwd0fRkoscI03Zu2G8p7B5D6bBiBh87 - +link to Ioan's sequence diagram: https://drive.google.com/file/d/1fHwd0fRkoscI03Zu2G8p7B5D6bBiBh87/view?usp=sharing link to Aidan's sequence diagram: https://drive.google.com/file/d/1L447NcwgO0GbktDt5HXLOZCDhwc7hFZX/view?usp=sharing * UML Diagram - https://drive.google.com/file/d/1BKs9DEbUAkv-ynNGjp099HZ6vRylucr6/view?usp=sharing From 0c510b1e8bac65bf47b86f25ee8ce60a474c9b57 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Wed, 12 Feb 2020 13:45:20 -0500 Subject: [PATCH 56/70] Editted the read me --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index e691e05d..93bbac95 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,9 @@ link to Aidan's sequence diagram: https://drive.google.com/file/d/1L447NcwgO0Gbk * Use Case Diagram - https://drive.google.com/file/d/1OTOZ-MegXgHVpB8rYiUERVfmFXZhzAlF/view?usp=sharing * freeze account sequence diagram - https://drive.google.com/file/d/19AFoU-Of_jHAxNgIwXVeigCMnlGSpC1D/view?usp=sharing * unfreeze account sequence diagram - https://drive.google.com/file/d/1AA96lVdDmQhyHeB5tIYJtLMJNSpWDMh1/view?usp=sharing + +Plan for Friday: +Update the class diagram to better include the user class. +Update the use case diagram to include confirm credentials and check balances. As well as clarify "request report" +Change our code to better implement the user. Change the code to work again with both the collection of bankaccount and user. + From 082df77f46ac559396e253770d2cc5b4dbd413e3 Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Thu, 13 Feb 2020 23:15:00 -0500 Subject: [PATCH 57/70] added notes from code review to readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index d7a009b3..8fe55603 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,7 @@ link to Aidan's sequence diagram: https://drive.google.com/file/d/1L447NcwgO0Gbk * Use Case Diagram - https://drive.google.com/file/d/1OTOZ-MegXgHVpB8rYiUERVfmFXZhzAlF/view?usp=sharing * freeze account sequence diagram - https://drive.google.com/file/d/19AFoU-Of_jHAxNgIwXVeigCMnlGSpC1D/view?usp=sharing * unfreeze account sequence diagram - https://drive.google.com/file/d/1AA96lVdDmQhyHeB5tIYJtLMJNSpWDMh1/view?usp=sharing + +Aidan - Code review notes: +Class diagram - savings & checkings should inherit, transaction should be a composition to BankAccount +Code - tests for multiple suspicious transactions, timestamps - multiple rapid transactions \ No newline at end of file From 49041419d447b756cb03dea85bcd449f28e924f7 Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Thu, 13 Feb 2020 23:57:23 -0500 Subject: [PATCH 58/70] added tests & implementation for new Transaction features - balance before & after and transaction time --- .../edu/ithaca/dragon/bank/BankAccount.java | 22 ++++++----- .../edu/ithaca/dragon/bank/Transaction.java | 20 +++++++--- .../edu/ithaca/dragon/bank/SystemTest.java | 37 +++++++++++++++++++ 3 files changed, 65 insertions(+), 14 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index b2af00d8..867e574f 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -1,6 +1,7 @@ package edu.ithaca.dragon.bank; import java.util.ArrayList; +import java.time.LocalDateTime; public class BankAccount { @@ -8,7 +9,6 @@ public class BankAccount { private double balance; private boolean frozen = false; public ArrayList transactionHistory = new ArrayList(); - //. /** * @post creates a bank account object @@ -39,6 +39,8 @@ public String getAcctId() { return acctId; } + public ArrayList getTransactionHistory() { return transactionHistory; } + public void setFrozen(boolean frozen) { this.frozen = frozen; } @@ -86,13 +88,14 @@ public void withdraw (double amount) throws InsufficientFundsException, IllegalA } else{ + double oldBalance = this.balance; + balance -= amount; + boolean flag = false; - if(amount > balance/2) { + if(amount > oldBalance/2) { flag = true; } - transactionHistory.add(new Transaction(this.balance, -amount, flag)); - - balance -= amount; + transactionHistory.add(new Transaction(oldBalance, -amount, balance, LocalDateTime.now(), flag)); } } @@ -111,13 +114,14 @@ public void Deposit(double amount) throws IllegalArgumentException, Insufficient } else { + double oldBalance = this.balance; + balance += amount; + boolean flag = false; - if(amount > (balance*2)) { + if(amount > (oldBalance*2)) { flag = true; } - transactionHistory.add(new Transaction(this.balance, amount, flag)); - - balance += amount; + transactionHistory.add(new Transaction(oldBalance, amount, balance, LocalDateTime.now(), flag)); } } diff --git a/src/main/java/edu/ithaca/dragon/bank/Transaction.java b/src/main/java/edu/ithaca/dragon/bank/Transaction.java index bd7f0e83..7c708ca9 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Transaction.java +++ b/src/main/java/edu/ithaca/dragon/bank/Transaction.java @@ -1,19 +1,28 @@ package edu.ithaca.dragon.bank; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + public class Transaction { - private double balance; + private double oldBalance; private double transactionAmount; + private double newBalance; private boolean flagSuspicious; + //private LocalDateTime transactionTime = LocalDateTime.now(); + private String transactionTime; - public Transaction(double balanceIn, double transactionAmountIn, boolean flagSuspiciousIn) { - this.balance = balanceIn; + public Transaction(double oldBalanceIn, double transactionAmountIn, double newBalanceIn, LocalDateTime transactionTimeIn, boolean flagSuspiciousIn) { + this.oldBalance = oldBalanceIn; this.transactionAmount = transactionAmountIn; + this.newBalance = newBalanceIn; + DateTimeFormatter format = DateTimeFormatter.ofPattern("MM-dd-yyyy HH:mm:ss"); + this.transactionTime = transactionTimeIn.format(format); this.flagSuspicious = flagSuspiciousIn; } public double getBalance() { - return this.balance; + return this.oldBalance; } public double getTransactionAmount() { @@ -25,6 +34,7 @@ public boolean getFlagSuspicious() { } public String toString() { - return balance + " " + transactionAmount + " " + flagSuspicious; + return "Balance before: " + oldBalance + " Transaction amount: " + transactionAmount + + " Balance after: " + newBalance + " Time: " + transactionTime + " Suspicious: " + flagSuspicious + "\n"; } } diff --git a/src/test/java/edu/ithaca/dragon/bank/SystemTest.java b/src/test/java/edu/ithaca/dragon/bank/SystemTest.java index f9d05497..2bc78a20 100644 --- a/src/test/java/edu/ithaca/dragon/bank/SystemTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/SystemTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collection; @@ -36,7 +37,43 @@ void SystemTest() throws InsufficientFundsException { Collection expectedStr = new ArrayList(); assertEquals(expectedStr, admin.findAcctIdsWithSuspiciousActivity()); + } + + @Test + void getTransactionHistoryTest() throws InsufficientFundsException { + CentralBank bank = new CentralBank(); + + User user1 = new User("user1", "pass1"); + User user2 = new User("user2", "pass2"); + bank.users.add(user1); + bank.users.add(user2); + + CheckingAccount acc1 = new CheckingAccount(1000, "acc1"); + SavingsAccount acc2 = new SavingsAccount(1000, "acc2", .01, 200); + bank.accounts.add(acc1); + bank.accounts.add(acc2); + + acc1.Deposit(100); + LocalDateTime time1 = LocalDateTime.now(); + acc2.Deposit(100); + LocalDateTime time2 = LocalDateTime.now(); + acc1.withdraw(200); + LocalDateTime time3 = LocalDateTime.now(); + acc2.withdraw(200); + LocalDateTime time4 = LocalDateTime.now(); + Transaction acc1trn1 = new Transaction(1000, 100, 1100, time1, false); + Transaction acc1trn2 = new Transaction(1100, -200, 900, time2, false); + ArrayList acc1Trns = new ArrayList(); + acc1Trns.add(acc1trn1); + acc1Trns.add(acc1trn2); + assertEquals(acc1Trns.toString(), acc1.getTransactionHistory().toString()); + Transaction acc2trn1 = new Transaction(1000, 100, 1100, time3, false); + Transaction acc2trn2 = new Transaction(1100, -200, 900, time4, false); + ArrayList acc2Trns = new ArrayList(); + acc2Trns.add(acc2trn1); + acc2Trns.add(acc2trn2); + assertEquals(acc2Trns.toString(), acc2.getTransactionHistory().toString()); } } From 37a9c769b923a7f9070366ca290e39c716f722ed Mon Sep 17 00:00:00 2001 From: cmartano Date: Fri, 14 Feb 2020 13:01:26 -0500 Subject: [PATCH 59/70] user class implemented, teller methods and tests updated --- .../edu/ithaca/dragon/bank/AdvancedAPI.java | 4 ++-- .../edu/ithaca/dragon/bank/CentralBank.java | 2 +- .../java/edu/ithaca/dragon/bank/Teller.java | 7 ++++-- .../java/edu/ithaca/dragon/bank/User.java | 22 ++++++++++++++--- .../java/edu/ithaca/dragon/bank/ATMTest.java | 2 ++ .../edu/ithaca/dragon/bank/TellerTest.java | 24 +++++++++---------- 6 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java b/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java index 9eb45fd9..31324086 100644 --- a/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java +++ b/src/main/java/edu/ithaca/dragon/bank/AdvancedAPI.java @@ -3,7 +3,7 @@ //API to be used by Teller systems public interface AdvancedAPI extends BasicAPI { - public void createAccount(String acctId, double startingBalance, boolean Savings); + public void createAccount(User user, String acctId, double startingBalance, boolean Savings); - public void closeAccount(String acctId); + public void closeAccount(User user, String acctId); } diff --git a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java index 5177be8e..75f428b0 100644 --- a/src/main/java/edu/ithaca/dragon/bank/CentralBank.java +++ b/src/main/java/edu/ithaca/dragon/bank/CentralBank.java @@ -34,7 +34,7 @@ public BankAccount getBankAccount(String acctID){ return current; } } - if (accountpresent ==false){ + if (accountpresent == false){ throw new IllegalArgumentException("invalid account id"); } diff --git a/src/main/java/edu/ithaca/dragon/bank/Teller.java b/src/main/java/edu/ithaca/dragon/bank/Teller.java index f05dd08f..06849e4a 100644 --- a/src/main/java/edu/ithaca/dragon/bank/Teller.java +++ b/src/main/java/edu/ithaca/dragon/bank/Teller.java @@ -8,23 +8,26 @@ public Teller(CentralBank bank) { super(bank); } - public void createAccount(String acctId, double startingBalance, boolean Savings){ + public void createAccount(User user, String acctId, double startingBalance, boolean Savings){ if(Savings){ BankAccount acct= new SavingsAccount(startingBalance, acctId); bank.accounts.add(acct); + user.accounts.add(acct); } else if(!Savings){ BankAccount acct= new CheckingAccount(startingBalance, acctId); bank.accounts.add(acct); + user.accounts.add(acct); } } - public void closeAccount (String acctId){ + public void closeAccount (User user, String acctId){ BankAccount acct=bank.getBankAccount(acctId); bank.accounts.remove(acct); + user.accounts.remove(acct); } } diff --git a/src/main/java/edu/ithaca/dragon/bank/User.java b/src/main/java/edu/ithaca/dragon/bank/User.java index 21486da4..7168fdd5 100644 --- a/src/main/java/edu/ithaca/dragon/bank/User.java +++ b/src/main/java/edu/ithaca/dragon/bank/User.java @@ -1,21 +1,37 @@ package edu.ithaca.dragon.bank; +import java.util.ArrayList; import java.util.Collection; +import java.util.Iterator; public class User { - private Collection AccountList; + Collection accounts; private String username; private String password; public User(String username, String password){ this.username=username; this.password=password; + Collection accounts = new ArrayList(); + this.accounts=accounts; } - public BankAccount getAccount(String acctiD){ - return null; + public BankAccount getBankAccount(String acctID){ + boolean accountpresent = false; + Iterator itr = this.accounts.iterator(); + while (itr.hasNext()){ + BankAccount current = itr.next(); + if (current.getAcctId()== acctID){ + return current; + } + } + if (accountpresent == false){ + throw new IllegalArgumentException("invalid account id"); + } + + throw new IllegalArgumentException("invalid account id"); } diff --git a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java index 482ae297..f4a8a30f 100644 --- a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java @@ -34,4 +34,6 @@ void confirmCredentialsTest(){ } + + } diff --git a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java index 5181e7f5..17dbae28 100644 --- a/src/test/java/edu/ithaca/dragon/bank/TellerTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/TellerTest.java @@ -12,28 +12,28 @@ public class TellerTest { @Test void createAccountTest() { CentralBank myBank = new CentralBank(); - Collection users = new ArrayList(); + User charles = new User("Charles","123"); Teller acct= new Teller(myBank); - acct.createAccount("Charles", 100, true); - assertTrue(myBank.accounts.contains(myBank.getBankAccount("Charles"))); - acct.createAccount("Fredric", 100, false); - assertTrue(myBank.accounts.contains(myBank.getBankAccount("Fredric"))); + acct.createAccount(charles,"CharlesSaves", 100, true); + assertTrue(myBank.accounts.contains(myBank.getBankAccount("CharlesSaves"))); + acct.createAccount(charles,"CharlesChecking", 100, false); + assertTrue(myBank.accounts.contains(myBank.getBankAccount("CharlesChecking"))); } @Test void CloseAccountTest() { CentralBank myBank = new CentralBank(); - + User charles = new User("Charles","123"); Collection users = new ArrayList(); Teller acct= new Teller(myBank); - acct.createAccount("Charles", 100, true); - acct.closeAccount("Charles"); - assertThrows(IllegalArgumentException.class, ()-> myBank.accounts.contains(myBank.getBankAccount("Charles"))); - acct.createAccount("Fredric", 100, false); - acct.closeAccount("Fredric"); - assertThrows(IllegalArgumentException.class, ()-> myBank.accounts.contains(myBank.getBankAccount("Fredric"))); + acct.createAccount(charles,"CharlesSaves", 100, true); + acct.closeAccount(charles,"CharlesSaves"); + assertThrows(IllegalArgumentException.class, ()-> myBank.accounts.contains(myBank.getBankAccount("CharlesSaves"))); + acct.createAccount(charles,"CharlesChecking", 100, false); + acct.closeAccount(charles,"CharlesChecking"); + assertThrows(IllegalArgumentException.class, ()-> myBank.accounts.contains(myBank.getBankAccount("CharlesChecking"))); } } From 5d606d428ab64eada1c82b7ee048ea8e7c725646 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Sun, 16 Feb 2020 17:16:14 -0500 Subject: [PATCH 60/70] Added link to state diagram --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 07b98e95..4654c61e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # SoftwareEngineeringPractice +Link to state diagram: https://drive.google.com/file/d/1BPTHJmOLGr9hiQ0BJnvLTYXEDLRx6saK/view?usp=sharing + link to Ioan's sequence diagram: https://drive.google.com/file/d/1fHwd0fRkoscI03Zu2G8p7B5D6bBiBh87/view?usp=sharing link to Aidan's sequence diagram: https://drive.google.com/file/d/1L447NcwgO0GbktDt5HXLOZCDhwc7hFZX/view?usp=sharing From c3d25a1beacf4ad2ad31bf60eae6895589390b47 Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 17 Feb 2020 01:08:17 -0500 Subject: [PATCH 61/70] deposit and withdraw tests and functons implemented --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 59 +++++++++++++++--- .../edu/ithaca/dragon/bank/BankAccount.java | 2 + .../java/edu/ithaca/dragon/bank/ATMTest.java | 61 +++++++++++++++++++ 3 files changed, 112 insertions(+), 10 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index 9f6ac30a..e66a4d52 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -12,16 +12,12 @@ public ATM(CentralBank bank){ public boolean confirmCredentials(String username, String password) { Iterator itr = this.bank.users.iterator(); - while (itr.hasNext()){ + while (itr.hasNext()) { User current = itr.next(); - if (current.getUsername()== username){ - if (current.getPassword()==password){ + if (current.getUsername() == username) { + if (current.getPassword() == password) { return true; } - - else{ - return false; - } } } @@ -29,16 +25,59 @@ public boolean confirmCredentials(String username, String password) { } public double checkBalance(String acctId) { - return 0; + Iterator itr = this.bank.accounts.iterator(); + while (itr.hasNext()) { + BankAccount current = itr.next(); + if (current.getAcctId() == acctId) { + return current.getBalance(); + } + } + throw new IllegalArgumentException("invalid account id"); } - public void withdraw(String acctId, double amount) throws InsufficientFundsException { + public void withdraw(String acctId, double amount) throws InsufficientFundsException,IllegalArgumentException { + Iterator itr = this.bank.accounts.iterator(); + while (itr.hasNext()) { + BankAccount current = itr.next(); + if (current.getAcctId() == acctId) { + if (current.getBalance() itr = this.bank.accounts.iterator(); + while (itr.hasNext()) { + BankAccount current = itr.next(); + if (current.getAcctId() == acctId) { + if (current.isAmountValid(amount)){ + double balance=current.getBalance(); + balance+=amount; + current.setBalance(balance); + } + if (!current.isAmountValid(amount)){ + throw new IllegalArgumentException("Invalid Amount"); + } + } + else{ + throw new IllegalArgumentException("invalid account id"); + } + } } public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException { diff --git a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java index 867e574f..4453423e 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BankAccount.java +++ b/src/main/java/edu/ithaca/dragon/bank/BankAccount.java @@ -45,6 +45,8 @@ public void setFrozen(boolean frozen) { this.frozen = frozen; } + public void setBalance(double balance){ this.balance=balance; } + /** * @post checks if inputted dollar amount is a valid dollar amount * diff --git a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java index f4a8a30f..21f03e2b 100644 --- a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java @@ -35,5 +35,66 @@ void confirmCredentialsTest(){ } + @Test + void checkbalanceTest(){ + BankAccount christian = new CheckingAccount(1000, "christian"); + CentralBank myBank = new CentralBank(); + myBank.accounts.add(christian); + ATM atm = new ATM(myBank); + //basic check balance + assertEquals(1000,atm.checkBalance("christian")); + //invalid account id + assertThrows(IllegalArgumentException.class, () -> atm.checkBalance("Chistian")); + } + + @Test + void withdrawTest() throws InsufficientFundsException, IllegalArgumentException { + BankAccount christian = new CheckingAccount(1000, "christian"); + CentralBank myBank = new CentralBank(); + myBank.accounts.add(christian); + ATM atm = new ATM(myBank); + //greater than balance + assertThrows(InsufficientFundsException.class, ()->atm.withdraw("christian",1001)); + + //less than balance + atm.withdraw("christian",50); + assertEquals(950, christian.getBalance()); + + + //equal to balance + atm.withdraw("christian",950); + assertEquals(0, christian.getBalance()); + + + //negative - argument thrown + assertThrows(IllegalArgumentException.class,() -> atm.withdraw("christian",-1)); + + + //invalid input + atm.deposit("christian",1000); + assertThrows(IllegalArgumentException.class,() -> atm.withdraw("christian",100.0005)); + } + + @Test + void depositTest() throws InsufficientFundsException, IllegalArgumentException { + BankAccount christian = new CheckingAccount(1000, "christian"); + CentralBank myBank = new CentralBank(); + myBank.accounts.add(christian); + ATM atm = new ATM(myBank); + + //regular deposit + atm.deposit("christian",50); + assertEquals(1050, christian.getBalance()); + + + //negative - argument thrown + assertThrows(IllegalArgumentException.class,() -> atm.deposit("christian",-1)); + + + //invalid input + atm.deposit("christian",1000); + assertThrows(IllegalArgumentException.class,() -> atm.deposit("christian",100.0005)); + } + } From 3187f35479f036146efb27df3f23b8771aa94e87 Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 17 Feb 2020 11:13:32 -0500 Subject: [PATCH 62/70] transfer tests and method implemented along with really quick implementation of get transaction history --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 89 ++++++++++++++----- .../java/edu/ithaca/dragon/bank/BasicAPI.java | 4 +- .../java/edu/ithaca/dragon/bank/ATMTest.java | 39 ++++++++ 3 files changed, 109 insertions(+), 23 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index e66a4d52..9dfbcc27 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -1,13 +1,14 @@ package edu.ithaca.dragon.bank; +import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; -public class ATM implements BasicAPI{ +public class ATM implements BasicAPI { CentralBank bank; - public ATM(CentralBank bank){ - this.bank=bank; + public ATM(CentralBank bank) { + this.bank = bank; } public boolean confirmCredentials(String username, String password) { @@ -36,27 +37,26 @@ public double checkBalance(String acctId) { } - public void withdraw(String acctId, double amount) throws InsufficientFundsException,IllegalArgumentException { + public void withdraw(String acctId, double amount) throws InsufficientFundsException, IllegalArgumentException { Iterator itr = this.bank.accounts.iterator(); while (itr.hasNext()) { BankAccount current = itr.next(); if (current.getAcctId() == acctId) { - if (current.getBalance() itr = this.bank.accounts.iterator(); + while (itr.hasNext()) { + BankAccount current = itr.next(); + if (current.getAcctId() == acctIdToWithdrawFrom) { + if (!current.isAmountValid(amount)) { + throw new IllegalArgumentException("Invalid Amount"); + } + if (current.getBalance() < amount) { + throw new InsufficientFundsException("Not enough funds"); + } + if (current.isAmountValid(amount)) { + double balance = current.getBalance(); + balance -= amount; + current.setBalance(balance); + count += 1; + } + } - } + if (current.getAcctId() == acctIdToDepositTo) { + if (!current.isAmountValid(amount)) { + throw new IllegalArgumentException("Invalid Amount"); + } + + if (current.isAmountValid(amount)) { + double balance = current.getBalance(); + balance += amount; + current.setBalance(balance); + count += 1; + } + } + } + if (count == 2) { + return; + } else { + throw new IllegalArgumentException("invalid account id"); + } - public String transactionHistory(String acctId) { - return null; } + public ArrayList transactionHistory(String acctId) { + Iterator itr = this.bank.accounts.iterator(); + while (itr.hasNext()) { + BankAccount current = itr.next(); + if (current.getAcctId() == acctId) { + return current.getTransactionHistory(); + } + } + throw new IllegalArgumentException("Invalid account id"); + } } + diff --git a/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java b/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java index bd65b941..1d0a62da 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java +++ b/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java @@ -1,5 +1,7 @@ package edu.ithaca.dragon.bank; +import java.util.ArrayList; + //API to be used by ATMs public interface BasicAPI { @@ -13,6 +15,6 @@ public interface BasicAPI { void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, double amount) throws InsufficientFundsException; - String transactionHistory(String acctId); + ArrayList transactionHistory(String acctId); } diff --git a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java index 21f03e2b..7d72f6c4 100644 --- a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java @@ -96,5 +96,44 @@ void depositTest() throws InsufficientFundsException, IllegalArgumentException { assertThrows(IllegalArgumentException.class,() -> atm.deposit("christian",100.0005)); } + @Test + void transferTest() throws IllegalArgumentException, InsufficientFundsException{ + BankAccount sender = new CheckingAccount(500, "christian"); + BankAccount reciever = new SavingsAccount(0, "martano"); + CentralBank myBank = new CentralBank(); + myBank.accounts.add(sender); + myBank.accounts.add(reciever); + ATM atm = new ATM(myBank); + //successfull transfer + atm.transfer("christian","martano",100); + assertEquals(400, sender.getBalance()); + assertEquals(100, reciever.getBalance()); + + //transfer with change + atm.transfer("christian","martano", 1.50); + assertEquals(398.50, sender.getBalance()); + assertEquals(101.50, reciever.getBalance()); + + //0 dollars transfered + atm.transfer("christian","martano", 0); + assertEquals(398.50, sender.getBalance()); + assertEquals(101.50, reciever.getBalance()); + + //negative amount trying to be transfered + assertThrows(IllegalArgumentException.class, ()->atm.transfer("christian","martano", -1)); + + //invalid input check + assertThrows(IllegalArgumentException.class, ()-> atm.transfer("christian","martano", 100.0005)); + + //trying to transfer insufficent funds + assertThrows(InsufficientFundsException.class, ()->atm.transfer("christian","martano", 500)); + + //checks to be sure illegal argument is thrown rather than insufficient funds when both are valid + assertThrows(IllegalArgumentException.class, ()->atm.transfer("christian","martano", 500.0005)); + + //invalid email + assertThrows(IllegalArgumentException.class, ()->atm.transfer("christiann","martano", 500)); + } + } From fc067a87f46507747abf082e909d313cf34c823f Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 17 Feb 2020 13:18:42 -0500 Subject: [PATCH 63/70] re-ordered expcetions in the withdraw function to prioritize illegal argument over insufficient funds --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index 9dfbcc27..2a2e9f60 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -42,6 +42,10 @@ public void withdraw(String acctId, double amount) throws InsufficientFundsExcep while (itr.hasNext()) { BankAccount current = itr.next(); if (current.getAcctId() == acctId) { + if (!current.isAmountValid(amount)) { + throw new IllegalArgumentException("Invalid Amount"); + } + if (current.getBalance() < amount) { throw new InsufficientFundsException("Not enough funds"); } @@ -51,9 +55,6 @@ public void withdraw(String acctId, double amount) throws InsufficientFundsExcep current.setBalance(balance); return; } - if (!current.isAmountValid(amount)) { - throw new IllegalArgumentException("Invalid Amount"); - } } } throw new IllegalArgumentException("invalid account id"); From aa69d79fdc95c0ec9461636e5f49a852a6b86ac1 Mon Sep 17 00:00:00 2001 From: cmartano Date: Mon, 17 Feb 2020 23:23:06 -0500 Subject: [PATCH 64/70] ATM UI layout --- .../java/edu/ithaca/dragon/bank/ATMUI.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/main/java/edu/ithaca/dragon/bank/ATMUI.java diff --git a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java new file mode 100644 index 00000000..5d40d2e4 --- /dev/null +++ b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java @@ -0,0 +1,70 @@ +package edu.ithaca.dragon.bank; + +import java.util.Scanner; + +enum ATMUIState {Login, Logout, Frozen, Menu, Withdraw, Deposit, Transfer} + +public class ATMUI { + + private static CentralBank bank; + private static BasicAPI atm; + private static ATMUIState currentState; + private static BankAccount currentAccount; + private static Scanner in; + + public static void main(String[] args) throws IllegalArgumentException,InsufficientFundsException { + atm = new ATM(bank); + currentState = ATMUIState.Login; + in = new Scanner(System.in); + + while (true) { + if(currentState == ATMUIState.Login) { + Login(); + } else if(currentState == ATMUIState.Menu) { + Menu(); + } else if(currentState == ATMUIState.Frozen) { + Frozen(); + } else if(currentState == ATMUIState.Logout) { + Logout(); + } else if(currentState == ATMUIState.Deposit) { + Deposit(); + } else if(currentState == ATMUIState.Withdraw) { + Withdraw(); + } else if(currentState == ATMUIState.Transfer) { + Transfer(); + } + } + } + + + + static void Login() { + + } + + static void Menu() { + + } + + static void Frozen() { + + } + + + static void Logout() { + + } + + static void Withdraw() throws InsufficientFundsException{ + + } + + static void Deposit() { + + + } + + static void Transfer() { + + } +} From 1f10699c09b08d37cac9f68c5384d9b9aa7e798f Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Tue, 18 Feb 2020 00:02:51 -0500 Subject: [PATCH 65/70] AtmUI implementation - WIP --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 13 +++++++ .../java/edu/ithaca/dragon/bank/ATMUI.java | 34 ++++++++++++++++++- .../java/edu/ithaca/dragon/bank/BasicAPI.java | 2 ++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index 2a2e9f60..cc2866a3 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -25,6 +25,19 @@ public boolean confirmCredentials(String username, String password) { return false; } + public User getUser(String username, String password) { + Iterator itr = this.bank.users.iterator(); + while (itr.hasNext()) { + User current = itr.next(); + if (current.getUsername() == username) { + if (current.getPassword() == password) { + return current; + } + } + } + return null; + } + public double checkBalance(String acctId) { Iterator itr = this.bank.accounts.iterator(); while (itr.hasNext()) { diff --git a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java index 5d40d2e4..5678805e 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java @@ -2,7 +2,7 @@ import java.util.Scanner; -enum ATMUIState {Login, Logout, Frozen, Menu, Withdraw, Deposit, Transfer} +enum ATMUIState {Login, Logout, Frozen, Account, Menu, Withdraw, Deposit, Transfer} public class ATMUI { @@ -10,6 +10,7 @@ public class ATMUI { private static BasicAPI atm; private static ATMUIState currentState; private static BankAccount currentAccount; + private static User currentUser; private static Scanner in; public static void main(String[] args) throws IllegalArgumentException,InsufficientFundsException { @@ -32,6 +33,8 @@ public static void main(String[] args) throws IllegalArgumentException,Insuffici Withdraw(); } else if(currentState == ATMUIState.Transfer) { Transfer(); + } else if(currentState == ATMUIState.Account) { + Account(); } } } @@ -39,7 +42,36 @@ public static void main(String[] args) throws IllegalArgumentException,Insuffici static void Login() { + System.out.println("Please enter your username and password: "); + System.out.print("Username: "); + String username = in.nextLine(); + System.out.print("\nPassword: "); + String password = in.nextLine(); + + if(atm.confirmCredentials(username, password)) { + currentUser = atm.getUser(username, password); + currentState = ATMUIState.Account; + } + else { + System.out.println("Error: invalid credentials, please try again."); + currentState = ATMUIState.Login; + } + } + static void Account() { + System.out.println("Enter account ID: "); + String accID = in.nextLine(); + try { + currentAccount = currentUser.getBankAccount(accID); + if(currentAccount.isFrozen()) { + currentState = ATMUIState.Frozen; + } + else { + currentState = ATMUIState.Menu; + } + } catch (Exception e){ + System.out.println("Error: invalid account ID, please try again."); + } } static void Menu() { diff --git a/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java b/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java index 1d0a62da..99822ef4 100644 --- a/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java +++ b/src/main/java/edu/ithaca/dragon/bank/BasicAPI.java @@ -7,6 +7,8 @@ public interface BasicAPI { boolean confirmCredentials(String acctId, String password); + User getUser(String username, String password); + double checkBalance(String acctId); void withdraw(String acctId, double amount) throws InsufficientFundsException; From c14fdf23484c763b4670f30c653334960de35113 Mon Sep 17 00:00:00 2001 From: Aidan Saltini Date: Tue, 18 Feb 2020 00:43:51 -0500 Subject: [PATCH 66/70] finished AtmUI --- .../java/edu/ithaca/dragon/bank/ATMUI.java | 59 ++++++++++++++----- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java index 5678805e..208cb930 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java @@ -2,7 +2,7 @@ import java.util.Scanner; -enum ATMUIState {Login, Logout, Frozen, Account, Menu, Withdraw, Deposit, Transfer} +enum ATMUIState {Login, Frozen, Account, Menu, Withdraw, Deposit, Transfer} public class ATMUI { @@ -25,8 +25,6 @@ public static void main(String[] args) throws IllegalArgumentException,Insuffici Menu(); } else if(currentState == ATMUIState.Frozen) { Frozen(); - } else if(currentState == ATMUIState.Logout) { - Logout(); } else if(currentState == ATMUIState.Deposit) { Deposit(); } else if(currentState == ATMUIState.Withdraw) { @@ -75,28 +73,59 @@ static void Account() { } static void Menu() { - + System.out.println("Current balance: " + currentAccount.getBalance() + ". Would you like to withdraw, deposit, transfer, or logout?"); + String action = in.nextLine(); + if(action.equalsIgnoreCase("withdraw")) { + currentState = ATMUIState.Withdraw; + } else if (action.equalsIgnoreCase("deposit")) { + currentState = ATMUIState.Deposit; + } else if (action.equalsIgnoreCase("transfer")) { + currentState = ATMUIState.Transfer; + } else if (action.equalsIgnoreCase("logout")) { + System.out.println("Thank you for banking with us today."); + currentState = ATMUIState.Login; + } else { + System.out.println("Error: invalid command, please try again."); + currentState = ATMUIState.Menu; + } } static void Frozen() { - - } - - - static void Logout() { - + System.out.println("This account is currently frozen due to suspicious activity. " + + "For more information, please contact customer service at 1-888-555-1212."); + currentState = ATMUIState.Login; } static void Withdraw() throws InsufficientFundsException{ - + System.out.println("Enter amount to withdraw: "); + double amount = in.nextDouble(); + currentAccount.withdraw(amount); + System.out.println("Withdraw successful. New balance: " + currentAccount.getBalance()); + currentState = ATMUIState.Menu; } - static void Deposit() { - - + static void Deposit() throws InsufficientFundsException { + System.out.println("Enter amount to deposit: "); + double amount = in.nextDouble(); + currentAccount.Deposit(amount); + System.out.println("Deposit successful. New balance: " + currentAccount.getBalance()); + currentState = ATMUIState.Menu; } static void Transfer() { - + System.out.println("Enter accountID to transfer to: "); + String accIDTo = in.nextLine(); + try { + BankAccount accTo = bank.getBankAccount(accIDTo); + System.out.println("Enter amount to transfer: "); + double amount = in.nextDouble(); + currentAccount.Transfer(accTo, amount); + System.out.println("Transfer successful. New balance: " + currentAccount.getBalance()); + currentState = ATMUIState.Login; + } + catch (Exception e){ + System.out.println("Error: invalid account ID, please try again."); + currentState = ATMUIState.Transfer; + } } } From 0f74e4752f266cde880f0294edc111efecd08161 Mon Sep 17 00:00:00 2001 From: cmartano Date: Tue, 18 Feb 2020 10:48:02 -0500 Subject: [PATCH 67/70] ui class complete w accounts and users, confirm credentials issue --- .../java/edu/ithaca/dragon/bank/ATMUI.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java index 208cb930..ba591bb3 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java @@ -14,6 +14,20 @@ public class ATMUI { private static Scanner in; public static void main(String[] args) throws IllegalArgumentException,InsufficientFundsException { + User christian = new User("christian","123"); + User aidan = new User("aidan","123"); + User ioan = new User("ioan","123"); + BankAccount christianacct = new CheckingAccount(1000, "christian"); + BankAccount aidanacct = new CheckingAccount(1000, "aidan"); + BankAccount ioanacct = new CheckingAccount(1000, "ioan"); + CentralBank myBank = new CentralBank(); + myBank.accounts.add(christianacct); + myBank.accounts.add(aidanacct); + myBank.accounts.add(ioanacct); + myBank.users.add(christian); + myBank.users.add(aidan); + myBank.users.add(ioan); + bank = myBank; atm = new ATM(bank); currentState = ATMUIState.Login; in = new Scanner(System.in); @@ -41,9 +55,9 @@ public static void main(String[] args) throws IllegalArgumentException,Insuffici static void Login() { System.out.println("Please enter your username and password: "); - System.out.print("Username: "); + System.out.print("Username:"); String username = in.nextLine(); - System.out.print("\nPassword: "); + System.out.print("\nPassword:"); String password = in.nextLine(); if(atm.confirmCredentials(username, password)) { @@ -99,7 +113,7 @@ static void Frozen() { static void Withdraw() throws InsufficientFundsException{ System.out.println("Enter amount to withdraw: "); double amount = in.nextDouble(); - currentAccount.withdraw(amount); + atm.withdraw(currentAccount.getAcctId(),amount); System.out.println("Withdraw successful. New balance: " + currentAccount.getBalance()); currentState = ATMUIState.Menu; } @@ -107,7 +121,7 @@ static void Withdraw() throws InsufficientFundsException{ static void Deposit() throws InsufficientFundsException { System.out.println("Enter amount to deposit: "); double amount = in.nextDouble(); - currentAccount.Deposit(amount); + atm.deposit(currentAccount.getAcctId(),amount); System.out.println("Deposit successful. New balance: " + currentAccount.getBalance()); currentState = ATMUIState.Menu; } @@ -119,9 +133,9 @@ static void Transfer() { BankAccount accTo = bank.getBankAccount(accIDTo); System.out.println("Enter amount to transfer: "); double amount = in.nextDouble(); - currentAccount.Transfer(accTo, amount); + atm.transfer(currentAccount.getAcctId(),accIDTo,amount); System.out.println("Transfer successful. New balance: " + currentAccount.getBalance()); - currentState = ATMUIState.Login; + currentState = ATMUIState.Menu; } catch (Exception e){ System.out.println("Error: invalid account ID, please try again."); From cef8dbaa917ea5c6c779427c5c43e666b3f4a955 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Tue, 18 Feb 2020 12:49:18 -0500 Subject: [PATCH 68/70] Fixed error in the code, and started a test script --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 8 ++++++-- src/main/java/edu/ithaca/dragon/bank/ATMUI.java | 7 +++++++ src/test/java/edu/ithaca/dragon/bank/ATMTest.java | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index cc2866a3..33d7edab 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -12,11 +12,15 @@ public ATM(CentralBank bank) { } public boolean confirmCredentials(String username, String password) { + Iterator itr = this.bank.users.iterator(); while (itr.hasNext()) { User current = itr.next(); - if (current.getUsername() == username) { - if (current.getPassword() == password) { + System.out.println(current.getUsername()); + System.out.println(username); + if (current.getUsername().equals(username)) { + System.out.println("hi"); + if (current.getPassword().equals(password)) { return true; } } diff --git a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java index ba591bb3..1c61df49 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java @@ -4,6 +4,13 @@ enum ATMUIState {Login, Frozen, Account, Menu, Withdraw, Deposit, Transfer} + /* + TEST SCRIPT FOR THE UI: + When asked for the username, input 'ioan' + When asked for the password, input '123' + + */ + public class ATMUI { private static CentralBank bank; diff --git a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java index 7d72f6c4..062499b6 100644 --- a/src/test/java/edu/ithaca/dragon/bank/ATMTest.java +++ b/src/test/java/edu/ithaca/dragon/bank/ATMTest.java @@ -136,4 +136,5 @@ void transferTest() throws IllegalArgumentException, InsufficientFundsException{ } + } From 69805f3ef66d56042968b9f72eaec96905fe8ce1 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Tue, 18 Feb 2020 13:00:02 -0500 Subject: [PATCH 69/70] Removed unnesecery code, fixed the rest of the comparing string code errors --- src/main/java/edu/ithaca/dragon/bank/ATM.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATM.java b/src/main/java/edu/ithaca/dragon/bank/ATM.java index 33d7edab..4a28307e 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATM.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATM.java @@ -16,10 +16,7 @@ public boolean confirmCredentials(String username, String password) { Iterator itr = this.bank.users.iterator(); while (itr.hasNext()) { User current = itr.next(); - System.out.println(current.getUsername()); - System.out.println(username); if (current.getUsername().equals(username)) { - System.out.println("hi"); if (current.getPassword().equals(password)) { return true; } @@ -33,8 +30,8 @@ public User getUser(String username, String password) { Iterator itr = this.bank.users.iterator(); while (itr.hasNext()) { User current = itr.next(); - if (current.getUsername() == username) { - if (current.getPassword() == password) { + if (current.getUsername().equals(username)) { + if (current.getPassword().equals(password)) { return current; } } @@ -46,7 +43,7 @@ public double checkBalance(String acctId) { Iterator itr = this.bank.accounts.iterator(); while (itr.hasNext()) { BankAccount current = itr.next(); - if (current.getAcctId() == acctId) { + if (current.getAcctId().equals(acctId)) { return current.getBalance(); } } @@ -58,7 +55,7 @@ public void withdraw(String acctId, double amount) throws InsufficientFundsExcep Iterator itr = this.bank.accounts.iterator(); while (itr.hasNext()) { BankAccount current = itr.next(); - if (current.getAcctId() == acctId) { + if (current.getAcctId().equals(acctId)) { if (!current.isAmountValid(amount)) { throw new IllegalArgumentException("Invalid Amount"); } @@ -104,7 +101,7 @@ public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, doub Iterator itr = this.bank.accounts.iterator(); while (itr.hasNext()) { BankAccount current = itr.next(); - if (current.getAcctId() == acctIdToWithdrawFrom) { + if (current.getAcctId().equals(acctIdToWithdrawFrom)) { if (!current.isAmountValid(amount)) { throw new IllegalArgumentException("Invalid Amount"); } @@ -119,7 +116,7 @@ public void transfer(String acctIdToWithdrawFrom, String acctIdToDepositTo, doub } } - if (current.getAcctId() == acctIdToDepositTo) { + if (current.getAcctId().equals(acctIdToDepositTo)) { if (!current.isAmountValid(amount)) { throw new IllegalArgumentException("Invalid Amount"); } @@ -144,7 +141,7 @@ public ArrayList transactionHistory(String acctId) { Iterator itr = this.bank.accounts.iterator(); while (itr.hasNext()) { BankAccount current = itr.next(); - if (current.getAcctId() == acctId) { + if (current.getAcctId().equals(acctId)) { return current.getTransactionHistory(); } } From 3c06888a1037033396e16c40fb10b10e59f3c540 Mon Sep 17 00:00:00 2001 From: IoanDascalu Date: Tue, 18 Feb 2020 13:06:35 -0500 Subject: [PATCH 70/70] ADDED text script --- src/main/java/edu/ithaca/dragon/bank/ATMUI.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java index 1c61df49..bb181c8d 100644 --- a/src/main/java/edu/ithaca/dragon/bank/ATMUI.java +++ b/src/main/java/edu/ithaca/dragon/bank/ATMUI.java @@ -8,7 +8,12 @@ enum ATMUIState {Login, Frozen, Account, Menu, Withdraw, Deposit, Transfer} TEST SCRIPT FOR THE UI: When asked for the username, input 'ioan' When asked for the password, input '123' - + when asked for the ID, input 'ioan' + withdraw 2000, should give an error + withdraw 100, should pass + deposit 1000, should pass, + transfer 200 to account ID 'aidan' should pass + log out */ public class ATMUI {