diff --git a/README.md b/README.md
index 92d73b7..d99ef06 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ Week 2 project: ATM Simulator
Every feature must have corresponding unit tests
Tests should demonstrate proper behavior, and proper handling of misuse (eg. attempts to deposit/transfer/withdraw negative amounts
-- User interface: CLI (Command line interface) Only
+- atmproject.User interface: CLI (Command line interface) Only
- Direct Input
- Numbered options (instead of on-screen buttons)
- ASCII art welcome but not required
@@ -17,19 +17,19 @@ Tests should demonstrate proper behavior, and proper handling of misuse (eg. att
- Account Actions
- Withdraw from acct
- Deposit to acct
- - Transfer across accounts (self)
+ - Transfer across atmproject.accounts (self)
- Open new account
- Close account (must be empty)
- Print transaction history
- Check balance
- **Challenge:** Transfer to another user's account (but not from)
- Support multiple users
- - Users have associated accounts
+ - Users have associated atmproject.accounts
- Can create new user
- Users are authenticated with a password (generated or provided on user creation)
- Can exit a user and enter another user
- **BONUS** Persistence
- - Users and accounts remain persistent
+ - Users and atmproject.accounts remain persistent
- Opportunity for research
diff --git a/pom.xml b/pom.xml
index 9901415..943b707 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,20 @@
io.zipcoder
project-2-atm
1.0-SNAPSHOT
+
+
+ junit
+ junit
+ 4.12
+ compile
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
\ No newline at end of file
diff --git a/src/main/java/atmproject/ATM.java b/src/main/java/atmproject/ATM.java
new file mode 100644
index 0000000..11ce5bb
--- /dev/null
+++ b/src/main/java/atmproject/ATM.java
@@ -0,0 +1,177 @@
+package atmproject;
+
+
+import atmproject.accounts.Account;
+import atmproject.accounts.InvestmentsAccount;
+import atmproject.accounts.SavingsAccount;
+
+
+public class ATM {
+ private Console console = new Console(System.in, System.out);
+ private UserLogin userLogin = new UserLogin();
+ private User currentUser;
+ private boolean running = true;
+ private AccountMenu accountMenu = new AccountMenu();
+ private Language language = new Language();
+
+ public void turnOnATM(){
+ userLogin.runLoginMenu();
+ }
+
+
+ public void runMainMenu(User currentUser) {
+ setCurrentUser(currentUser);
+ while (running) {
+ console.println(language.getLang(Language.LangKey.MAINMENU));
+ Integer userInput = console.getIntegerInput(":");
+ mainMenuLogic(userInput);
+ }
+ }
+
+ public void mainMenuLogic(Integer userInput){
+ switch (userInput) {
+ case 1:
+ String transaction = callDeposit();
+ console.println(transaction);
+ currentUser.addToHistory(transaction + "\n");
+ break;
+ case 2:
+ transaction = callWithdraw();
+ console.println(transaction);
+ currentUser.addToHistory(transaction + "\n");
+ break;
+ case 3:
+ if (currentUser.getAccountList().size() >= 2) {
+ transaction = callTransfer();
+ console.println(transaction);
+ currentUser.addToHistory(transaction + "\n");
+ } else {
+ console.println("ERROR: Not enough accounts to transfer money. Please create a new one.");
+ }
+ break;
+ case 4:
+ console.println(checkBalance());
+ break;
+ case 5:
+ console.println(displayHistory(currentUser));
+ break;
+ case 6:
+ callCreateAccount();
+ break;
+ case 7:
+ callRemoveAccount();
+ break;
+ case 8:
+ returnToLoginMenu();
+ break;
+ }
+ giveInterest();
+ }
+
+ public String callDeposit() {
+ Account chosenAccount = accountMenu.selectAccount(currentUser);
+ console.println("How much would you like to deposit?");
+ Double userInput = console.getDoubleInput("$");
+ chosenAccount.deposit(userInput);
+ return String.format("You deposited $%.2f to %s.", userInput, chosenAccount.getAccountName());
+ }
+
+ public String callWithdraw() {
+ Account chosenAccount = accountMenu.selectAccount(currentUser);
+ console.println("How much would you like to withdraw?");
+ Double userInput = console.getDoubleInput("$");
+ if(userInput <= chosenAccount.getBalance()){
+ chosenAccount.withdraw(userInput);
+ return String.format("You withdrew $%.2f from %s.\n", userInput, chosenAccount.getAccountName());
+ }
+ return "ERROR: insufficient funds for withdraw.\n";
+ }
+
+ public String callTransfer(){
+ Account chosenAccount = accountMenu.selectAccount(currentUser);
+ Account destinationAccount = accountMenu.selectAccount(currentUser);
+ if(chosenAccount.equals(destinationAccount)){
+ return "ERROR: Incorrect account entry\n";
+ } else {
+ console.println("How much would you like to transfer?");
+ Double userInput = console.getDoubleInput("$");
+ if(userInput <= chosenAccount.getBalance()){
+ chosenAccount.transfer(destinationAccount, userInput);
+ return String.format("You transferred $%.2f from %s to %s.\n",userInput, chosenAccount.getAccountName(), destinationAccount.getAccountName());
+ }
+ return "ERROR: Insufficient funds for transfer.\n";
+ }
+ }
+
+ public void callCreateAccount(){
+ console.println("What kind of account would you like to create?\n(1) - Checkings\n(2) - Savings\n(3) - Investments");
+ Integer typeOfAccount = console.getIntegerInput(":");
+ switch(typeOfAccount) {
+ case 1:
+ Account account = new Account(currentUser, 0.0, "Checkings Account#" + (currentUser.getAccountList().size() + 1));
+ currentUser.addAccount(account);
+ break;
+ case 2:
+ SavingsAccount savingsAccount = new SavingsAccount(currentUser, 0.0, "Savings Account#" + (currentUser.getAccountList().size() + 1));
+ currentUser.addAccount(savingsAccount);
+ break;
+ case 3:
+ createInvestmentAccount();
+ break;
+
+ }
+ }
+
+ public void callRemoveAccount() {
+ Account chosenAccount = accountMenu.selectAccount(currentUser);
+ if(currentUser.getAccountList().containsValue(chosenAccount)){
+ currentUser.removeAccount(chosenAccount);
+ } else {
+ console.println("ERROR: Chosen account not found.");
+ }
+ }
+
+ private void createInvestmentAccount() {
+ console.println("At this bank, you'll need an initial deposit of $15,000 to open an investment account.\nHow " +
+ "much would you like to deposit?");
+ Integer input = console.getIntegerInput(":");
+ if(input > 14999) {
+ InvestmentsAccount investmentsAccount = new InvestmentsAccount(currentUser, (double)input, "Investment Account#" + (currentUser.getAccountList().size() + 1));
+ currentUser.addAccount(investmentsAccount);
+ } else {
+ console.println("That is not enough of an initial deposit");
+ }
+ }
+
+ public String checkBalance() {
+ Account chosenAccount = accountMenu.selectAccount(currentUser);
+ return String.format("The balance in %s is $%.2f\n", chosenAccount.getAccountName(), chosenAccount.getBalance());
+ }
+
+ public String displayHistory(User currentUser) {
+ if(currentUser.getTransactionHistory().isEmpty()){
+ return "You currently have no history.";
+ }
+ return currentUser.displayHistory();
+ }
+
+ public void returnToLoginMenu() {
+ running = false;
+ }
+
+ public void giveInterest(){
+ for(String name : currentUser.getAccountList().keySet()){
+ if(currentUser.getAccountList().get(name) instanceof SavingsAccount){
+ ((SavingsAccount) currentUser.getAccountList().get(name)).addInterest();
+ }
+ }
+ }
+
+ public void setCurrentUser(User currentUser) {
+ this.currentUser = currentUser;
+ }
+
+ public boolean isRunning() {
+ return running;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/atmproject/AccountMenu.java b/src/main/java/atmproject/AccountMenu.java
new file mode 100644
index 0000000..604009b
--- /dev/null
+++ b/src/main/java/atmproject/AccountMenu.java
@@ -0,0 +1,54 @@
+package atmproject;
+
+import atmproject.accounts.Account;
+import atmproject.accounts.InvestmentsAccount;
+import atmproject.accounts.SavingsAccount;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class AccountMenu {
+ Account returnedAccount;
+ Console console = new Console(System.in, System.out);
+
+ public Account selectAccount(User user) {
+ Map returnedMap = new LinkedHashMap<>();
+ returnedAccount = null;
+ Integer counter = 1;
+ printAndStoreAccounts(user, returnedMap, counter);
+ returnedAccount = getUserSelectedAccount(returnedMap, returnedAccount);
+
+
+ return returnedAccount;
+ }
+
+ public Account getUserSelectedAccount(Map returnedMap, Account returnedAccount) {
+ while (returnedAccount == null) {
+ console.println("\nPlease select an account.");
+ Integer input = console.getIntegerInput(":");
+
+ returnedAccount = getUsersInput(returnedMap, returnedAccount, input);
+
+ }
+ return returnedAccount;
+ }
+
+ public Account getUsersInput(Map returnedMap, Account returnedAccount, Integer input) {
+ if (returnedMap.containsKey(input)) {
+ returnedAccount = returnedMap.get(input);
+ } else {
+ console.println("\nAccount does not exist. Try again: ");
+ }
+ return returnedAccount;
+ }
+
+ public void printAndStoreAccounts(User user, Map returnedMap, Integer counter) {
+ console.println("\n");
+ for (String s : user.accountList.keySet()) {
+ console.println("(" + counter + ")" + " - " + s);
+ returnedMap.put(counter, user.accountList.get(s));
+ counter++;
+
+ }
+ }
+}
diff --git a/src/main/java/atmproject/Console.java b/src/main/java/atmproject/Console.java
new file mode 100644
index 0000000..997735e
--- /dev/null
+++ b/src/main/java/atmproject/Console.java
@@ -0,0 +1,62 @@
+package atmproject;
+
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.Scanner;
+
+public class Console {
+
+ private final Scanner input;
+ private final PrintStream output;
+
+ public Console(InputStream in, PrintStream out) {
+ this.input = new Scanner(in);
+ this.output = out;
+ }
+
+ public void print(String val, Object... args) {
+ output.format(val, args);
+ }
+
+ public void newln() {
+ print("\n");
+ }
+
+ public void println(String val, Object... vals) {
+ print(val + "\n", vals);
+ }
+
+ public String getStringInput(String prompt, Object... args) {
+ print(prompt, args);
+ return input.nextLine();
+ }
+
+ public Double getDoubleInput(String prompt, Object... args) {
+ String stringInput = getStringInput(prompt, args);
+ try {
+ Double doubleInput = Double.parseDouble(stringInput);
+ return doubleInput;
+ } catch (NumberFormatException nfe) { // TODO - Eliminate recursive nature
+ println("[ %s ] is an invalid user input!", stringInput);
+ println("Try inputting a numeric value!");
+ return getDoubleInput(prompt, args);
+ }
+ }
+
+ public Long getLongInput(String prompt, Object... args) {
+ String stringInput = getStringInput(prompt, args);
+ try {
+ Long longInput = Long.parseLong(stringInput);
+ return longInput;
+ } catch (NumberFormatException nfe) { // TODO - Eliminate recursive nature
+ println("[ %s ] is an invalid user input!", stringInput);
+ println("Try inputting an integer value!");
+ return getLongInput(prompt, args);
+ }
+ }
+
+ public Integer getIntegerInput(String prompt, Object... args) {
+ return getLongInput(prompt, args).intValue();
+ }
+
+}
diff --git a/src/main/java/atmproject/Language.java b/src/main/java/atmproject/Language.java
new file mode 100644
index 0000000..bbc9aca
--- /dev/null
+++ b/src/main/java/atmproject/Language.java
@@ -0,0 +1,26 @@
+package atmproject;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Language {
+
+ private Map langMap;
+ public enum LangKey { EXAMPLE1, EXAMPLE2,MAINMENU }
+
+ public Language() {
+
+ langMap = new HashMap();
+ langMap.put(LangKey.EXAMPLE1, "This is an example");
+ langMap.put(LangKey.EXAMPLE2, "This is another Example");
+ langMap.put(LangKey.MAINMENU, "Please select your option:\n" + "(1) - Deposit\n" + "(2) - Withdraw\n" +
+ "(3) - Transfer\n" + "(4) - Balance\n" + "(5) - View History\n" + "(6) - Create New Account\n" + "(7) - Remove Account\n" +
+ "(8) - Exit ATM");
+
+ }
+
+ public String getLang(LangKey key) {
+ return langMap.get(key);
+ }
+
+}
diff --git a/src/main/java/Main.java b/src/main/java/atmproject/Main.java
similarity index 61%
rename from src/main/java/Main.java
rename to src/main/java/atmproject/Main.java
index 05e41a9..9404c95 100644
--- a/src/main/java/Main.java
+++ b/src/main/java/atmproject/Main.java
@@ -1,9 +1,12 @@
+package atmproject;
+
/**
* Created by iyasuwatts on 10/17/17.
*/
public class Main {
public static void main(String[] args){
-
+ ATM atm = new ATM();
+ atm.turnOnATM();
}
}
diff --git a/src/main/java/atmproject/User.java b/src/main/java/atmproject/User.java
new file mode 100644
index 0000000..cd6bf48
--- /dev/null
+++ b/src/main/java/atmproject/User.java
@@ -0,0 +1,101 @@
+package atmproject;
+
+import atmproject.accounts.Account;
+import atmproject.accounts.SavingsAccount;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.TreeMap;
+
+public class User {
+ private Console console = new Console(System.in,System.out);
+ private String firstName;
+ private String lastName;
+ private Integer pinNumber;
+ private Integer userID;
+ private ArrayList transactionHistory;
+ TreeMap accountList;
+ TreeMap savingsAccountList;
+
+ public User(String firstName, String lastName, Integer userID){
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.userID = userID;
+ this.pinNumber = 0;
+ this.accountList = new TreeMap();
+ this.transactionHistory = new ArrayList();
+
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public Integer getPinNumber() {
+ return pinNumber;
+ }
+
+ public void setPinNumber(Integer pinNumber) {
+ this.pinNumber = pinNumber;
+ }
+
+ public Integer getUserID() {
+ return userID;
+ }
+
+ public void setUserID(Integer accountNumber) {
+ this.userID = accountNumber;
+ }
+
+ public TreeMap getAccountList() {
+ return accountList;
+ }
+
+ public void setAccountList(TreeMap accountList) {
+ this.accountList = accountList;
+ }
+
+ public ArrayList getTransactionHistory() {
+ return transactionHistory;
+ }
+
+ public void setTransactionHistory(ArrayList transactionHistory) {
+ this.transactionHistory = transactionHistory;
+ }
+ public void addToHistory(String transaction){
+ transactionHistory.add(transaction);
+ }
+
+ public void removeAccount(Account account){
+ if (account.getBalance() > 0.0){
+ console.println("Please empty your account before attempting to close.");
+ } else {
+ accountList.remove(account.getAccountName());
+ }
+ }
+
+ public void addAccount(Account account) {
+ accountList.put(account.getAccountName(), account);
+ }
+
+ public String displayHistory(){
+ StringBuilder sb = new StringBuilder();
+ for(String s : transactionHistory){
+ sb.append("**").append(s);
+ }
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/atmproject/UserLogin.java b/src/main/java/atmproject/UserLogin.java
new file mode 100644
index 0000000..ef3c389
--- /dev/null
+++ b/src/main/java/atmproject/UserLogin.java
@@ -0,0 +1,157 @@
+package atmproject;
+
+import atmproject.accounts.Account;
+
+public class UserLogin {
+ private User currentUser;
+ private Console console = new Console(System.in, System.out);
+ private boolean running;
+ private UserRepository userRepository;
+
+ public UserLogin() {
+ userRepository = UserRepository.getUserRepository();
+ }
+
+ public void runLoginMenu() {
+ running = true;
+ while (running) {
+ assignUser();
+ if (currentUser != null) {
+ startMainMenu();
+ }
+ exit();
+ }
+ }
+
+ public void assignUser() {
+ while (currentUser == null) {
+ console.println("Welcome to the ATM!\n(1) - Create New Account\n(2) - Login to Existing Account\n(0) - Exit ATM");
+ Integer userInput = console.getIntegerInput(":");
+ Boolean exit = false;
+ switch (userInput) {
+ case 0:
+ exit = true;
+ break;
+ case 1:
+ getUserInfo();
+ console.println("Hello, %s! Thank you for creating an account. Your user ID is %d.", currentUser.getFirstName(),currentUser.getUserID());
+ initialAccount(currentUser);
+ break;
+ case 2:
+ getLoginInfo();
+ break;
+ }
+ if (exit) {
+ break;
+ }
+ }
+ }
+
+ protected String getFirstNameInput() {
+ console.println("Please enter your First name :");
+ return console.getStringInput(":");
+ }
+
+ protected String getLastNameInput() {
+ console.println("Please enter Last name :");
+ return console.getStringInput(":");
+ }
+
+ protected void setPin() {
+ Boolean isPINSet = false;
+ while(!isPINSet) {
+ console.println("Please select 4 digit PIN :");
+ Integer pin = console.getIntegerInput(":");
+ if(pin < 10000 && pin > -1) {
+ currentUser.setPinNumber(pin);
+ isPINSet = true;
+ }else{ console.println("Please try again.");}
+ }
+ }
+
+ public void getUserInfo(){
+ String firstInput = getFirstNameInput();
+ String lastInput = getLastNameInput();
+ currentUser = createUser(firstInput,lastInput);
+ setPin();
+ }
+
+ protected Integer getUserIDInput(){
+ console.println("Please enter your 4 digit Account Number :");
+ return console.getIntegerInput(":");
+
+ }
+
+ protected Integer getPINInput(){
+ console.println("Please enter your PIN :");
+ return console.getIntegerInput(":");
+ }
+
+ protected Integer tryAgainInput(){
+ console.println("User Info doesn't match. Try again?\n(1) - Yes\n(2) - No\n");
+ return console.getIntegerInput(":");
+ }
+
+ public void getLoginInfo(){
+ Boolean exit = false;
+ while (currentUser == null) {
+ Integer userID = getUserIDInput();
+ Integer pin = getPINInput();
+ login(userID, pin);
+ if(currentUser == null){
+ Integer userInput = tryAgainInput();
+ switch(userInput){
+ case 1:
+ break;
+ case 2:
+ exit = true;
+ break;
+ }
+ if(exit){break;}
+ }
+ }
+
+ }
+
+ public User createUser (String firstName, String lastName){
+ Integer userID = userRepository.getIDNums();
+ userRepository.saveUser(new User(firstName,lastName, userID), userID);
+
+ return userRepository.getUser(userID);
+ }
+
+ public void login(Integer userID,Integer pinNumber ){
+ User user = userRepository.getUser(userID);
+ if(user != null && user.getPinNumber().equals(pinNumber)){
+ currentUser = user;
+ }
+ }
+
+ public void startMainMenu(){
+ ATM ATM = new ATM();
+ ATM.runMainMenu(currentUser);
+ }
+
+
+ public void initialAccount(User currentUser){
+ Account account = new Account(currentUser, 0.0, "Checkings Account#" + (currentUser.getAccountList().size() + 1));
+ currentUser.addAccount(account);
+ }
+
+ public void exit(){
+ Integer userInput = 0;
+ console.println("Are you sure you want to Exit?\n(1) - Yes\n(2) - No\n");
+ while (!userInput.equals(1) && !userInput.equals(2)) {
+ userInput = console.getIntegerInput(":");
+ switch (userInput) {
+ case 1:
+ running = false;
+ break;
+ case 2:
+ break;
+ default:
+ console.print("Please enter (1) or (2)");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/atmproject/UserRepository.java b/src/main/java/atmproject/UserRepository.java
new file mode 100644
index 0000000..df7b486
--- /dev/null
+++ b/src/main/java/atmproject/UserRepository.java
@@ -0,0 +1,40 @@
+package atmproject;
+
+import atmproject.accounts.Account;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+public class UserRepository {
+
+ // Singleton Eager Initialization
+ protected static final UserRepository userRepository = new UserRepository();
+
+ private int idNums;
+ private Map repo;
+
+ protected UserRepository(){
+ idNums = 1000;
+ repo = new TreeMap();
+ }
+ public static UserRepository getUserRepository(){
+ return userRepository;
+ }
+
+ public Integer createNewUserID(){
+ Integer userID = idNums;
+ idNums++;
+ return userID;
+ }
+ public void saveUser(User user, Integer userID){
+ repo.put(String.format("%04d",userID),user);
+ }
+
+ public User getUser(Integer userID){
+ return repo.get(String.format("%4d",userID));
+ }
+
+ public int getIDNums() {
+ return idNums;
+ }
+}
diff --git a/src/main/java/atmproject/accounts/Account.java b/src/main/java/atmproject/accounts/Account.java
new file mode 100644
index 0000000..5a1f15f
--- /dev/null
+++ b/src/main/java/atmproject/accounts/Account.java
@@ -0,0 +1,79 @@
+package atmproject.accounts;
+
+import atmproject.Console;
+import atmproject.User;
+
+import java.security.InvalidParameterException;
+
+public class Account {
+
+ private User currentUser;
+ protected Double balance;
+ private String accountName;
+ Console console = new Console(System.in,System.out);
+
+ public Account(User currentUser, Double balance, String accountName){
+ this.currentUser = currentUser;
+ this.balance = balance;
+ this.accountName = accountName;
+ }
+
+ public Account(Double balance){
+ this.balance = balance;
+ }
+
+ public User getCurrentUser() {
+ return currentUser;
+ }
+
+ public void setCurrentUser(User currentUser) {
+ this.currentUser = currentUser;
+ }
+
+ public Double getBalance() {
+ return balance;
+ }
+
+ public void setBalance(Double balance) {
+ this.balance = balance;
+ }
+
+ public String getAccountName() {
+ return accountName;
+ }
+
+ public void setAccountName(String accountName) {
+ this.accountName = accountName;
+ }
+
+ public Double withdraw(Double amount) {
+ if (amount < 0) {
+ throw new InvalidParameterException();
+ }
+ if(this.balance >= amount) {
+ this.balance = balance - amount;
+ return balance;
+ }
+ return balance;
+ }
+
+ public Double deposit(Double amount) {
+ if (amount < 0) {
+ throw new InvalidParameterException();
+ }
+ this.balance = balance + amount;
+ return balance;
+ }
+
+ public Double transfer(Account destinationAccount, Double amount) {
+ if (amount < 0) {
+ throw new InvalidParameterException();
+ }
+ if(this.balance >= amount) {
+ this.withdraw(amount);
+ destinationAccount.deposit(amount);
+ }
+ return this.balance;
+ }
+
+}
diff --git a/src/main/java/atmproject/accounts/InvestmentsAccount.java b/src/main/java/atmproject/accounts/InvestmentsAccount.java
new file mode 100644
index 0000000..af1849b
--- /dev/null
+++ b/src/main/java/atmproject/accounts/InvestmentsAccount.java
@@ -0,0 +1,12 @@
+package atmproject.accounts;
+
+import atmproject.User;
+import atmproject.accounts.SavingsAccount;
+
+public class InvestmentsAccount extends SavingsAccount {
+
+ public InvestmentsAccount(User currentUser, Double balance, String accountName) {
+ super(currentUser, balance, accountName);
+ super.setInterestRate(0.001);
+ }
+}
diff --git a/src/main/java/atmproject/accounts/SavingsAccount.java b/src/main/java/atmproject/accounts/SavingsAccount.java
new file mode 100644
index 0000000..302911b
--- /dev/null
+++ b/src/main/java/atmproject/accounts/SavingsAccount.java
@@ -0,0 +1,27 @@
+package atmproject.accounts;
+
+import atmproject.User;
+import atmproject.accounts.Account;
+
+public class SavingsAccount extends Account {
+
+ protected Double interestRate;
+
+ public SavingsAccount(User currentUser, Double balance, String accountName) {
+ super(currentUser, balance, accountName);
+ this.interestRate = 0.0005;
+ }
+
+ public Double addInterest(){
+ balance += (balance * interestRate);
+ return balance;
+ }
+
+ public Double getInterestRate() {
+ return interestRate;
+ }
+
+ public void setInterestRate(Double interestRate) {
+ this.interestRate = interestRate;
+ }
+}
diff --git a/src/main/test/AccountTest.java b/src/main/test/AccountTest.java
deleted file mode 100644
index cbea4ad..0000000
--- a/src/main/test/AccountTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import static org.junit.Assert.assertEquals;
-
-
-// Test the expected Account class from ATM.
-public class AccountTest {
-
- @Test
- public void testA0() {
- Account a = new Account(0.0);
- assertEquals(0.0, a.balance(), 0.0001);
- }
-
- @Test
- public void testA00() {
- Account a = new Account(10.0);
- assertEquals(10.0, a.balance(), 0.0001);
- }
-
- @Test
- public void testA01() {
- Account a = new Account(0.0);
- assertEquals(true, a.closeAccount());
- }
-
- @Test
- public void testA02() {
- Account a = new Account(10.0);
- assertEquals(false, a.closeAccount());
- }
-
- @Test
- public void testA1() {
- Account a = new Account(0.0);
- a.deposit(100.0);
- assertEquals(100.0, a.balance(), 0.0001);
- }
-
- @Test
- public void testA2() {
- Account a = new Account(10.0);
- a.deposit(100.0);
- assertEquals(110.0, a.balance(), 0.0001);
- }
-
- @Test
- public void testA3() {
- Account a = new Account(200.0);
- Double actual = a.withdraw(100.0);
- assertEquals(100.0, actual, 0.0001);
- }
-
- @Test
- public void testA4() {
- Account a = new Account(0.0);
- Double actual = a.withdraw(1.0);
- assertEquals(0.0, actual, 0.0001);
- }
-
- @Test
- public void testA5() {
- Account a = new Account(10.0);
- Account b = new Account(0.0);
- a.transfer(b, 10.0);
- assertEquals(0.0, a.balance(), 0.0001);
- assertEquals(10.0, b.balance(), 0.0001);
- }
-
- @Test
- public void testA6() {
- Account a = new Account(10.0);
- Account b = new Account(0.0);
- a.transfer(b, 100.0); // nothing should happen
- assertEquals(10.0, a.balance(), 0.0001);
- assertEquals(0.0, b.balance(), 0.0001);
- }
-
-
-}
diff --git a/src/test/java/atmproject/ATMTest.java b/src/test/java/atmproject/ATMTest.java
new file mode 100644
index 0000000..a2724d6
--- /dev/null
+++ b/src/test/java/atmproject/ATMTest.java
@@ -0,0 +1,81 @@
+package atmproject;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import static org.junit.Assert.*;
+
+public class ATMTest {
+
+ @Test
+ public void runMainMenu() {
+ String input = "8";
+ InputStream in = new ByteArrayInputStream(input.getBytes());
+ System.setIn(in);
+
+ ATM atm = new ATM();
+ User currentUser = new User("Jow","Byeden",0000);
+
+ atm.runMainMenu(currentUser);
+
+ assertFalse(atm.isRunning());
+
+ }
+
+ @Test
+ public void checkBalance() {
+
+ ATM atm = new ATM();
+ UserLogin userLogin = new UserLogin();
+ User currentUser = new User("Jow","Byeden",0000);
+
+ userLogin.initialAccount(currentUser);
+ atm.setCurrentUser(currentUser);
+
+
+
+ Double actual = currentUser.getAccountList().get("Checkings Account#1").getBalance();
+ Double expected = 0.0;
+
+ Assert.assertEquals(actual,expected);
+
+ }
+
+ @Test
+ public void displayHistoryTest1() {
+ ATM atm = new ATM();
+ User currentUser = new User(null,null,null);
+ String expected = "You currently have no history.";
+ Assert.assertEquals(expected,atm.displayHistory(currentUser));
+ }
+
+ @Test
+ public void displayHistoryTest2() {
+ ATM atm = new ATM();
+ User currentUser = new User(null,null,null);
+ String expected = "This is only a test.";
+ currentUser.addToHistory("This is only a test.");
+
+ Assert.assertEquals("**" + expected,atm.displayHistory(currentUser));
+ }
+
+ @Test
+ public void returnTOLoginMenu() {
+ ATM ATM = new ATM();
+
+ ATM.returnToLoginMenu();
+
+ assertFalse(ATM.isRunning());
+
+
+ }
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/test/java/atmproject/AccountMenuTest.java b/src/test/java/atmproject/AccountMenuTest.java
new file mode 100644
index 0000000..1db407e
--- /dev/null
+++ b/src/test/java/atmproject/AccountMenuTest.java
@@ -0,0 +1,43 @@
+package atmproject;
+
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import static org.junit.Assert.*;
+
+public class AccountMenuTest {
+ @Test
+ public void selectAccount() {
+ String input = "1";
+ InputStream in = new ByteArrayInputStream(input.getBytes());
+ System.setIn(in);
+
+ AccountMenu accountmenu = new AccountMenu();
+ ATM atm = new ATM();
+ UserLogin userLogin = new UserLogin();
+ User user = new User("mich", "kin", 1000);
+
+ userLogin.initialAccount(user);
+
+ atm.setCurrentUser(user);
+
+
+ accountmenu.selectAccount(user);
+ Double actual = accountmenu.returnedAccount.getBalance();
+ assertTrue(actual == 0.0);
+ }
+
+ @Test
+ public void getUserSelectedAccount() {
+ }
+
+ @Test
+ public void getUsersInput() {
+ }
+
+ @Test
+ public void printAndStoreAccounts() {
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/atmproject/LanguageTest.java b/src/test/java/atmproject/LanguageTest.java
new file mode 100644
index 0000000..b4ccce0
--- /dev/null
+++ b/src/test/java/atmproject/LanguageTest.java
@@ -0,0 +1,27 @@
+package atmproject;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class LanguageTest {
+
+ @Test
+ public void getLangTest() {
+ Language language = new Language();
+ String expected = "This is an example";
+ String actual = language.getLang(Language.LangKey.EXAMPLE1);
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void getLangTest2() {
+ Language language = new Language();
+ String expected = "Please select your option:\n" + "(1) - Deposit\n" + "(2) - Withdraw\n" +
+ "(3) - Transfer\n" + "(4) - Balance\n" + "(5) - View History\n" + "(6) - Create New Account\n" + "(7) - Remove Account\n" +
+ "(8) - Exit ATM";
+ String actual = language.getLang(Language.LangKey.MAINMENU);
+ Assert.assertEquals(expected,actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/atmproject/UserLoginTest.java b/src/test/java/atmproject/UserLoginTest.java
new file mode 100644
index 0000000..b63038f
--- /dev/null
+++ b/src/test/java/atmproject/UserLoginTest.java
@@ -0,0 +1,92 @@
+package atmproject;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import static org.junit.Assert.*;
+
+public class UserLoginTest {
+
+ @Test
+ public void getFirstName(){
+ String input = "Shadow";
+ InputStream in = new ByteArrayInputStream(input.getBytes());
+ System.setIn(in);
+
+ UserLogin login = new UserLogin();
+ String actual = login.getFirstNameInput();
+ Assert.assertEquals(input,actual);
+ }
+
+ @Test
+ public void getLastName(){
+ String input = "???";
+ InputStream in = new ByteArrayInputStream(input.getBytes());
+ System.setIn(in);
+
+ UserLogin login = new UserLogin();
+ String actual = login.getLastNameInput();
+ Assert.assertEquals(input,actual);
+ }
+
+ @Test
+ public void getUserInfo() {
+ }
+
+ @Test
+ public void getLoginInfo() {
+ }
+
+ @Test
+ public void getUserIDinput(){
+ String input = "3453";
+ InputStream in = new ByteArrayInputStream(input.getBytes());
+ System.setIn(in);
+
+ UserLogin login = new UserLogin();
+ String actual = login.getUserIDInput().toString();
+ Assert.assertEquals(input,actual);
+ }
+
+ @Test
+ public void getPINInputTest(){
+ String input = "3453";
+ InputStream in = new ByteArrayInputStream(input.getBytes());
+ System.setIn(in);
+
+ UserLogin login = new UserLogin();
+ String actual = login.getPINInput().toString();
+ Assert.assertEquals(input,actual);
+ }
+
+ @Test
+ public void tryAgaininput(){
+ String input = "1";
+ InputStream in = new ByteArrayInputStream(input.getBytes());
+ System.setIn(in);
+
+ UserLogin login = new UserLogin();
+ String actual = login.tryAgainInput().toString();
+ Assert.assertEquals(input,actual);
+ }
+
+ @Test
+ public void createUser() {
+ }
+
+ @Test
+ public void initialAccountTest(){
+ UserLogin login = new UserLogin();
+ User currentUser = new User(null,null,null);
+ login.initialAccount(currentUser);
+
+ Assert.assertTrue(currentUser.getAccountList().containsKey("Checkings Account#1"));
+ }
+
+ @Test
+ public void login() {
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/atmproject/UserRepositoryTest.java b/src/test/java/atmproject/UserRepositoryTest.java
new file mode 100644
index 0000000..47adb12
--- /dev/null
+++ b/src/test/java/atmproject/UserRepositoryTest.java
@@ -0,0 +1,50 @@
+package atmproject;
+
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+import static org.junit.Assert.*;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class UserRepositoryTest {
+
+ @Test
+ public void Test01CreateNewAccountNum() {
+ UserRepository userRepository = UserRepository.getUserRepository();
+
+ Integer expectedAccountNum = 1000;
+ Integer actualAccountNum = userRepository.createNewUserID();
+
+ Integer expectedIncrement = expectedAccountNum + 1;
+ Integer actualIncrement = userRepository.getIDNums();
+
+ assertEquals(expectedAccountNum, actualAccountNum);
+ assertEquals(expectedIncrement, actualIncrement);
+ }
+ @Test
+ public void Test02CreateNewAccountNum(){
+ UserRepository userRepository = UserRepository.getUserRepository();
+
+ Integer expectedAccountNum = 1001;
+ Integer actualAccountNum = userRepository.createNewUserID();
+
+ Integer expectedIncrement = expectedAccountNum + 1;
+ Integer actualIncrement = userRepository.getIDNums();
+
+ assertEquals(expectedAccountNum, actualAccountNum);
+ assertEquals(expectedIncrement, actualIncrement);
+ }
+ @Test
+ public void Test03saveUser() {
+ UserRepository userRepository = UserRepository.getUserRepository();
+ Integer accountNum = userRepository.createNewUserID();
+ User expected = new User("Jaime","Diamond", accountNum);
+
+ userRepository.saveUser(expected, accountNum);
+ User actual = userRepository.getUser(accountNum);
+
+ assertEquals(expected, actual);
+ }
+
+}
diff --git a/src/test/java/atmproject/UserTest.java b/src/test/java/atmproject/UserTest.java
new file mode 100644
index 0000000..c283447
--- /dev/null
+++ b/src/test/java/atmproject/UserTest.java
@@ -0,0 +1,157 @@
+package atmproject;
+
+import atmproject.accounts.Account;
+import atmproject.accounts.SavingsAccount;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.TreeMap;
+
+import static org.junit.Assert.*;
+
+public class UserTest {
+
+ @Test
+ public void getFirstName() {
+ User currentUser = new User("Shadow", "???", 3454);
+ String expected = "Shadow";
+ String actual = currentUser.getFirstName();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setFirstName() {
+ User currentUser = new User("Shadow", "???", 3454);
+ String expected = "Shadow";
+ currentUser.setFirstName(expected);
+ Assert.assertEquals(expected,currentUser.getFirstName());
+ }
+
+ @Test
+ public void getLastName() {
+ User currentUser = new User("Shadow", "???", 3454);
+ String expected = "???";
+ String actual = currentUser.getLastName();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setLastName() {
+ User currentUser = new User("Shadow", "???", 3454);
+ String expected = "???";
+ currentUser.setLastName(expected);
+ Assert.assertEquals(expected,currentUser.getLastName());
+
+ }
+
+ @Test
+ public void getPinNumber() {
+ User currentUser = new User("Shadow", "???", 3454);
+ Integer expected = 7777;
+ currentUser.setPinNumber(expected);
+ Assert.assertEquals(expected,currentUser.getPinNumber());
+ }
+
+ @Test
+ public void setPinNumber() {
+ User currentUser = new User("Shadow", "???", 3454);
+ Integer expected = 7777;
+ currentUser.setPinNumber(expected);
+ Assert.assertEquals(expected,currentUser.getPinNumber());
+ }
+
+ @Test
+ public void getUserID() {
+ User currentUser = new User("Shadow", "???", 3454);
+ Integer expected = 3454;
+ Integer actual = currentUser.getUserID();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setUserID() {
+ User currentUser = new User("Shadow", "???", 3454);
+ Integer expected = 3454;
+ currentUser.setUserID(expected);
+ Assert.assertEquals(expected,currentUser.getUserID());
+ }
+
+ @Test
+ public void getAccountList() {
+ User currentUser = new User("Shadow", "???", 3454);
+ Account account = new Account(currentUser, 500.0, "Checking Account 1");
+ String expected = "{" + account.getAccountName() + "=" + account.toString() + "}";
+ currentUser.addAccount(account);
+ Assert.assertEquals(expected,currentUser.getAccountList().toString());
+ }
+
+ @Test
+ public void setAccountList() {
+ User currentUser = new User("Shadow", "???", 3454);
+ Account account = new Account(currentUser, 500.0, "Checking Account 1");
+ TreeMap expected = new TreeMap();
+ expected.put(account.getAccountName(),account);
+ currentUser.setAccountList(expected);
+ Assert.assertEquals(expected.toString(),currentUser.getAccountList().toString());
+ }
+
+ @Test
+ public void getTransactionHistory() {
+ User currentUser = new User("Shadow", "???", 3454);
+ String expected = "BLAH BLAH BLAH";
+ currentUser.addToHistory(expected);
+ Assert.assertEquals(("[" + expected + "]"),currentUser.getTransactionHistory().toString());
+ }
+
+ @Test
+ public void setTransactionHistory() {
+ User currentUser = new User("Shadow", "???", 3454);
+ String transaction = "BLAH BLAH BLAH";
+ ArrayList expected = new ArrayList();
+ expected.add(transaction);
+ currentUser.setTransactionHistory(expected);
+ Assert.assertEquals(expected.toString(), currentUser.getTransactionHistory().toString());
+ }
+
+ @Test
+ public void addAccount() {
+ User currentUser = new User("Shadow", "???", 3454);
+ Account account = new Account(currentUser, 500.0, "Checking Account 1");
+ currentUser.addAccount(account);
+ Assert.assertTrue(currentUser.getAccountList().containsKey("Checking Account 1"));
+
+ }
+
+ @Test
+ public void removeAccount() {
+ User currentUser = new User("Shadow", "???", 3454);
+ Account account = new Account(currentUser, 500.0, "Savings Account 1");
+ currentUser.addAccount(account);
+ currentUser.removeAccount(account);
+ assertEquals(1, currentUser.getAccountList().size());
+ }
+
+ @Test
+ public void removeAccount2() {
+ User currentUser = new User("Shadow", "???", 3454);
+ Account account = new Account(currentUser, 0.0, "Savings Account 1");
+ currentUser.addAccount(account);
+ currentUser.removeAccount(account);
+ Assert.assertTrue(currentUser.getAccountList().isEmpty());
+ }
+
+ @Test
+ public void displayHistory() {
+ User currentUser = new User("Shadow", "???", 3454);
+ String transaction = "BLAH BLAH BLAH";
+ String transaction2 = "Snip snat snoogle snork";
+ String transaction3 = "Fiddle flop flee!";
+ currentUser.addToHistory(transaction);
+ currentUser.addToHistory(transaction2);
+ currentUser.addToHistory(transaction3);
+ Assert.assertTrue(currentUser.displayHistory().contains(transaction2));
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/test/java/atmproject/accounts/AccountTest.java b/src/test/java/atmproject/accounts/AccountTest.java
new file mode 100644
index 0000000..bb1bd96
--- /dev/null
+++ b/src/test/java/atmproject/accounts/AccountTest.java
@@ -0,0 +1,177 @@
+package atmproject.accounts;
+
+import atmproject.User;
+import atmproject.accounts.Account;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import java.security.InvalidParameterException;
+
+import static org.junit.Assert.assertEquals;
+
+
+// Test the expected Account class from ATM.
+public class AccountTest {
+
+ @Test
+ public void testA0() {
+ Account a = new Account(0.0);
+ assertEquals(0.0, a.getBalance(), 0.0001);
+ }
+
+ @Test
+ public void testA00() {
+ Account a = new Account(10.0);
+ assertEquals(10.0, a.getBalance(), 0.0001);
+ }
+
+ @Test
+ public void testA1() {
+ Account a = new Account(0.0);
+ a.deposit(100.0);
+ assertEquals(100.0, a.getBalance(), 0.0001);
+ }
+
+ @Test
+ public void testA2() {
+ Account a = new Account(10.0);
+ a.deposit(100.0);
+ assertEquals(110.0, a.getBalance(), 0.0001);
+ }
+
+ @Test
+ public void testA3() {
+ Account a = new Account(200.0);
+ Double actual = a.withdraw(100.0);
+ assertEquals(100.0, actual, 0.0001);
+ }
+
+ @Test
+ public void testA4() {
+ Account a = new Account(0.0);
+ Double actual = a.withdraw(1.0);
+ assertEquals(0.0, actual, 0.0001);
+ }
+
+ @Test
+ public void testA5() {
+ Account a = new Account(10.0);
+ Account b = new Account(0.0);
+ a.transfer(b, 10.0);
+ assertEquals(0.0, a.getBalance(), 0.0001);
+ assertEquals(10.0, b.getBalance(), 0.0001);
+ }
+
+ @Test
+ public void testA6() {
+ Account a = new Account(10.0);
+ Account b = new Account(0.0);
+ a.transfer(b, 100.0); // nothing should happen
+ assertEquals(10.0, a.getBalance(), 0.0001);
+ assertEquals(0.0, b.getBalance(), 0.0001);
+ }
+
+ @Test
+ public void getCurrentUserTest() {
+ User currentUser = new User("Sabin", "Figaro", 456456);
+ Account account = new Account(currentUser, 0.0,null);
+ User expected = new User("Sabin", "Figaro", 456456);
+ User actual = account.getCurrentUser();
+
+ Assert.assertEquals(actual.getFirstName(),expected.getFirstName());
+ }
+
+ @Test
+ public void setCurrentUser() {
+ User currentUser = new User("Sabin", "Figaro", 456456);
+ Account account = new Account(0.0);
+ account.setCurrentUser(currentUser);
+
+ Assert.assertEquals(account.getCurrentUser(), currentUser);
+ }
+
+ @Test
+ public void getBalance() {
+ Account account = new Account(0.0);
+ Double expected = 0.0;
+ Double actual = account.getBalance();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setBalance() {
+ Account account = new Account(0.0);
+ Double expected = 100.0;
+ account.setBalance(expected);
+
+ Assert.assertEquals(expected,account.getBalance());
+ }
+
+ @Test
+ public void depositTest() {
+ Account account = new Account(0.0);
+ account.setBalance(100.0);
+ Double input = 80.0;
+ account.deposit(input);
+
+
+ Double expected = 180.0;
+
+ Assert.assertEquals(expected,account.getBalance());
+ }
+
+ @Test (expected = InvalidParameterException.class)
+ public void depositTestFalse() throws InvalidParameterException {
+ Account account = new Account(0.0);
+ Double input = -80.0;
+ account.deposit(input);
+ }
+
+ @Test
+ public void withdrawTest() {
+ Account account = new Account(0.0);
+ account.setBalance(100.0);
+ Double input = 80.0;
+ account.withdraw(input);
+
+
+ Double expected = 20.0;
+
+ Assert.assertEquals(expected,account.getBalance());
+ }
+
+ @Test (expected = InvalidParameterException.class)
+ public void withdrawTestFalse() throws InvalidParameterException{
+ Account account = new Account(0.0);
+ Double input = -80.0;
+ account.withdraw(input);
+ }
+
+ @Test
+ public void getAccountName() {
+ Account account = new Account(null,null,"testAccount");
+ String expected = "testAccount";
+ String actual = account.getAccountName();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setAccountName() {
+ Account account = new Account(null,null,null);
+ String expected = "testAccount";
+ account.setAccountName(expected);
+
+ Assert.assertEquals(expected,account.getAccountName());
+ }
+
+ @Test (expected = InvalidParameterException.class)
+ public void transferTestFalse() throws InvalidParameterException{
+ Account account = new Account(0.0);
+ Account account2 = new Account(0.0);
+ Double input = -80.0;
+ account.transfer(account2, input);
+ }
+}
diff --git a/src/test/java/atmproject/accounts/InvestmentsAccountTest.java b/src/test/java/atmproject/accounts/InvestmentsAccountTest.java
new file mode 100644
index 0000000..98b8508
--- /dev/null
+++ b/src/test/java/atmproject/accounts/InvestmentsAccountTest.java
@@ -0,0 +1,59 @@
+package atmproject.accounts;
+
+import atmproject.User;
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class InvestmentsAccountTest {
+
+ @Test
+ public void constructorTest(){
+ User currentUser = new User("Shadow",null,null);
+ Double expectedBalance = 15000.0;
+ String expectedName = "Investments Account 1";
+ InvestmentsAccount account = new InvestmentsAccount(currentUser, expectedBalance, expectedName);
+
+ Double actualBalance = account.getBalance();
+ String actualName = account.getAccountName();
+
+ Assert.assertEquals(expectedBalance,actualBalance);
+ Assert.assertEquals(expectedName,actualName);
+ }
+
+/* @Test
+ public void getMinimumDepositTest() {
+ InvestmentsAccount investmentsAccount = new InvestmentsAccount(null,null,null);
+ Double expected = 15000.0;
+ Double actual = investmentsAccount.getMinimumDeposit();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setMinimumDepositTest() {
+ InvestmentsAccount investmentsAccount = new InvestmentsAccount(null,null,null);
+ Double expected = 35000.0;
+ investmentsAccount.setMinimumDeposit(expected);
+ assertEquals(expected,investmentsAccount.getMinimumDeposit());
+ }
+
+ @Test
+ public void enoughForInitialBalanceFalseTest() {
+ InvestmentsAccount investmentsAccount = new InvestmentsAccount(null,null,null);
+ Double input = 13000.0;
+ String expected = String.format("We apologize. Your starting balance must be at least $%f0", investmentsAccount.getMinimumDeposit());
+ String actual = investmentsAccount.enoughForInitialBalance(input);
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void enoughForInitialBalanceTrueTest() {
+ InvestmentsAccount investmentsAccount = new InvestmentsAccount(null,null,null);
+ Double input = 17000.0;
+ String expected = "Thank you! Enjoy your new investment account.";
+ String actual = investmentsAccount.enoughForInitialBalance(input);
+ Assert.assertEquals(expected,actual);
+ }
+*/
+}
\ No newline at end of file
diff --git a/src/test/java/atmproject/accounts/SavingsAccountTest.java b/src/test/java/atmproject/accounts/SavingsAccountTest.java
new file mode 100644
index 0000000..74bdbd6
--- /dev/null
+++ b/src/test/java/atmproject/accounts/SavingsAccountTest.java
@@ -0,0 +1,44 @@
+package atmproject.accounts;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class SavingsAccountTest {
+
+ @Test
+ public void addInterestTest() {
+ SavingsAccount savingsAccount = new SavingsAccount(null,null,null);
+ savingsAccount.setBalance(500.0);
+ Double expected = savingsAccount.getBalance() + (savingsAccount.getBalance() * (savingsAccount).getInterestRate());
+ Double actual = savingsAccount.addInterest();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void addInterestTest2() {
+ SavingsAccount savingsAccount = new SavingsAccount(null,null,null);
+ savingsAccount.setBalance(10.0);
+ Double expected = savingsAccount.getBalance() + (savingsAccount.getBalance() * (savingsAccount).getInterestRate());
+ Double actual = savingsAccount.addInterest();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void getInterestRate() {
+ SavingsAccount savingsAccount = new SavingsAccount(null,null,null);
+ Double expected = 0.0005;
+ Double actual = savingsAccount.getInterestRate();
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setInterestRate() {
+ SavingsAccount savingsAccount = new SavingsAccount(null,null,null);
+ Double expected = 0.0007;
+ savingsAccount.setInterestRate(0.0007);
+
+ assertEquals(expected,savingsAccount.getInterestRate());
+ }
+}
\ No newline at end of file