diff --git a/.github/workflows/junit-test.yml b/.github/workflows/junit-test.yml new file mode 100644 index 0000000..cb1fa6a --- /dev/null +++ b/.github/workflows/junit-test.yml @@ -0,0 +1,31 @@ +name: JUnit tests + +on: + push: + branches: [ "test" ] + pull_request: + branches: [ "test" ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Set up JDK 11 + uses: actions/setup-java@v2 + with: + java-version: '11' + distribution: 'adopt' + + - name: Download JUnit and Hamcrest + run: | + wget https://repo1.maven.org/maven2/junit/junit/4.13.1/junit-4.13.1.jar + wget https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + - name: Compile Java files + run: | + javac -d bin -sourcepath src -cp junit-4.13.1.jar:hamcrest-core-1.3.jar -g src/test/*.java + - name: Run JUnit tests + run: | + java -cp bin:junit-4.13.1.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore test.TestSuite \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..5a375c7 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,28 @@ +{ + // Usare IntelliSense per informazioni sui possibili attributi. + // Al passaggio del mouse vengono visualizzate le descrizioni degli attributi esistenti. + // Per altre informazioni, visitare: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "ATMCaseStudy", + "request": "launch", + "mainClass": "code.Business_logic.ATMCaseStudy", + "projectName": "ATM_95d7eefc" + }, + { + "type": "java", + "name": "Current File", + "request": "launch", + "mainClass": "${file}" + }, + { + "type": "java", + "name": "ATMCaseStudy", + "request": "launch", + "mainClass": "code.ATMCaseStudy", + "projectName": "ATM_3b4aaa4e" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index e112a70..cd78e34 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,12 @@ { "java.project.sourcePaths": ["src"], "java.project.outputPath": "bin", - "java.project.referencedLibraries": [ - "lib/**/*.jar" - ] + "java.project.referencedLibraries": { + "include": [ + "lib/**/*.jar" + ] + }, + "files.exclude": { + "**/.git": false + } } diff --git a/README.md b/README.md index a75f02e..d80736d 100644 --- a/README.md +++ b/README.md @@ -23,3 +23,5 @@ Avviando il main() della classe ATMCaseStudy, viene richiesto l’inserimento de - Numero di conto = 98765, PIN = 56789 --------------------------------------------------------------------------- + +Conflict successfully resolved \ No newline at end of file diff --git a/bin/ATM.class b/bin/ATM.class deleted file mode 100644 index 76543bf..0000000 Binary files a/bin/ATM.class and /dev/null differ diff --git a/bin/ATMCaseStudy.class b/bin/ATMCaseStudy.class deleted file mode 100644 index 607c10d..0000000 Binary files a/bin/ATMCaseStudy.class and /dev/null differ diff --git a/bin/Account.class b/bin/Account.class deleted file mode 100644 index 5d2d636..0000000 Binary files a/bin/Account.class and /dev/null differ diff --git a/bin/BalanceInquiry.class b/bin/BalanceInquiry.class deleted file mode 100644 index 48f8e6a..0000000 Binary files a/bin/BalanceInquiry.class and /dev/null differ diff --git a/bin/BankDatabase.class b/bin/BankDatabase.class deleted file mode 100644 index 429aec1..0000000 Binary files a/bin/BankDatabase.class and /dev/null differ diff --git a/bin/CashDispenser.class b/bin/CashDispenser.class deleted file mode 100644 index b8cedba..0000000 Binary files a/bin/CashDispenser.class and /dev/null differ diff --git a/bin/Deposit.class b/bin/Deposit.class deleted file mode 100644 index 57b0c3f..0000000 Binary files a/bin/Deposit.class and /dev/null differ diff --git a/bin/DepositSlot.class b/bin/DepositSlot.class deleted file mode 100644 index a2664ad..0000000 Binary files a/bin/DepositSlot.class and /dev/null differ diff --git a/bin/Keypad.class b/bin/Keypad.class deleted file mode 100644 index 9b066e2..0000000 Binary files a/bin/Keypad.class and /dev/null differ diff --git a/bin/Screen.class b/bin/Screen.class deleted file mode 100644 index a036758..0000000 Binary files a/bin/Screen.class and /dev/null differ diff --git a/bin/Transaction.class b/bin/Transaction.class deleted file mode 100644 index 1330b55..0000000 Binary files a/bin/Transaction.class and /dev/null differ diff --git a/bin/Withdrawal.class b/bin/Withdrawal.class deleted file mode 100644 index 291d645..0000000 Binary files a/bin/Withdrawal.class and /dev/null differ diff --git a/bin/code/.gitignore b/bin/code/.gitignore new file mode 100644 index 0000000..3c9662c --- /dev/null +++ b/bin/code/.gitignore @@ -0,0 +1,2 @@ +/** +!.gitignore \ No newline at end of file diff --git a/componenti.txt b/componenti.txt new file mode 100644 index 0000000..e46e46f --- /dev/null +++ b/componenti.txt @@ -0,0 +1,3 @@ +Aya Benkirane 5338412 +Nicolò Aicardi 5198997 +Andrea Valentino Ricotti 5306194 \ No newline at end of file diff --git a/lib/annotations-13.0.jar b/lib/annotations-13.0.jar new file mode 100644 index 0000000..fb794be Binary files /dev/null and b/lib/annotations-13.0.jar differ diff --git a/lib/apiguardian-api-1.1.2.jar b/lib/apiguardian-api-1.1.2.jar new file mode 100644 index 0000000..2b678e1 Binary files /dev/null and b/lib/apiguardian-api-1.1.2.jar differ diff --git a/lib/core-0.5.1.jar b/lib/core-0.5.1.jar new file mode 100644 index 0000000..dfca974 Binary files /dev/null and b/lib/core-0.5.1.jar differ diff --git a/lib/hamcrest-core-1.3.jar b/lib/hamcrest-core-1.3.jar new file mode 100644 index 0000000..9d5fe16 Binary files /dev/null and b/lib/hamcrest-core-1.3.jar differ diff --git a/lib/junit-4.13.2.jar b/lib/junit-4.13.2.jar new file mode 100644 index 0000000..6da55d8 Binary files /dev/null and b/lib/junit-4.13.2.jar differ diff --git a/lib/junit-jupiter-api-5.8.2.jar b/lib/junit-jupiter-api-5.8.2.jar new file mode 100644 index 0000000..b8e3f68 Binary files /dev/null and b/lib/junit-jupiter-api-5.8.2.jar differ diff --git a/lib/junit-jupiter-engine-5.8.2.jar b/lib/junit-jupiter-engine-5.8.2.jar new file mode 100644 index 0000000..06b2212 Binary files /dev/null and b/lib/junit-jupiter-engine-5.8.2.jar differ diff --git a/lib/junit-jupiter-params-5.8.2.jar b/lib/junit-jupiter-params-5.8.2.jar new file mode 100644 index 0000000..78a12de Binary files /dev/null and b/lib/junit-jupiter-params-5.8.2.jar differ diff --git a/lib/junit-platform-commons-1.8.2.jar b/lib/junit-platform-commons-1.8.2.jar new file mode 100644 index 0000000..e0cf087 Binary files /dev/null and b/lib/junit-platform-commons-1.8.2.jar differ diff --git a/lib/junit-platform-engine-1.8.2.jar b/lib/junit-platform-engine-1.8.2.jar new file mode 100644 index 0000000..85bac8a Binary files /dev/null and b/lib/junit-platform-engine-1.8.2.jar differ diff --git a/lib/junit5-0.5.1.jar b/lib/junit5-0.5.1.jar new file mode 100644 index 0000000..5f0fd30 Binary files /dev/null and b/lib/junit5-0.5.1.jar differ diff --git a/lib/opentest4j-1.2.0.jar b/lib/opentest4j-1.2.0.jar new file mode 100644 index 0000000..d500636 Binary files /dev/null and b/lib/opentest4j-1.2.0.jar differ diff --git a/src/ATM.java b/src/code/Business_logic/ATM.java similarity index 97% rename from src/ATM.java rename to src/code/Business_logic/ATM.java index aa3d187..850e5ed 100644 --- a/src/ATM.java +++ b/src/code/Business_logic/ATM.java @@ -1,6 +1,14 @@ +package code.Business_logic; // ATM.java // Represents an automated teller machine +import code.Database.BankDatabase; +import code.GUI.BalanceInquiry; +import code.GUI.CashDispenser; +import code.GUI.DepositSlot; +import code.GUI.Keypad; +import code.GUI.Screen; + public class ATM { private boolean userAuthenticated; // whether user is authenticated diff --git a/src/ATMCaseStudy.java b/src/code/Business_logic/ATMCaseStudy.java similarity index 97% rename from src/ATMCaseStudy.java rename to src/code/Business_logic/ATMCaseStudy.java index b9033bd..7a4dc31 100644 --- a/src/ATMCaseStudy.java +++ b/src/code/Business_logic/ATMCaseStudy.java @@ -1,3 +1,4 @@ +package code.Business_logic; // ATMCaseStudy.java // Driver program for the ATM case study diff --git a/src/Deposit.java b/src/code/Business_logic/Deposit.java similarity index 92% rename from src/Deposit.java rename to src/code/Business_logic/Deposit.java index 916ef70..c192b73 100644 --- a/src/Deposit.java +++ b/src/code/Business_logic/Deposit.java @@ -1,9 +1,15 @@ +package code.Business_logic; // Deposit.java // Represents a deposit ATM transaction +import code.Database.BankDatabase; +import code.GUI.DepositSlot; +import code.GUI.Keypad; +import code.GUI.Screen; + public class Deposit extends Transaction { - private double amount; // amount to deposit + private Euro amount; // amount to deposit private Keypad keypad; // reference to keypad private DepositSlot depositSlot; // reference to deposit slot private final static int CANCELED = 0; // constant for cancel option @@ -27,10 +33,10 @@ public void execute() BankDatabase bankDatabase = getBankDatabase(); // get reference Screen screen = getScreen(); // get reference - amount = promptForDepositAmount(); // get deposit amount from user + amount = new Euro(promptForDepositAmount()); // get deposit amount from user // check whether user entered a deposit amount or canceled - if ( amount != CANCELED ) + if ( amount.getValore() != CANCELED ) { // request deposit envelope containing specified amount screen.displayMessage( diff --git a/src/code/Business_logic/Euro.java b/src/code/Business_logic/Euro.java new file mode 100644 index 0000000..6fabf01 --- /dev/null +++ b/src/code/Business_logic/Euro.java @@ -0,0 +1,58 @@ +package code.Business_logic; + +import java.util.Locale; + +public class Euro { + + private long valore; + + public Euro(long euro, long cent) { + if (euro >= 0) { + valore = euro*100 + cent; + } else { + valore = euro*100 - cent; + } + } + + public Euro(double d) { + valore = (long)(d*100); + } + + public long getValore() { + return valore; + } + + public Euro somma(Euro e) { + this.valore = this.valore + e.getValore(); + return this; + } + + public Euro sottrai(Euro e) { + this.valore = this.valore - e.getValore(); + return this; + } + + public boolean ugualeA(Euro e){ + if (valore == e.getValore()) + return true; + else return false; + } + + public boolean minoreDi(Euro e){ + if (valore <= e.getValore()) + return true; + else return false; + } + + public String stampa(){ + return String.format(Locale.US, "%.2f", (double)valore/100) + " euro"; + } + + public boolean equals(Object obj){ + if (obj == null || getClass() != obj.getClass()) { + return false; + } + + return this.valore == ((Euro) obj).valore; + } +} \ No newline at end of file diff --git a/src/Transaction.java b/src/code/Business_logic/Transaction.java similarity index 96% rename from src/Transaction.java rename to src/code/Business_logic/Transaction.java index 508fea8..5256dca 100644 --- a/src/Transaction.java +++ b/src/code/Business_logic/Transaction.java @@ -1,6 +1,10 @@ +package code.Business_logic; // Transaction.java // Abstract superclass Transaction represents an ATM transaction +import code.Database.BankDatabase; +import code.GUI.Screen; + public abstract class Transaction { private int accountNumber; // indicates account involved diff --git a/src/Withdrawal.java b/src/code/Business_logic/Withdrawal.java similarity index 92% rename from src/Withdrawal.java rename to src/code/Business_logic/Withdrawal.java index 6e0af62..fe282e1 100644 --- a/src/Withdrawal.java +++ b/src/code/Business_logic/Withdrawal.java @@ -1,9 +1,15 @@ +package code.Business_logic; // Withdrawal.java // Represents a withdrawal ATM transaction +import code.Database.BankDatabase; +import code.GUI.CashDispenser; +import code.GUI.Keypad; +import code.GUI.Screen; + public class Withdrawal extends Transaction { - private int amount; // amount to withdraw + private Euro amount; // amount to withdraw private Keypad keypad; // reference to keypad private CashDispenser cashDispenser; // reference to cash dispenser @@ -27,7 +33,7 @@ public Withdrawal( int userAccountNumber, Screen atmScreen, public void execute() { boolean cashDispensed = false; // cash was not dispensed yet - double availableBalance; // amount available for withdrawal + Euro availableBalance; // amount available for withdrawal // get references to bank database and screen BankDatabase bankDatabase = getBankDatabase(); @@ -37,17 +43,16 @@ public void execute() do { // obtain a chosen withdrawal amount from the user - amount = displayMenuOfAmounts(); + amount = new Euro(displayMenuOfAmounts(), 0); // check whether user chose a withdrawal amount or canceled - if ( amount != CANCELED ) + if ( amount.getValore() != CANCELED ) { // get available balance of account involved - availableBalance = - bankDatabase.getAvailableBalance( getAccountNumber() ); - + availableBalance = bankDatabase.getAvailableBalance( getAccountNumber() ); + // check whether the user has enough money in the account - if ( amount <= availableBalance ) + if ( amount.minoreDi(availableBalance)) { // check whether the cash dispenser has enough money if ( cashDispenser.isSufficientCashAvailable( amount ) ) diff --git a/src/Account.java b/src/code/Database/Account.java similarity index 74% rename from src/Account.java rename to src/code/Database/Account.java index c308eca..9758b26 100644 --- a/src/Account.java +++ b/src/code/Database/Account.java @@ -1,21 +1,24 @@ +package code.Database; // Account.java // Represents a bank account +import code.Business_logic.Euro; + public class Account { private int accountNumber; // account number private int pin; // PIN for authentication - private double availableBalance; // funds available for withdrawal - private double totalBalance; // funds available + pending deposits + private Euro availableBalance; // funds available for withdrawal + private Euro totalBalance; // funds available + pending deposits // Account constructor initializes attributes public Account( int theAccountNumber, int thePIN, - double theAvailableBalance, double theTotalBalance ) + double theAvailableBalance, double theTotalBalance )//account constructor still takes double { accountNumber = theAccountNumber; pin = thePIN; - availableBalance = theAvailableBalance; - totalBalance = theTotalBalance; + availableBalance = new Euro(theAvailableBalance); + totalBalance = new Euro(theTotalBalance); } // end Account constructor // determines whether a user-specified PIN matches PIN in Account @@ -28,28 +31,28 @@ public boolean validatePIN( int userPIN ) } // end method validatePIN // returns available balance - public double getAvailableBalance() + public Euro getAvailableBalance() { return availableBalance; } // end getAvailableBalance // returns the total balance - public double getTotalBalance() + public Euro getTotalBalance() { return totalBalance; } // end method getTotalBalance // credits an amount to the account - public void credit( double amount ) + public void credit( Euro amount ) { - totalBalance += amount; // add to total balance + totalBalance.somma(amount); // add to total balance } // end method credit // debits an amount from the account - public void debit( double amount ) + public void debit( Euro amount ) { - availableBalance -= amount; // subtract from available balance - totalBalance -= amount; // subtract from total balance + availableBalance.sottrai(amount); // subtract from available balance + totalBalance.sottrai(amount); // subtract from total balance } // end method debit // returns account number diff --git a/src/BankDatabase.java b/src/code/Database/BankDatabase.java similarity index 92% rename from src/BankDatabase.java rename to src/code/Database/BankDatabase.java index 3978497..3aad939 100644 --- a/src/BankDatabase.java +++ b/src/code/Database/BankDatabase.java @@ -1,6 +1,9 @@ +package code.Database; // BankDatabase.java // Represents the bank account information database +import code.Business_logic.Euro; + public class BankDatabase { private Account accounts[]; // array of Accounts @@ -42,25 +45,25 @@ public boolean authenticateUser( int userAccountNumber, int userPIN ) } // end method authenticateUser // return available balance of Account with specified account number - public double getAvailableBalance( int userAccountNumber ) + public Euro getAvailableBalance( int userAccountNumber ) { return getAccount( userAccountNumber ).getAvailableBalance(); } // end method getAvailableBalance // return total balance of Account with specified account number - public double getTotalBalance( int userAccountNumber ) + public Euro getTotalBalance( int userAccountNumber ) { return getAccount( userAccountNumber ).getTotalBalance(); } // end method getTotalBalance // credit an amount to Account with specified account number - public void credit( int userAccountNumber, double amount ) + public void credit( int userAccountNumber, Euro amount ) { getAccount( userAccountNumber ).credit( amount ); } // end method credit // debit an amount from of Account with specified account number - public void debit( int userAccountNumber, double amount ) + public void debit( int userAccountNumber, Euro amount ) { getAccount( userAccountNumber ).debit( amount ); } // end method debit diff --git a/src/BalanceInquiry.java b/src/code/GUI/BalanceInquiry.java similarity index 88% rename from src/BalanceInquiry.java rename to src/code/GUI/BalanceInquiry.java index d45fa6a..ac803e5 100644 --- a/src/BalanceInquiry.java +++ b/src/code/GUI/BalanceInquiry.java @@ -1,6 +1,11 @@ +package code.GUI; // BalanceInquiry.java // Represents a balance inquiry ATM transaction +import code.Business_logic.Euro; +import code.Business_logic.Transaction; +import code.Database.BankDatabase; + public class BalanceInquiry extends Transaction { // BalanceInquiry constructor @@ -18,19 +23,19 @@ public void execute() Screen screen = getScreen(); // get the available balance for the account involved - double availableBalance = + Euro availableBalance = bankDatabase.getAvailableBalance( getAccountNumber() ); // get the total balance for the account involved - double totalBalance = + Euro totalBalance = bankDatabase.getTotalBalance( getAccountNumber() ); // display the balance information on the screen screen.displayMessageLine( "\nBalance Information:" ); screen.displayMessage( " - Available balance: " ); - screen.displayDollarAmount( availableBalance ); + screen.displayDollarAmount( availableBalance); screen.displayMessage( "\n - Total balance: " ); - screen.displayDollarAmount( totalBalance ); + screen.displayDollarAmount( totalBalance); screen.displayMessageLine( "" ); } // end method execute } // end class BalanceInquiry diff --git a/src/CashDispenser.java b/src/code/GUI/CashDispenser.java similarity index 81% rename from src/CashDispenser.java rename to src/code/GUI/CashDispenser.java index b249faf..ccd24d1 100644 --- a/src/CashDispenser.java +++ b/src/code/GUI/CashDispenser.java @@ -1,11 +1,14 @@ +package code.GUI; // CashDispenser.java // Represents the cash dispenser of the ATM +import code.Business_logic.Euro; + public class CashDispenser { // the default initial number of bills in the cash dispenser - private final static int INITIAL_COUNT = 500; - private int count; // number of $20 bills remaining + private final static long INITIAL_COUNT = 500; + private long count; // number of $20 bills remaining // no-argument CashDispenser constructor initializes count to default public CashDispenser() @@ -14,16 +17,16 @@ public CashDispenser() } // end CashDispenser constructor // simulates dispensing of specified amount of cash - public void dispenseCash( int amount ) + public void dispenseCash( Euro amount ) { - int billsRequired = amount / 20; // number of $20 bills required + long billsRequired = amount.getValore() / 100 / 20; // number of $20 bills required count -= billsRequired; // update the count of bills } // end method dispenseCash // indicates whether cash dispenser can dispense desired amount - public boolean isSufficientCashAvailable( int amount ) + public boolean isSufficientCashAvailable( Euro amount ) { - int billsRequired = amount / 20; // number of $20 bills required + long billsRequired = amount.getValore() / 100 / 20; // number of $20 bills required if ( count >= billsRequired ) return true; // enough bills available diff --git a/src/DepositSlot.java b/src/code/GUI/DepositSlot.java similarity index 98% rename from src/DepositSlot.java rename to src/code/GUI/DepositSlot.java index 64e02c2..bde0339 100644 --- a/src/DepositSlot.java +++ b/src/code/GUI/DepositSlot.java @@ -1,3 +1,4 @@ +package code.GUI; // DepositSlot.java // Represents the deposit slot of the ATM diff --git a/src/Keypad.java b/src/code/GUI/Keypad.java similarity index 98% rename from src/Keypad.java rename to src/code/GUI/Keypad.java index cd035c7..f0f716c 100644 --- a/src/Keypad.java +++ b/src/code/GUI/Keypad.java @@ -1,3 +1,4 @@ +package code.GUI; // Keypad.java // Represents the keypad of the ATM import java.util.Scanner; // program uses Scanner to obtain user input diff --git a/src/Screen.java b/src/code/GUI/Screen.java similarity index 91% rename from src/Screen.java rename to src/code/GUI/Screen.java index 44d3f30..24d8edb 100644 --- a/src/Screen.java +++ b/src/code/GUI/Screen.java @@ -1,6 +1,9 @@ +package code.GUI; // Screen.java // Represents the screen of the ATM +import code.Business_logic.Euro; + public class Screen { // displays a message without a carriage return @@ -16,9 +19,9 @@ public void displayMessageLine( String message ) } // end method displayMessageLine // display a dollar amount - public void displayDollarAmount( double amount ) + public void displayDollarAmount( Euro amount ) { - System.out.printf( "$%,.2f", amount ); + System.out.printf( amount.stampa() ); } // end method displayDollarAmount } // end class Screen diff --git a/src/test/TestAccount.java b/src/test/TestAccount.java new file mode 100644 index 0000000..3a8ceb7 --- /dev/null +++ b/src/test/TestAccount.java @@ -0,0 +1,113 @@ +package test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import code.Business_logic.Euro; +import code.Database.Account; + +public class TestAccount { + + @Test + public void testValidatePIN() { + Account account = new Account(12345, 6789, 100.0, 150.0); + + assertTrue(account.validatePIN(6789)); + assertFalse(account.validatePIN(9999)); + } + + @Test + public void testGetAvailableBalance() { + Account account = new Account(12345, 6789, 100.0, 150.0); + + assertEquals(new Euro(100.0), account.getAvailableBalance()); + } + + @Test + public void testGetTotalBalance() { + Account account = new Account(12345, 6789, 100.0, 150.0); + + assertEquals(new Euro(150.0), account.getTotalBalance()); + } + + @Test + public void testCredit() { + Account account = new Account(12345, 6789, 100.0, 150.0); + + account.credit(new Euro(50.0)); + assertEquals(new Euro(200.0), account.getTotalBalance()); + } + + @Test + public void testDebit() { + Account account = new Account(12345, 6789, 100.0, 150.0); + + account.debit(new Euro(50.0)); + assertEquals(new Euro(50.0), account.getAvailableBalance()); + assertEquals(new Euro(100.0), account.getTotalBalance()); + } + + @Test + public void testGetAccountNumber() { + Account account = new Account(12345, 6789, 100.0, 150.0); + + assertEquals(12345, account.getAccountNumber()); + } + + @Test + public void testConstructor() { + Account account = new Account(98765, 4321, 75.0, 100.0); + + assertEquals(98765, account.getAccountNumber()); + assertTrue(account.validatePIN(4321)); + assertEquals(new Euro(75.0), account.getAvailableBalance()); + assertEquals(new Euro(100.0), account.getTotalBalance()); + } + + @Test + public void testCreditWithZeroAmount() { + Account account = new Account(11111, 9999, 50.0, 50.0); + + account.credit(new Euro(0.0)); + assertEquals(new Euro(50.0), account.getTotalBalance()); + } + + + @Test + public void testDebitWithZeroAmount() { + Account account = new Account(33333, 7777, 20.0, 20.0); + + // Debit with zero amount, balances should remain unchanged + account.debit(new Euro(0.0)); + + assertEquals(new Euro(20.0), account.getAvailableBalance()); + assertEquals(new Euro(20.0), account.getTotalBalance()); + } + + @Test + public void testMultipleCreditsAndDebits() { + Account account = new Account(44444, 6666, 200.0, 200.0); + + account.credit(new Euro(50.0)); + account.debit(new Euro(30.0)); + account.credit(new Euro(25.0)); + account.debit(new Euro(20.0)); + + assertEquals(new Euro(225.0), account.getTotalBalance()); + assertEquals(new Euro(150.0), account.getAvailableBalance()); + } + + + @ParameterizedTest + @CsvSource({"12345", "56498", "12458", "9987"}) + public void testGetAccountNumberParametrizzato(int accountNumber) { + Account account = new Account(accountNumber, 6789, 100.0, 150.0); + assertEquals(accountNumber, account.getAccountNumber()); + } + +} diff --git a/src/test/TestBankDatabase.java b/src/test/TestBankDatabase.java new file mode 100644 index 0000000..169bb87 --- /dev/null +++ b/src/test/TestBankDatabase.java @@ -0,0 +1,66 @@ +package test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import code.Business_logic.Euro; +import code.Database.BankDatabase; + +public class TestBankDatabase { + + @Test + public void testAuthenticateUser() { + BankDatabase bankDatabase = new BankDatabase(); + + assertTrue(bankDatabase.authenticateUser(12345, 54321)); // Valid account number and PIN + assertFalse(bankDatabase.authenticateUser(12345, 9999)); // Invalid PIN + assertFalse(bankDatabase.authenticateUser(99999, 54321)); // Invalid account number + } + + @Test + public void testGetAvailableBalance() { + BankDatabase bankDatabase = new BankDatabase(); + + assertEquals(new Euro(1000.0), bankDatabase.getAvailableBalance(12345)); + assertEquals(new Euro(200.0), bankDatabase.getAvailableBalance(98765)); + } + + @Test + public void testGetTotalBalance() { + BankDatabase bankDatabase = new BankDatabase(); + + assertEquals(new Euro(1200.0), bankDatabase.getTotalBalance(12345)); + assertEquals(new Euro(200.0), bankDatabase.getTotalBalance(98765)); + } + + @Test + public void testCredit() { + BankDatabase bankDatabase = new BankDatabase(); + bankDatabase.credit(12345, new Euro(500.00)); + + assertEquals(new Euro(1700.00), bankDatabase.getTotalBalance(12345)); + } + + @Test + public void testDebit() { + BankDatabase bankDatabase = new BankDatabase(); + bankDatabase.debit(12345, new Euro(200.00)); + + assertEquals(new Euro(800.00), bankDatabase.getAvailableBalance(12345)); + } + + + @ParameterizedTest + @CsvSource({"5.5", "0.85", "2056.23", "112.56"}) + public void testCreditParametrizzato(double credit) { + BankDatabase bankDatabase = new BankDatabase(); + bankDatabase.debit(12345, new Euro(credit)); + assertEquals(new Euro(1200.00 - credit), bankDatabase.getTotalBalance(12345)); + } + +} \ No newline at end of file diff --git a/src/test/TestEuro.java b/src/test/TestEuro.java new file mode 100644 index 0000000..a4f04df --- /dev/null +++ b/src/test/TestEuro.java @@ -0,0 +1,89 @@ +package test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import code.Business_logic.Euro; + +public class TestEuro { + @Test + public void testCostruttoreEuroPositivo() { + Euro euro = new Euro(5, 50); + assertEquals(550, euro.getValore()); + } + + @Test + public void testCostruttoreEuroNegativo() { + Euro euro = new Euro(-5, 50); + assertEquals(-550, euro.getValore()); + } + + @Test + public void testCostruttoreDouble() { + Euro euro = new Euro(7.25); + assertEquals(725, euro.getValore()); + } + + @Test + public void testSomma() { + Euro euro1 = new Euro(5, 50); + Euro euro2 = new Euro(3, 25); + Euro risultato = euro1.somma(euro2); + assertEquals(875, risultato.getValore()); + } + + @Test + public void testSottrai() { + Euro euro1 = new Euro(5, 50); + Euro euro2 = new Euro(3, 25); + Euro risultato = euro1.sottrai(euro2); + assertEquals(225, risultato.getValore()); + } + + @Test + public void testUgualeA() { + Euro euro1 = new Euro(5, 50); + Euro euro2 = new Euro(5, 50); + assertTrue(euro1.ugualeA(euro2)); + } + + @Test + public void testNonUgualeA() { + Euro euro1 = new Euro(5, 50); + Euro euro2 = new Euro(3, 25); + assertFalse(euro1.ugualeA(euro2)); + } + + @Test + public void testMinoreDi() { + Euro euro1 = new Euro(3, 50); + Euro euro2 = new Euro(5, 25); + assertTrue(euro1.minoreDi(euro2)); + } + + @Test + public void testNonMinoreDi() { + Euro euro1 = new Euro(5, 50); + Euro euro2 = new Euro(3, 25); + assertFalse(euro1.minoreDi(euro2)); + } + + @Test + public void testStampa() { + Euro euro = new Euro(5, 50); + assertEquals("5.50 euro", euro.stampa()); + } + + @ParameterizedTest + @CsvSource({"5,50,550", "0,20,20", "0,2,2", "7,72,772"}) + public void testCostruttoreEuroPositivoParametrizzato(int a, int b, int c) { + Euro euro = new Euro(a, b); + assertEquals(c, euro.getValore()); + } + +} diff --git a/src/test/TestSuite.java b/src/test/TestSuite.java new file mode 100644 index 0000000..99f6b3b --- /dev/null +++ b/src/test/TestSuite.java @@ -0,0 +1,15 @@ +package test; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + TestEuro.class, + TestAccount.class, + TestBankDatabase.class +}) + +public class TestSuite { + // questa classe non ha alcun corpo, funge da contenitore per i test +} \ No newline at end of file