From 8fb37439e2058999d32cabc9ac9eefa6f7557105 Mon Sep 17 00:00:00 2001 From: nikolakabasaj Date: Wed, 16 Mar 2022 09:28:44 +0100 Subject: [PATCH 1/4] Task done to expand code, refactor code and solve bugs that appear in classes. --- .idea/.gitignore | 3 + .idea/compiler.xml | 14 ++ .idea/jarRepositories.xml | 20 +++ .idea/misc.xml | 12 ++ .idea/runConfigurations.xml | 10 ++ .idea/uiDesigner.xml | 124 ++++++++++++++++++ .idea/vcs.xml | 6 + pom.xml | 38 ++++++ src/main/java/ch/engenius/bank/Account.java | 31 ----- .../java/ch/engenius/bank/Application.java | 12 ++ src/main/java/ch/engenius/bank/Bank.java | 18 --- .../java/ch/engenius/bank/BankRunner.java | 71 ---------- .../ch/engenius/bank/context/DataContext.java | 31 +++++ .../exception/AccountNotFoundException.java | 7 + .../java/ch/engenius/bank/model/Account.java | 14 ++ .../java/ch/engenius/bank/model/Bank.java | 26 ++++ .../bank/repository/AccountRepository.java | 25 ++++ .../bank/repository/BankRepository.java | 18 +++ .../ch/engenius/bank/runner/BankRunner.java | 48 +++++++ .../BankRunnerAccountHelper.java | 39 ++++++ .../BankRunnerSanityChecker.java | 47 +++++++ .../runner/runner_helper/BankRunnerTask.java | 50 +++++++ .../bank/service/account/AccountService.java | 13 ++ .../service/account/AccountServiceImpl.java | 69 ++++++++++ .../bank/service/bank/BankService.java | 9 ++ .../bank/service/bank/BankServiceImpl.java | 37 ++++++ .../ch/engenius/bank/BadBankUnitTests.java | 21 +++ .../ch/engenius/bank/BankRunnerUnitTest.java | 4 + src/test/java/ch/engenius/bank/TestData.java | 13 ++ .../ch/engenius/bank/bank/BankUnitTest.java | 75 +++++++++++ .../bank/context/DataContextUnitTest.java | 89 +++++++++++++ .../repository/AccountRepositoryUnitTest.java | 55 ++++++++ .../repository/BankRepositoryUnitTest.java | 33 +++++ .../bank/runner/BankRunnerUnitTest.java | 5 + .../BankRunnerAccountHelperUnitTest.java | 43 ++++++ .../BankRunnerSanityCheckerUnitTest.java | 16 +++ .../bank/service/AccountServiceUnitTest.java | 86 ++++++++++++ .../bank/service/BankServiceUnitTest.java | 43 ++++++ .../ch/engenius/bank/Application.class | Bin 0 -> 667 bytes .../engenius/bank/context/DataContext.class | Bin 0 -> 1385 bytes .../exception/AccountNotFoundException.class | Bin 0 -> 661 bytes .../ch/engenius/bank/model/Account.class | Bin 0 -> 568 bytes .../classes/ch/engenius/bank/model/Bank.class | Bin 0 -> 1261 bytes .../bank/repository/AccountRepository.class | Bin 0 -> 1047 bytes .../bank/repository/BankRepository.class | Bin 0 -> 781 bytes .../ch/engenius/bank/runner/BankRunner.class | Bin 0 -> 2019 bytes .../BankRunnerAccountHelper.class | Bin 0 -> 2096 bytes .../BankRunnerSanityChecker.class | Bin 0 -> 3835 bytes .../runner/runner_helper/BankRunnerTask.class | Bin 0 -> 2046 bytes .../bank/service/account/AccountService.class | Bin 0 -> 531 bytes .../service/account/AccountServiceImpl.class | Bin 0 -> 3038 bytes .../bank/service/bank/BankService.class | Bin 0 -> 189 bytes .../bank/service/bank/BankServiceImpl.class | Bin 0 -> 1691 bytes .../ch/engenius/bank/BadBankUnitTests.class | Bin 0 -> 852 bytes .../ch/engenius/bank/BankRunnerUnitTest.class | Bin 0 -> 313 bytes .../ch/engenius/bank/TestData.class | Bin 0 -> 709 bytes .../ch/engenius/bank/bank/BankUnitTest.class | Bin 0 -> 4072 bytes .../bank/context/DataContextUnitTest.class | Bin 0 -> 4597 bytes .../AccountRepositoryUnitTest.class | Bin 0 -> 3767 bytes .../repository/BankRepositoryUnitTest.class | Bin 0 -> 1722 bytes .../bank/runner/BankRunnerUnitTest.class | Bin 0 -> 327 bytes .../BankRunnerAccountHelperUnitTest.class | Bin 0 -> 2496 bytes .../BankRunnerSanityCheckerUnitTest.class | Bin 0 -> 861 bytes .../bank/service/AccountServiceUnitTest.class | Bin 0 -> 4891 bytes .../bank/service/BankServiceUnitTest.class | Bin 0 -> 2434 bytes 65 files changed, 1155 insertions(+), 120 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml delete mode 100644 src/main/java/ch/engenius/bank/Account.java create mode 100644 src/main/java/ch/engenius/bank/Application.java delete mode 100644 src/main/java/ch/engenius/bank/Bank.java delete mode 100644 src/main/java/ch/engenius/bank/BankRunner.java create mode 100644 src/main/java/ch/engenius/bank/context/DataContext.java create mode 100644 src/main/java/ch/engenius/bank/exception/AccountNotFoundException.java create mode 100644 src/main/java/ch/engenius/bank/model/Account.java create mode 100644 src/main/java/ch/engenius/bank/model/Bank.java create mode 100644 src/main/java/ch/engenius/bank/repository/AccountRepository.java create mode 100644 src/main/java/ch/engenius/bank/repository/BankRepository.java create mode 100644 src/main/java/ch/engenius/bank/runner/BankRunner.java create mode 100644 src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.java create mode 100644 src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityChecker.java create mode 100644 src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerTask.java create mode 100644 src/main/java/ch/engenius/bank/service/account/AccountService.java create mode 100644 src/main/java/ch/engenius/bank/service/account/AccountServiceImpl.java create mode 100644 src/main/java/ch/engenius/bank/service/bank/BankService.java create mode 100644 src/main/java/ch/engenius/bank/service/bank/BankServiceImpl.java create mode 100644 src/test/java/ch/engenius/bank/BadBankUnitTests.java create mode 100644 src/test/java/ch/engenius/bank/BankRunnerUnitTest.java create mode 100644 src/test/java/ch/engenius/bank/TestData.java create mode 100644 src/test/java/ch/engenius/bank/bank/BankUnitTest.java create mode 100644 src/test/java/ch/engenius/bank/context/DataContextUnitTest.java create mode 100644 src/test/java/ch/engenius/bank/repository/AccountRepositoryUnitTest.java create mode 100644 src/test/java/ch/engenius/bank/repository/BankRepositoryUnitTest.java create mode 100644 src/test/java/ch/engenius/bank/runner/BankRunnerUnitTest.java create mode 100644 src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.java create mode 100644 src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.java create mode 100644 src/test/java/ch/engenius/bank/service/AccountServiceUnitTest.java create mode 100644 src/test/java/ch/engenius/bank/service/BankServiceUnitTest.java create mode 100644 target/classes/ch/engenius/bank/Application.class create mode 100644 target/classes/ch/engenius/bank/context/DataContext.class create mode 100644 target/classes/ch/engenius/bank/exception/AccountNotFoundException.class create mode 100644 target/classes/ch/engenius/bank/model/Account.class create mode 100644 target/classes/ch/engenius/bank/model/Bank.class create mode 100644 target/classes/ch/engenius/bank/repository/AccountRepository.class create mode 100644 target/classes/ch/engenius/bank/repository/BankRepository.class create mode 100644 target/classes/ch/engenius/bank/runner/BankRunner.class create mode 100644 target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.class create mode 100644 target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerSanityChecker.class create mode 100644 target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerTask.class create mode 100644 target/classes/ch/engenius/bank/service/account/AccountService.class create mode 100644 target/classes/ch/engenius/bank/service/account/AccountServiceImpl.class create mode 100644 target/classes/ch/engenius/bank/service/bank/BankService.class create mode 100644 target/classes/ch/engenius/bank/service/bank/BankServiceImpl.class create mode 100644 target/test-classes/ch/engenius/bank/BadBankUnitTests.class create mode 100644 target/test-classes/ch/engenius/bank/BankRunnerUnitTest.class create mode 100644 target/test-classes/ch/engenius/bank/TestData.class create mode 100644 target/test-classes/ch/engenius/bank/bank/BankUnitTest.class create mode 100644 target/test-classes/ch/engenius/bank/context/DataContextUnitTest.class create mode 100644 target/test-classes/ch/engenius/bank/repository/AccountRepositoryUnitTest.class create mode 100644 target/test-classes/ch/engenius/bank/repository/BankRepositoryUnitTest.class create mode 100644 target/test-classes/ch/engenius/bank/runner/BankRunnerUnitTest.class create mode 100644 target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.class create mode 100644 target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.class create mode 100644 target/test-classes/ch/engenius/bank/service/AccountServiceUnitTest.class create mode 100644 target/test-classes/ch/engenius/bank/service/BankServiceUnitTest.class diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..a84a538 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..242782f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2ca15ec..4235c1f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,44 @@ ch.engenius accounts 1.0-SNAPSHOT + + + org.projectlombok + lombok + 1.18.22 + provided + + + + org.springframework + spring-context + 5.3.16 + + + junit + junit + 4.10 + test + + + org.mockito + mockito-junit-jupiter + 3.6.0 + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + \ No newline at end of file diff --git a/src/main/java/ch/engenius/bank/Account.java b/src/main/java/ch/engenius/bank/Account.java deleted file mode 100644 index b9979cb..0000000 --- a/src/main/java/ch/engenius/bank/Account.java +++ /dev/null @@ -1,31 +0,0 @@ -package ch.engenius.bank; - -import java.math.BigDecimal; - -public class Account { - private double money; - - public void withdraw(double amount) { - if ((money - amount) < 0) { - throw new IllegalStateException("not enough credits on account"); - } - setMoney(money - amount); - - } - - public void deposit(double amount) { - setMoney(money + amount); - } - - public double getMoney() { - return money; - } - - public void setMoney(double money) { - this.money = money; - } - - public BigDecimal getMoneyAsBigDecimal() { - return BigDecimal.valueOf(money); - } -} diff --git a/src/main/java/ch/engenius/bank/Application.java b/src/main/java/ch/engenius/bank/Application.java new file mode 100644 index 0000000..38da260 --- /dev/null +++ b/src/main/java/ch/engenius/bank/Application.java @@ -0,0 +1,12 @@ +package ch.engenius.bank; + +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.runner.BankRunner; + +public class Application { + + public static void main(String[] args) throws AccountNotFoundException, InterruptedException { + BankRunner runner = new BankRunner(); + runner.run(); + } +} diff --git a/src/main/java/ch/engenius/bank/Bank.java b/src/main/java/ch/engenius/bank/Bank.java deleted file mode 100644 index 571ebc7..0000000 --- a/src/main/java/ch/engenius/bank/Bank.java +++ /dev/null @@ -1,18 +0,0 @@ -package ch.engenius.bank; - -import java.util.HashMap; - -public class Bank { - private HashMap accounts = new HashMap<>(); - - public Account registerAccount(int accountNumber, int amount) { - Account account = new Account(); - account.setMoney(amount); - accounts.put(accountNumber, account); - return account; - } - - public Account getAccount( int number) { - return accounts.get(number); - } -} diff --git a/src/main/java/ch/engenius/bank/BankRunner.java b/src/main/java/ch/engenius/bank/BankRunner.java deleted file mode 100644 index 10b30fd..0000000 --- a/src/main/java/ch/engenius/bank/BankRunner.java +++ /dev/null @@ -1,71 +0,0 @@ -package ch.engenius.bank; - -import java.math.BigDecimal; -import java.util.Random; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.stream.IntStream; - -public class BankRunner { - - private static final ExecutorService executor = Executors.newFixedThreadPool(8); - - private final Random random = new Random(43); - private final Bank bank = new Bank(); - - - public static void main(String[] args) { - BankRunner runner = new BankRunner(); - int accounts = 100; - int defaultDeposit = 1000; - int iterations = 10000; - runner.registerAccounts(accounts, defaultDeposit); - runner.sanityCheck(accounts, accounts*defaultDeposit); - runner.runBank(iterations, accounts); - runner.sanityCheck(accounts, accounts*defaultDeposit); - - } - - private void runBank(int iterations, int maxAccount) { - for (int i =0; i< iterations; i++ ) { - executor.submit( ()-> runRandomOperation(maxAccount)); - } - try { - executor.shutdown(); - executor.awaitTermination(100,TimeUnit.SECONDS); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - private void runRandomOperation(int maxAccount) { - double transfer = random.nextDouble()*100.0; - int accountInNumber = random.nextInt(maxAccount); - int accountOutNumber = random.nextInt(maxAccount); - Account accIn =bank.getAccount(accountInNumber); - Account accOut =bank.getAccount(accountOutNumber); - accIn.deposit(transfer); - accOut.withdraw(transfer); - } - - private void registerAccounts(int number, int defaultMoney) { - for ( int i = 0; i < number; i++) { - bank.registerAccount(i, defaultMoney); - } - } - - private void sanityCheck( int accountMaxNumber, int totalExpectedMoney) { - BigDecimal sum = IntStream.range(0, accountMaxNumber) - .mapToObj( bank::getAccount) - .map ( Account::getMoneyAsBigDecimal) - .reduce( BigDecimal.ZERO, BigDecimal::add); - - if ( sum.intValue() != totalExpectedMoney) { - throw new IllegalStateException("we got "+ sum + " != " + totalExpectedMoney +" (expected)"); - } - System.out.println("sanity check OK"); - } - - -} diff --git a/src/main/java/ch/engenius/bank/context/DataContext.java b/src/main/java/ch/engenius/bank/context/DataContext.java new file mode 100644 index 0000000..b498e40 --- /dev/null +++ b/src/main/java/ch/engenius/bank/context/DataContext.java @@ -0,0 +1,31 @@ +package ch.engenius.bank.context; + +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; +import ch.engenius.bank.model.Bank; +import lombok.Getter; + +import java.util.HashMap; + +@Getter +public class DataContext { + private final Bank bank; + + + public DataContext() { + bank = new Bank(); + } + + public Account getAccount(int number) throws AccountNotFoundException { + return bank.getAccount(number); + } + + public HashMap getAllAccounts() { + return bank.getAllAccounts(); + } + + public Account saveAccount(int number, Account account) { + bank.getAccounts().put(number, account); + return account; + } +} diff --git a/src/main/java/ch/engenius/bank/exception/AccountNotFoundException.java b/src/main/java/ch/engenius/bank/exception/AccountNotFoundException.java new file mode 100644 index 0000000..f12e478 --- /dev/null +++ b/src/main/java/ch/engenius/bank/exception/AccountNotFoundException.java @@ -0,0 +1,7 @@ +package ch.engenius.bank.exception; + +public class AccountNotFoundException extends Exception { + public AccountNotFoundException(int accountNumber) { + super(String.format("Account with id %d cannot be found!", accountNumber)); + } +} diff --git a/src/main/java/ch/engenius/bank/model/Account.java b/src/main/java/ch/engenius/bank/model/Account.java new file mode 100644 index 0000000..fc66294 --- /dev/null +++ b/src/main/java/ch/engenius/bank/model/Account.java @@ -0,0 +1,14 @@ +package ch.engenius.bank.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; + +@AllArgsConstructor +@Getter +@Setter +public class Account { + private BigDecimal money; +} diff --git a/src/main/java/ch/engenius/bank/model/Bank.java b/src/main/java/ch/engenius/bank/model/Bank.java new file mode 100644 index 0000000..6211e15 --- /dev/null +++ b/src/main/java/ch/engenius/bank/model/Bank.java @@ -0,0 +1,26 @@ +package ch.engenius.bank.model; + +import ch.engenius.bank.exception.AccountNotFoundException; +import lombok.Getter; + +import java.util.HashMap; + +@Getter +public class Bank { + private HashMap accounts; + + public Bank() { + accounts = new HashMap<>(); + } + + public Account getAccount( int number) throws AccountNotFoundException { + Account account = accounts.get(number); + if(account == null) + throw new AccountNotFoundException(number); + return account; + } + + public HashMap getAllAccounts() { + return accounts; + } +} diff --git a/src/main/java/ch/engenius/bank/repository/AccountRepository.java b/src/main/java/ch/engenius/bank/repository/AccountRepository.java new file mode 100644 index 0000000..7c704d1 --- /dev/null +++ b/src/main/java/ch/engenius/bank/repository/AccountRepository.java @@ -0,0 +1,25 @@ +package ch.engenius.bank.repository; + +import ch.engenius.bank.context.DataContext; +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; +import org.springframework.stereotype.Component; + +import java.util.HashMap; + +@Component +public class AccountRepository { + private DataContext dataContext; + + public AccountRepository(DataContext dataContext) { + this.dataContext = dataContext; + } + + public Account getAccount(int accountNumber) throws AccountNotFoundException { + return dataContext.getAccount(accountNumber); + } + + public HashMap getAllAccounts() { + return dataContext.getAllAccounts(); + } +} diff --git a/src/main/java/ch/engenius/bank/repository/BankRepository.java b/src/main/java/ch/engenius/bank/repository/BankRepository.java new file mode 100644 index 0000000..938b15b --- /dev/null +++ b/src/main/java/ch/engenius/bank/repository/BankRepository.java @@ -0,0 +1,18 @@ +package ch.engenius.bank.repository; + +import ch.engenius.bank.context.DataContext; +import ch.engenius.bank.model.Account; + +public class BankRepository { + private DataContext dataContext; + + public BankRepository(DataContext dataContext) { + this.dataContext = dataContext; + } + + public Account saveAccount(int accountNumber, Account account) { + Account savedAccount = dataContext.saveAccount(accountNumber, account); + return savedAccount; + } + +} diff --git a/src/main/java/ch/engenius/bank/runner/BankRunner.java b/src/main/java/ch/engenius/bank/runner/BankRunner.java new file mode 100644 index 0000000..7ab9e66 --- /dev/null +++ b/src/main/java/ch/engenius/bank/runner/BankRunner.java @@ -0,0 +1,48 @@ +package ch.engenius.bank.runner; + +import ch.engenius.bank.context.DataContext; +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.runner.runner_helper.BankRunnerAccountHelper; +import ch.engenius.bank.runner.runner_helper.BankRunnerSanityChecker; + +import java.math.BigDecimal; + +public class BankRunner { + private final BankRunnerAccountHelper bankRunnerAccountHelper; + private final BankRunnerSanityChecker sanityChecker; + + private final DataContext dataContext; + + private final int ACCOUNTS_NUM = 100; + private final int ITERATIONS = 10000; + private final int DEFAULT_DEPOSIT = 1000; + + public BankRunner() { + dataContext = new DataContext(); + bankRunnerAccountHelper = new BankRunnerAccountHelper(dataContext); + sanityChecker = new BankRunnerSanityChecker(dataContext); + } + + public void run() throws AccountNotFoundException, InterruptedException { + BigDecimal defaultDeposit = BigDecimal.valueOf(DEFAULT_DEPOSIT); + BigDecimal totalDeposit = defaultDeposit.multiply(BigDecimal.valueOf(ACCOUNTS_NUM)); + + registerAccounts(defaultDeposit); + sanityCheck(totalDeposit); + runBank(); + sanityCheck(totalDeposit); + } + + private void runBank() throws InterruptedException { + bankRunnerAccountHelper.runBank(ITERATIONS, ACCOUNTS_NUM); + } + + private void registerAccounts(BigDecimal defaultAccountMoney) { + bankRunnerAccountHelper.registerAccounts(ACCOUNTS_NUM, defaultAccountMoney); + } + + private void sanityCheck(BigDecimal totalExpectedSum) throws AccountNotFoundException { + sanityChecker.sanityCheck(ACCOUNTS_NUM, totalExpectedSum); + } + +} diff --git a/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.java b/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.java new file mode 100644 index 0000000..1df2126 --- /dev/null +++ b/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.java @@ -0,0 +1,39 @@ +package ch.engenius.bank.runner.runner_helper; + +import ch.engenius.bank.context.DataContext; +import ch.engenius.bank.service.account.AccountService; +import ch.engenius.bank.service.account.AccountServiceImpl; +import ch.engenius.bank.service.bank.BankService; +import ch.engenius.bank.service.bank.BankServiceImpl; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.*; + +public class BankRunnerAccountHelper { + private final BankService bankService; + private final AccountService accountService; + + private static final ExecutorService executor = Executors.newFixedThreadPool(8); + + public BankRunnerAccountHelper(DataContext dataContext) { + this.bankService = new BankServiceImpl(dataContext); + this.accountService = new AccountServiceImpl(dataContext); + } + + public void runBank(int iterations, int maxAccount) throws InterruptedException { + List> tasks = new ArrayList<>(); + for (int i = 0; i < iterations; i++) { + tasks.add(new BankRunnerTask(accountService, maxAccount)); + } + executor.invokeAll(tasks); + executor.shutdown(); + } + + + public void registerAccounts(int number, BigDecimal defaultMoney) { + bankService.registerAccounts(number, defaultMoney); + } + +} diff --git a/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityChecker.java b/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityChecker.java new file mode 100644 index 0000000..93e4575 --- /dev/null +++ b/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityChecker.java @@ -0,0 +1,47 @@ +package ch.engenius.bank.runner.runner_helper; + +import ch.engenius.bank.context.DataContext; +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; +import ch.engenius.bank.service.account.AccountService; +import ch.engenius.bank.service.account.AccountServiceImpl; + +import java.math.BigDecimal; +import java.util.stream.IntStream; + +public class BankRunnerSanityChecker { + private final AccountService accountService; + + public BankRunnerSanityChecker( + DataContext dataContext) { + this.accountService = new AccountServiceImpl(dataContext); + } + + public void sanityCheck(int accountMaxNumber, BigDecimal totalExpectedSum) throws AccountNotFoundException { + BigDecimal totalSum = calculateAccountsMoneySum(accountMaxNumber); + checkIfSumAsExpected(totalSum, totalExpectedSum); + System.out.println("sanity check OK"); + } + + private void checkIfSumAsExpected(BigDecimal sum, BigDecimal totalExpectedMoney) { + if (sum.compareTo(totalExpectedMoney) != 0) { + throw new IllegalStateException("we got "+ sum + " != " + totalExpectedMoney +" (expected)"); + } + } + + private BigDecimal calculateAccountsMoneySum(int accountMaxNumber) throws AccountNotFoundException { + return IntStream.range(0, accountMaxNumber) + .mapToObj(this::getAccount) + .map ( Account::getMoney) + .reduce( BigDecimal.ZERO, BigDecimal::add); + } + + private Account getAccount(int accountNumber) { + try { + return accountService.getAccount(accountNumber); + } catch (AccountNotFoundException e) { + e.printStackTrace(); + } + return new Account(null); + } +} diff --git a/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerTask.java b/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerTask.java new file mode 100644 index 0000000..898c2a5 --- /dev/null +++ b/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerTask.java @@ -0,0 +1,50 @@ +package ch.engenius.bank.runner.runner_helper; + +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.service.account.AccountService; + +import java.math.BigDecimal; +import java.util.Random; +import java.util.concurrent.Callable; + + +public class BankRunnerTask implements Callable { + private final AccountService accountService; + + private final Random random; + private int maxAccount; + + + public BankRunnerTask( + AccountService accountService, + int maxAccount) { + this.random = new Random(43); + this.accountService = accountService; + this.maxAccount = maxAccount; + } + + @Override + public Void call() throws Exception { + tryRunningRandomOperation(this.maxAccount); + return null; + } + + private void tryRunningRandomOperation(int maxAccount) { + try { + runRandomOperation(maxAccount); + } catch (InterruptedException | AccountNotFoundException e) { + e.printStackTrace(); + } + } + + private void runRandomOperation(int maxAccount) throws InterruptedException, AccountNotFoundException { + BigDecimal transferAmount = BigDecimal.valueOf(random.nextDouble()*100.0); + int accountInNumber = random.nextInt(maxAccount); + int accountOutNumber = random.nextInt(maxAccount); + makeTransaction(accountInNumber, accountOutNumber, transferAmount); + } + + private void makeTransaction(int accountInNumber, int accountOutNumber, BigDecimal transferAmount) throws InterruptedException, AccountNotFoundException { + accountService.makeTransaction(accountInNumber, accountOutNumber, transferAmount); + } +} diff --git a/src/main/java/ch/engenius/bank/service/account/AccountService.java b/src/main/java/ch/engenius/bank/service/account/AccountService.java new file mode 100644 index 0000000..593a5ff --- /dev/null +++ b/src/main/java/ch/engenius/bank/service/account/AccountService.java @@ -0,0 +1,13 @@ +package ch.engenius.bank.service.account; + +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; + +import java.math.BigDecimal; +import java.util.HashMap; + +public interface AccountService { + Account getAccount(int accountNumber) throws AccountNotFoundException; + void makeTransaction(int accountIn, int accountOut, BigDecimal amount) throws AccountNotFoundException, InterruptedException; + HashMap getAllAccounts(); +} diff --git a/src/main/java/ch/engenius/bank/service/account/AccountServiceImpl.java b/src/main/java/ch/engenius/bank/service/account/AccountServiceImpl.java new file mode 100644 index 0000000..96760ea --- /dev/null +++ b/src/main/java/ch/engenius/bank/service/account/AccountServiceImpl.java @@ -0,0 +1,69 @@ +package ch.engenius.bank.service.account; + +import ch.engenius.bank.context.DataContext; +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; +import ch.engenius.bank.repository.AccountRepository; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.concurrent.locks.ReentrantLock; + +public class AccountServiceImpl implements AccountService { + private final AccountRepository accountRepository; + + private ReentrantLock lock; + + public AccountServiceImpl(DataContext dataContext) { + accountRepository = new AccountRepository(dataContext); + lock = new ReentrantLock(); + } + + public void makeTransaction(int accountIn, int accountOut, BigDecimal amount) throws AccountNotFoundException { + lock.lock(); + try { + withdraw(accountOut, amount); + deposit(accountIn, amount); + } finally { + lock.unlock(); + } + } + + private void withdraw(int accountNumber, BigDecimal withdrawAmount) throws AccountNotFoundException { + Account account = getAccount(accountNumber); + checkIfHasEnoughMoney(accountNumber, withdrawAmount); + + BigDecimal newAmount = account.getMoney().subtract(withdrawAmount); + setMoney(accountNumber, newAmount); + } + + private void deposit(int accountNumber, BigDecimal depositAmount) throws AccountNotFoundException { + Account account = getAccount(accountNumber); + BigDecimal newAmount = account.getMoney().add(depositAmount); + setMoney(accountNumber, newAmount); + } + + public Account getAccount(int number) throws AccountNotFoundException { + return accountRepository.getAccount(number); + } + + public HashMap getAllAccounts() { + return accountRepository.getAllAccounts(); + } + + public void setMoney(int accountNumber, BigDecimal amount) throws AccountNotFoundException { + Account account = getAccount(accountNumber); + account.setMoney(amount); + } + + private boolean hasEnoughMoney(int accountNumber, BigDecimal withdrawAmount) throws AccountNotFoundException { + Account account = getAccount(accountNumber); + BigDecimal difference = account.getMoney().subtract(withdrawAmount); + return difference.compareTo(BigDecimal.ZERO) > 0; + } + + private void checkIfHasEnoughMoney(int accountNumber, BigDecimal withdrawAmount) throws AccountNotFoundException { + if (!hasEnoughMoney(accountNumber, withdrawAmount)) + throw new IllegalStateException("not enough credits on account"); + } +} diff --git a/src/main/java/ch/engenius/bank/service/bank/BankService.java b/src/main/java/ch/engenius/bank/service/bank/BankService.java new file mode 100644 index 0000000..a5a070e --- /dev/null +++ b/src/main/java/ch/engenius/bank/service/bank/BankService.java @@ -0,0 +1,9 @@ +package ch.engenius.bank.service.bank; + +import java.math.BigDecimal; + + +public interface BankService { + void registerAccounts(int number, BigDecimal defaultMoney); + +} diff --git a/src/main/java/ch/engenius/bank/service/bank/BankServiceImpl.java b/src/main/java/ch/engenius/bank/service/bank/BankServiceImpl.java new file mode 100644 index 0000000..2b6823a --- /dev/null +++ b/src/main/java/ch/engenius/bank/service/bank/BankServiceImpl.java @@ -0,0 +1,37 @@ +package ch.engenius.bank.service.bank; + +import ch.engenius.bank.context.DataContext; +import ch.engenius.bank.model.Account; +import ch.engenius.bank.repository.BankRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; + +@RequiredArgsConstructor +@Component +public class BankServiceImpl implements BankService { + private final BankRepository bankRepository; + + + public BankServiceImpl(DataContext dataContext) { + bankRepository = new BankRepository(dataContext); + } + + public void registerAccounts(int number, BigDecimal defaultMoney) { + for ( int i = 0; i < number; i++) { + registerAccount(i, defaultMoney); + } + } + + private Account registerAccount(int accountNumber, BigDecimal amount) { + Account account = new Account(amount); + saveAccount(accountNumber, account); + return account; + } + + private void saveAccount(int accountNumber, Account account) { + bankRepository.saveAccount(accountNumber, account); + } + +} diff --git a/src/test/java/ch/engenius/bank/BadBankUnitTests.java b/src/test/java/ch/engenius/bank/BadBankUnitTests.java new file mode 100644 index 0000000..1e23d84 --- /dev/null +++ b/src/test/java/ch/engenius/bank/BadBankUnitTests.java @@ -0,0 +1,21 @@ +package ch.engenius.bank; + + +import ch.engenius.bank.bank.BankUnitTest; +import ch.engenius.bank.repository.AccountRepositoryUnitTest; +import ch.engenius.bank.repository.BankRepositoryUnitTest; +import ch.engenius.bank.service.AccountServiceUnitTest; +import ch.engenius.bank.service.BankServiceUnitTest; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + BankUnitTest.class, + AccountRepositoryUnitTest.class, + BankRepositoryUnitTest.class, + AccountServiceUnitTest.class, + BankServiceUnitTest.class, +}) +public class BadBankUnitTests { +} diff --git a/src/test/java/ch/engenius/bank/BankRunnerUnitTest.java b/src/test/java/ch/engenius/bank/BankRunnerUnitTest.java new file mode 100644 index 0000000..08e7ecf --- /dev/null +++ b/src/test/java/ch/engenius/bank/BankRunnerUnitTest.java @@ -0,0 +1,4 @@ +package ch.engenius.bank; + +public class BankRunnerUnitTest { +} diff --git a/src/test/java/ch/engenius/bank/TestData.java b/src/test/java/ch/engenius/bank/TestData.java new file mode 100644 index 0000000..d3f601d --- /dev/null +++ b/src/test/java/ch/engenius/bank/TestData.java @@ -0,0 +1,13 @@ +package ch.engenius.bank; + +public class TestData { + public static final int ACCOUNTS_NUM = 100; + public static int ITERATIONS = 10000; + public static int DEFAULT_DEPOSIT = 1000; + + public static final int EXISTING_ACCOUNT_NUMBER = 1; + public static final int EXISTING_ACCOUNT_NUMBER_2 = 2; + public static final int NON_EXISTING_ACCOUNT_NUMBER = 200; + public static final int VALID_ACCOUNT_NUMBER = 10; + public static final int VALID_ACCOUNT_NUMBER_2 = 20; +} diff --git a/src/test/java/ch/engenius/bank/bank/BankUnitTest.java b/src/test/java/ch/engenius/bank/bank/BankUnitTest.java new file mode 100644 index 0000000..b4955c3 --- /dev/null +++ b/src/test/java/ch/engenius/bank/bank/BankUnitTest.java @@ -0,0 +1,75 @@ +package ch.engenius.bank.bank; + +import ch.engenius.bank.TestData; +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; +import ch.engenius.bank.model.Bank; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.math.BigDecimal; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.BDDMockito.given; + +public class BankUnitTest { + private final Bank bank = + Mockito.mock(Bank.class); + + + private HashMap getBankAccounts() { + HashMap accounts = new HashMap<>(); + for (int i = 0; i < TestData.ACCOUNTS_NUM; i++) { + accounts.put(i, new Account(BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT))); + } + return accounts; + } + + @Test + public void givenEmptyBankAccountsThenGetAccountsWillReturnEmptyMap() { + given(bank.getAccounts()).willReturn(new HashMap<>()); + + HashMap accounts = bank.getAccounts(); + + assertEquals(0, accounts.size()); + } + + @Test + public void givenBankAccountsThenGetAccountsWillReturnMap() { + given(bank.getAccounts()).willReturn(getBankAccounts()); + + HashMap accounts = bank.getAccounts(); + + assertEquals(TestData.ACCOUNTS_NUM, accounts.size()); + } + + @Test + public void givenInvalidAccountNumberThenGetAccountWillThrowException() throws AccountNotFoundException { + given(bank.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)).willThrow(AccountNotFoundException.class); + + assertThrows(AccountNotFoundException.class, () -> bank.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)); + } + + @Test + public void givenValidAccountNumberThenGetAccountWillReturnAccount() throws AccountNotFoundException { + Account account = new Account(BigDecimal.valueOf(100)); + given(bank.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account); + + Account result = bank.getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + + assertNotNull(account); + assertEquals(result.getMoney(), account.getMoney()); + } + + @Test + public void givenGetAllAccountsThenWillReturnAllAccounts() { + HashMap accounts = getBankAccounts(); + given(bank.getAllAccounts()).willReturn(accounts); + + HashMap result = bank.getAllAccounts(); + + assertEquals(accounts.size(), result.size()); + } +} diff --git a/src/test/java/ch/engenius/bank/context/DataContextUnitTest.java b/src/test/java/ch/engenius/bank/context/DataContextUnitTest.java new file mode 100644 index 0000000..72023b5 --- /dev/null +++ b/src/test/java/ch/engenius/bank/context/DataContextUnitTest.java @@ -0,0 +1,89 @@ +package ch.engenius.bank.context; + +import ch.engenius.bank.TestData; +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.math.BigDecimal; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; + +public class DataContextUnitTest { + private final DataContext dataContext = + Mockito.mock(DataContext.class); + + + private HashMap getBankAccounts() { + HashMap accounts = new HashMap<>(); + for (int i = 0; i < TestData.ACCOUNTS_NUM; i++) { + accounts.put(i, new Account(BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT))); + } + return accounts; + } + + @Test + public void givenEmptyBankAccountsThenGetAccountsWillReturnEmptyMap() { + given(dataContext.getAllAccounts()).willReturn(new HashMap<>()); + + HashMap accounts = dataContext.getAllAccounts(); + + assertEquals(0, accounts.size()); + } + + @Test + public void givenBankAccountsThenGetAccountsWillReturnMap() { + given(dataContext.getAllAccounts()).willReturn(getBankAccounts()); + + HashMap accounts = dataContext.getAllAccounts(); + + assertEquals(TestData.ACCOUNTS_NUM, accounts.size()); + } + + @Test + public void givenInvalidAccountNumberThenGetAccountWillThrowException() throws AccountNotFoundException { + given(dataContext.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)).willThrow(AccountNotFoundException.class); + + assertThrows(AccountNotFoundException.class, () -> dataContext.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)); + } + + @Test + public void givenValidAccountNumberThenGetAccountWillReturnAccount() throws AccountNotFoundException { + Account account = new Account(BigDecimal.valueOf(100)); + given(dataContext.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account); + + Account result = dataContext.getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + + assertNotNull(account); + assertEquals(result.getMoney(), account.getMoney()); + } + + @Test + public void givenGetAllAccountsThenWillReturnAllAccounts() { + HashMap accounts = getBankAccounts(); + given(dataContext.getAllAccounts()).willReturn(accounts); + + HashMap result = dataContext.getAllAccounts(); + + assertEquals(accounts.size(), result.size()); + } + + @Test + public void givenSaveAccountThenWillReturnSavedAccount() { + Account account = new Account(BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT)); + given(dataContext.saveAccount(TestData.VALID_ACCOUNT_NUMBER, account)).willReturn(account); + + Account result = dataContext.saveAccount(TestData.VALID_ACCOUNT_NUMBER, account); + + then(dataContext) + .should() + .saveAccount(TestData.VALID_ACCOUNT_NUMBER, account); + assertNotNull(result); + } + +} diff --git a/src/test/java/ch/engenius/bank/repository/AccountRepositoryUnitTest.java b/src/test/java/ch/engenius/bank/repository/AccountRepositoryUnitTest.java new file mode 100644 index 0000000..57bb5a1 --- /dev/null +++ b/src/test/java/ch/engenius/bank/repository/AccountRepositoryUnitTest.java @@ -0,0 +1,55 @@ +package ch.engenius.bank.repository; + +import ch.engenius.bank.TestData; +import ch.engenius.bank.context.DataContextUnitTest; +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.math.BigDecimal; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.BDDMockito.given; + +public class AccountRepositoryUnitTest { + private AccountRepository accountRepository = + Mockito.mock(AccountRepository.class); + + private HashMap getBankAccounts() { + HashMap accounts = new HashMap<>(); + for (int i = 0; i < TestData.ACCOUNTS_NUM; i++) { + accounts.put(i, new Account(BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT))); + } + return accounts; + } + + @Test + public void givenInvalidAccountNumberThenGetAccountWillThrowException() throws AccountNotFoundException { + given(accountRepository.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)).willThrow(AccountNotFoundException.class); + + assertThrows(AccountNotFoundException.class, () -> accountRepository.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)); + } + + @Test + public void givenValidAccountNumberThenGetAccountWillReturnAccount() throws AccountNotFoundException { + Account account = new Account(BigDecimal.valueOf(100)); + given(accountRepository.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account); + + Account result = accountRepository.getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + + assertNotNull(account); + assertEquals(result.getMoney(), account.getMoney()); + } + + @Test + public void givenGetAllAccountsThenWillReturnAllAccounts() { + HashMap accounts = getBankAccounts(); + given(accountRepository.getAllAccounts()).willReturn(accounts); + + HashMap result = accountRepository.getAllAccounts(); + + assertEquals(accounts.size(), result.size()); + } +} diff --git a/src/test/java/ch/engenius/bank/repository/BankRepositoryUnitTest.java b/src/test/java/ch/engenius/bank/repository/BankRepositoryUnitTest.java new file mode 100644 index 0000000..c6b4987 --- /dev/null +++ b/src/test/java/ch/engenius/bank/repository/BankRepositoryUnitTest.java @@ -0,0 +1,33 @@ +package ch.engenius.bank.repository; + +import ch.engenius.bank.TestData; +import ch.engenius.bank.context.DataContextUnitTest; +import ch.engenius.bank.model.Account; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + + +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; + +public class BankRepositoryUnitTest { + private BankRepository bankRepository = + Mockito.mock(BankRepository.class); + + + @Test + public void givenSaveAccountThenWillReturnSavedAccount() { + Account account = new Account(BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT)); + given(bankRepository.saveAccount(TestData.VALID_ACCOUNT_NUMBER, account)).willReturn(account); + + Account result = bankRepository.saveAccount(TestData.VALID_ACCOUNT_NUMBER, account); + + then(bankRepository) + .should() + .saveAccount(TestData.VALID_ACCOUNT_NUMBER, account); + assertNotNull(result); + } +} diff --git a/src/test/java/ch/engenius/bank/runner/BankRunnerUnitTest.java b/src/test/java/ch/engenius/bank/runner/BankRunnerUnitTest.java new file mode 100644 index 0000000..27b914a --- /dev/null +++ b/src/test/java/ch/engenius/bank/runner/BankRunnerUnitTest.java @@ -0,0 +1,5 @@ +package ch.engenius.bank.runner; + +public class BankRunnerUnitTest { + +} diff --git a/src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.java b/src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.java new file mode 100644 index 0000000..47decf4 --- /dev/null +++ b/src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.java @@ -0,0 +1,43 @@ +package ch.engenius.bank.runner.runner_helper; + +import ch.engenius.bank.TestData; +import ch.engenius.bank.model.Account; +import ch.engenius.bank.service.account.AccountService; +import ch.engenius.bank.service.account.AccountServiceImpl; +import ch.engenius.bank.service.bank.BankService; +import ch.engenius.bank.service.bank.BankServiceImpl; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.math.BigDecimal; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.BDDMockito.given; + +public class BankRunnerAccountHelperUnitTest { + private final AccountService accountService = + Mockito.mock(AccountServiceImpl.class); + + private final BankService bankService = + Mockito.mock(BankServiceImpl.class); + + private HashMap getBankAccounts() { + HashMap accounts = new HashMap<>(); + for (int i = 0; i < TestData.ACCOUNTS_NUM; i++) { + accounts.put(i, new Account(BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT))); + } + return accounts; + } + + @Test + public void givenRegisterAccountsThenAccountsWillBeFull() { + BigDecimal defaultDeposit = BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT); + given(accountService.getAllAccounts()).willReturn(getBankAccounts()); + + bankService.registerAccounts(TestData.ACCOUNTS_NUM, defaultDeposit); + HashMap accounts = accountService.getAllAccounts(); + + assertEquals(accounts.size(), TestData.ACCOUNTS_NUM); + } +} diff --git a/src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.java b/src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.java new file mode 100644 index 0000000..c2c163b --- /dev/null +++ b/src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.java @@ -0,0 +1,16 @@ +package ch.engenius.bank.runner.runner_helper; + +import ch.engenius.bank.service.account.AccountService; +import ch.engenius.bank.service.account.AccountServiceImpl; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +public class BankRunnerSanityCheckerUnitTest { + private final AccountService accountService = + Mockito.mock(AccountServiceImpl.class); + + @Test + public void givenSanityCheckThenShouldSucceed() { + + } +} diff --git a/src/test/java/ch/engenius/bank/service/AccountServiceUnitTest.java b/src/test/java/ch/engenius/bank/service/AccountServiceUnitTest.java new file mode 100644 index 0000000..43c5611 --- /dev/null +++ b/src/test/java/ch/engenius/bank/service/AccountServiceUnitTest.java @@ -0,0 +1,86 @@ +package ch.engenius.bank.service; + +import ch.engenius.bank.TestData; +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; +import ch.engenius.bank.service.account.AccountService; +import ch.engenius.bank.service.account.AccountServiceImpl; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.math.BigDecimal; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; + +public class AccountServiceUnitTest { + private AccountService accountService = + Mockito.mock(AccountServiceImpl.class); + + private HashMap getBankAccounts() { + HashMap accounts = new HashMap<>(); + for (int i = 0; i < TestData.ACCOUNTS_NUM; i++) { + accounts.put(i, new Account(BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT))); + } + return accounts; + } + + @Test + public void givenInvalidAccountNumberThenGetAccountWillThrowException() throws AccountNotFoundException { + given(accountService.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)).willThrow(AccountNotFoundException.class); + + assertThrows(AccountNotFoundException.class, () -> accountService.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)); + } + + @Test + public void givenValidAccountNumberThenGetAccountWillReturnAccount() throws AccountNotFoundException { + Account account = new Account(BigDecimal.valueOf(100)); + given(accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account); + + Account result = accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + + assertNotNull(account); + assertEquals(result.getMoney(), account.getMoney()); + } + + @Test + public void givenMakeTransactionWithInvalidAccountNumberWillThrowException() throws AccountNotFoundException, InterruptedException { + BigDecimal amount = BigDecimal.valueOf(100); + given(accountService.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)).willThrow(AccountNotFoundException.class); + + accountService.makeTransaction(TestData.NON_EXISTING_ACCOUNT_NUMBER, TestData.EXISTING_ACCOUNT_NUMBER, amount); + + assertThrows(AccountNotFoundException.class, () -> accountService.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)); + } + + // TODO: + @Test + public void givenMakeTransactionWithValidAccountNumberWillSucceed() throws AccountNotFoundException, InterruptedException { + getBankAccounts(); + BigDecimal amount = BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT); + BigDecimal transactionAmount = BigDecimal.valueOf(100); + Account account1 = new Account(amount); + Account account2 = new Account(amount); + given(accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account1); + given(accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_2)).willReturn(account2); + + accountService.makeTransaction(TestData.EXISTING_ACCOUNT_NUMBER, TestData.EXISTING_ACCOUNT_NUMBER_2, transactionAmount); + + then(accountService) + .should() + .getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + } + + @Test + public void givenGetAllAccountsThenWillReturnAllAccounts() { + HashMap accounts = getBankAccounts(); + given(accountService.getAllAccounts()).willReturn(accounts); + + HashMap result = accountService.getAllAccounts(); + + assertEquals(accounts.size(), result.size()); + } + +} diff --git a/src/test/java/ch/engenius/bank/service/BankServiceUnitTest.java b/src/test/java/ch/engenius/bank/service/BankServiceUnitTest.java new file mode 100644 index 0000000..17fbe7c --- /dev/null +++ b/src/test/java/ch/engenius/bank/service/BankServiceUnitTest.java @@ -0,0 +1,43 @@ +package ch.engenius.bank.service; + +import ch.engenius.bank.TestData; +import ch.engenius.bank.model.Account; +import ch.engenius.bank.service.account.AccountService; +import ch.engenius.bank.service.account.AccountServiceImpl; +import ch.engenius.bank.service.bank.BankService; +import ch.engenius.bank.service.bank.BankServiceImpl; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.math.BigDecimal; +import java.util.HashMap; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.BDDMockito.given; + +public class BankServiceUnitTest { + private final BankService bankService = + Mockito.mock(BankServiceImpl.class); + + private final AccountService accountService = + Mockito.mock(AccountServiceImpl.class); + + private HashMap getBankAccounts() { + HashMap accounts = new HashMap<>(); + for (int i = 0; i < TestData.ACCOUNTS_NUM; i++) { + accounts.put(i, new Account(BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT))); + } + return accounts; + } + + @Test + public void givenRegisterAccountsThenAccountsWillBeFull() { + BigDecimal defaultDeposit = BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT); + given(accountService.getAllAccounts()).willReturn(getBankAccounts()); + + bankService.registerAccounts(TestData.ACCOUNTS_NUM, defaultDeposit); + HashMap accounts = accountService.getAllAccounts(); + + assertEquals(accounts.size(), TestData.ACCOUNTS_NUM); + } +} diff --git a/target/classes/ch/engenius/bank/Application.class b/target/classes/ch/engenius/bank/Application.class new file mode 100644 index 0000000000000000000000000000000000000000..1159f89f18e34baf4f7bc82cd940814abb28897a GIT binary patch literal 667 zcmaJ;%Sr<=6g}zGP93Y(s`XW$xUdS&LU)RwqEHwrSSg6B%rw+!&6G4F{+1gB1wX)# z5^q|yLd7iZ&B?vz+(+I&UfuxgV%0+mj*D~-L&z}XZ}>g;TU<5$v+zblh9R>rl{5zo z&PKWJBFnHAUHd{cg_23f54pPab)uBe{t?~JyH^h`9BW2$$XQ{BQe2ENlm^I$?RHB> z+{jolq>tlFai64m4`6#9aPEqW;gal~77uBF9ak7;u)I}A&~f1-P&ddDS+7dNhg z{(v>3rE2b#>lEj@Njj5%glPf2=@`}r%M1)o#k`Y;NVM%Z9Tz2roq^`WcY=QyMRB4` zH8!W@8$V1JOEgx$*NQSi>!fW&KZh#S;zUQ{RN4jQf9-MGGO>zL`dxccVD^8>juZ09 zGx9^5&tQ+;aGtCUTRTBE*GoVFlZ1vbg=rG8@(J``oE-oF literal 0 HcmV?d00001 diff --git a/target/classes/ch/engenius/bank/context/DataContext.class b/target/classes/ch/engenius/bank/context/DataContext.class new file mode 100644 index 0000000000000000000000000000000000000000..8da5aca9f4ce241a071cf4216da5fe3890b51df9 GIT binary patch literal 1385 zcmah}ZBNrs7(I6{l#L2wyogQ&1aX^4ReV8*B!UuWCVYTk{MeN`ilrr6OZZuuC>Txr z0sbiCxoyW9i{V3W@4Y?eJn#Me=f^Jqk5J1ag|vcem0bn>0wrT#Go6;{Sbj%q>dq(a(A_g_ZH?PJ6r^()fU4k%ia`ts%q8%K z>v-mgr@hiWeLdU@WTce9WFrCZ$%k|3tm=P!-kEs~P zRe?cCw(aOsM_{a6X#~;xo@Hxq^v?b}{V1SZQ*m8V272~7dECIHf}1L)FfB0L%UhkH zwam7Fa;)3Fx%E+CT>6$kQ2Q2U70ju)jrp!d+&Xi9N-m! zFx0RdbJIU;n(ZCEY4fJoa1Gtw)!UXlN0%9I-(o7}lZm{bVm0=L6G#e(I?M6;#4wLM z%XK;m?h7m>>S%TWT9o!p*V|zE_Rg6CxoxZE=$_xEk8dw3$x1BpDA%>5zhTRC3%^QV z2Riz(8C?jhm+P02E^Q~4Snsyq^kr%Uvwh@<2uv}qL~>$H&RlN0e%mlNELo~TY)lqq z8)1e6mf`@jjB>=d%W}^N=6Z*xHKe%%3e_`+>Q5*i&XD_t{1@J(Q06*F1jx*wz;zfE zp458nBuxUNfxvhOiUbJ90`BqqA`uzBH9j0Z zqNM0Uo+P(lik@QhU(Jb_Q~i6KI zMbIDMj}mK~h!Ne3eW>PD)vH(i`r+~R9>6Bb`T#$<#CHpT(54_ z-gQ(QWHDi5GK(opztO0hNa;3VtQAJ*!VtFChxlo=ayFDom#Pe_47wcTkhd|LMFB-Z z{&kJt*MYn+D%7mAqqH)+gu(|p8x0%tgkM3&le#Uniu;}~^dC>Y4Dbdv9);#0@oZ?a z#ZPY#to^Vl2~#ztTbnUt(NLNm#}TBc@{&?(^spqYS=30aT2w8UO$Q literal 0 HcmV?d00001 diff --git a/target/classes/ch/engenius/bank/model/Account.class b/target/classes/ch/engenius/bank/model/Account.class new file mode 100644 index 0000000000000000000000000000000000000000..d020c3b316c1ba1c3861c7e7698067169b75bc59 GIT binary patch literal 568 zcmaJ-O;5r=5Pb`@g;E4j5idq>fQftYq=v+gc&d8PaNpKVS#7rov?l&5O*AGR`~m(b zl?rk`Zg-4TBtcNU@~+b#k1g{&;h^o9;Kf!n5RmsWXw<< z3?~iL(Xe1UXu@IG^`~6wKx&oFxhM1!kKzXz@-yF$Q%%iA6l?jy&~tO)NF-B!u7XSH zt4M?=3_F9>Kf?(_?SjM@+OE>_CXGBfyBA(am9886BAkes%5YJvB~vwL*mM8)L^JDw zOs*Hc`h(%>`NW!+Ec-4_XTH2r*>I;=?l9X3`*e^Bosv*x|9ey+xdv4PD(i_@ER7^8Psuaqpyv~n3|K`3Mx bwn`(%#LkSED@`<)Oqit!voz7mr)~cMk`HK~ literal 0 HcmV?d00001 diff --git a/target/classes/ch/engenius/bank/model/Bank.class b/target/classes/ch/engenius/bank/model/Bank.class new file mode 100644 index 0000000000000000000000000000000000000000..323e7f1ac2ed33d6543bd8d7a0c467e8fd17b39a GIT binary patch literal 1261 zcmbVLVNcUg6g_Vnl$El<5L7l0L~%@{D(IIH5-}2H27JIQ;p1C*jza0kXo){d6BQ$g z`pv}OWQ^x^MV3s&kY?Sxx96R6?tSn6`1SbKuQlL*dPBZj_BZ1*+7hl=L5OM~FEnLIMnPOzC;s>gsS^~zg^g^}y zT41zTnQe1)BFJIjx`i9KN$(BCQf7)Buy%dr&Yf|}Kwe^bs+qn71rm`{P@rWGdJEU^OlP{MsGW%Vx=+f`KvEjC5rM{vP5{?8auKo%U!qS~L-f>f*t%JTIju7MhAMkNJJ!|47V#k}O7a GPksYwo*rBP literal 0 HcmV?d00001 diff --git a/target/classes/ch/engenius/bank/repository/AccountRepository.class b/target/classes/ch/engenius/bank/repository/AccountRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..edaa20bbb182a2520aa8aada03cea326977ba2f1 GIT binary patch literal 1047 zcma)4T~8B16g|@x%9herkRsw2g4ovRChA*}gj5@A3MOFsKHZMnf$dDQJFD=oG*L`^ z@CW##jCXh2`mx0Luy^KuoqOl(`TpbUHvmsjDeTkdSO?N*|J>ep933iiG>b4S z4!Geht&BJ$kt_)&Kxl|QmY`3O@=2a z4#l)!%EzHLZTfwKSto;aEM3J-=+n-xE+b?&;V70*hkmjv{APOpKWX2il?%r@^c~Tb z5gXN%ZXQLBBV@-kQ_TcX;?=1_)( z3a*n^O{%eh8{|=6j7r2udZk>1`Hap8(`tM|e&Yg5AIM1{=cy1_`3=gNL0PzoTa>>| w6*)TZ&_@EDfIcQK>RpIHFR=1A=30zdOll^WcjLKRgs>go?qP?{Xovg2Pro<<@&Et; literal 0 HcmV?d00001 diff --git a/target/classes/ch/engenius/bank/repository/BankRepository.class b/target/classes/ch/engenius/bank/repository/BankRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..031ddfb6ad8225cdacccfba141c7023db6d7b9f5 GIT binary patch literal 781 zcma))+e*Vg5QhJ0qp@kUTF>VSB5kbZ#=DB36+tKpD#hDvx@fdbBu$IHm4XNG!Uyo7 z#M!1)B#Pb)`_KOK&F;>=f4sf{*h0=g0!ba3i2)1}Mz2Ii*bU)b*vGXi>4b#AZP#vfaAyaWZdDL#!WN;>G4bEgMz9Sk{5x7eCl3IA_wg|;I|JT}Yw!~B5ll>?MhyZc(x&OtJc@t~DMBhpV_)_P8@UNy7`SB2On*TC zPG^dA+L``<{t|yhCf{DJ;&UbqcV_qO?m6H2&e=VO|K9%nFM#{_)dvr}8v1nfV?ZGA z(s*ses)n@_%Wc1uC0k(NfoYlcBLQzXQoMvgT+-mvF$7&;wp58pYe!mUs~OuitXHu{ z%d%u6wnBN`5e4*kB9Yt37V=x!jWq$0Rv?#k3@Zd*x{z9r7t*^U>4JuFf%!AuN;S)tdv+{o*hZo&`!EKtf|}5A71soY%DqE@Q09F=mNi@# zcz8zDjjlUwRb;h(BG!1RRBKuG6KCItN!(Ovof3$I-_LC~!81B;VOC&5Wwe{c6UYLO z&%*s5Y7B4w1H#K2d!(GWSB@TKH)sbDq*6B+3f%Qyrh-bAiF# zR@FA^)i(l5;q&b-fb%i>FLiu{Wfo3D?wCzmHr$(PDjpZ06_w#b9gmdZ(6O|s{jYVz zRV8Y?P*p|h870(SQlLMaPDf}xiB;wH8-dAi`eG+@NGm5)^Rqabwqe;tl_W3ITIR42 z;NU$F=u6bfl0}y>EtzfYZp%i&*sgMCG*c@X)uPcb)!NR zBl;KaWERJ9kMln6uSFL-_#%3zg9l{%*b#c3r=Zd5I>#IIIYnR7lxFzd!foa+idGI~86qD!pfg{VuWwlI8#n{grOfyM=@;+92&eeY(=tf8ASa^Qd zkpfkzR*)=lN-F&cLMp2v1sNzW?jv;?Fv1*09l&5$)di#xesY+5RO$2VG+@X9d~zD_ XE&-P=0Q}hjJmmVEEPo+854PR`3aikx literal 0 HcmV?d00001 diff --git a/target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.class b/target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..bb85b39f71580afdd4034a739f13b50fc743af83 GIT binary patch literal 2096 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 HZiM9**q<|7 literal 0 HcmV?d00001 diff --git a/target/classes/ch/engenius/bank/service/bank/BankServiceImpl.class b/target/classes/ch/engenius/bank/service/bank/BankServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..80dc5651ee8b2f5cf75f2dd0da6fcc5107d27213 GIT binary patch literal 1691 zcma)6TTc^F5dKbEC~V8EK#{8;i0yJ&?}{ZPTw+2}FacA-<6$|J1Kr(byG3~Sm-ynV zCMt;}{s8}tug0izwrja8RUf+Db9UzYX6BojuRlM30q_v>8X}0s5lf;8%?zCf{D>PR zZWoOgI|st_7@Fs$ExiSXXeL{TqlG~?_YGkeg)OTUV~5*^hAYZWMS6~VVl2^lqkhy7 zho-O-4B1RRI$M$gLvWBWa2nxnkU`U94K= z5<|O+={yF8=`eA_h;tf|cPG(A!*X^-$p~C?ar7~agi^U=q#=!dRjvVs{!9a+f{Jh`iD8T|Br5z!)T5iA=>EE&~s&)W>vFOGj34#OG^}FMUpg&w(WS_la5W*(esX5G%96R+QmJWTjG`D z9vW(DgyWr*g|X~dWvYek8D`&8RFYh zr)d3%!m=2(i$uCCVdZP=&gKyBO z4^N*Wwe>p6-v0Wg;G;f#$~Q{Wl=Kl*nl?edPoevfr7(k8KY-pkSuYH_V+tB~agRc| zPw%aW{6K_#r&uCtodi+vAd0Rtq_-)68|(Vu%qa$E-jUD61cwM=7#$d?v#Yeu6MPVG zcF`VJoULfVBRnSfh}sPS-5Q-$xf1#ZBnPKI;pWzPCDrx^iJ@WKCmF4o)=3ihLz3{J um2^#b5GxB{(HWAF>8T~7d9Pk^VHhJfFU2*14Ly{`4UDrzkbUJo$^&(B!1En}$0o!e&^YubMqr_1oq1E7 z_Dz1Q`WZ7z9j{f^Q@JhUX|fTAmZZ(je>*=HXm)*(YxByM?N+Xi-Yqu}Xde|W+EdfB z!E(;Nb3UqQz2lg*j?V{jRPbwMUN~oRN%VUghwPq=RaUTZy8;TbTi9rb*`8I~njj7{ z6@m!_ZdDhW>h)VJ!k$%OxjFN}MxUR{eXTv0Ir^2kkeSTAe=^H|@>kl^DlM3NY_++V z*8Le?8nru{Q_iUpTCYoKr(&eIPdTpYK9%$j*-|_dSe=0sXkC^V8%TM9%SZ6#6{ekM zBquSDJoyaqiHRDTv}GB%jq9|niJ$Pi!KjX#v^6YXk>@78TdXf>EE7)W0}_oDjXN5v T8h16?SR=5>+C4nL`u6+}*9!Lp literal 0 HcmV?d00001 diff --git a/target/test-classes/ch/engenius/bank/BankRunnerUnitTest.class b/target/test-classes/ch/engenius/bank/BankRunnerUnitTest.class new file mode 100644 index 0000000000000000000000000000000000000000..29bb93360bfd22f5b1531b038aaf4a3885730993 GIT binary patch literal 313 zcma)%y-ve06ot>tPeVf?RTpMdAr%I^uz?sr>J+sSgzQeZY8`?j<%joTLh8T+@KA{B zij4(Z`mWEh@3qd?_wEzG6{ayf_z{8$LW~I0O227UYr9eFqT;eAjBboI{Vl;?oaYe^ z2=j8Q*lyUGp;LvnFX~S4Fj&j&lf2EilfK}-d1gYA8q2HUwcs|>MJ>)OZAx9|x;0M! znnAxc9pNnf$LwoD{MZa_$xGt~p8Wm((&fM@B8le~$(De^u_(3IKzQ*1dKbe(EOgg^ Sk3->Pe-5P{i6R^eJtRNUqDWEz literal 0 HcmV?d00001 diff --git a/target/test-classes/ch/engenius/bank/TestData.class b/target/test-classes/ch/engenius/bank/TestData.class new file mode 100644 index 0000000000000000000000000000000000000000..e8d46422f04df1aea5242fe21a2e5a2e2f5a22da GIT binary patch literal 709 zcmZ`%O>fgc5Pf5(`7jPmN@xk?`$JF;SVG*WkV4`jOU6dE6LGUP?y7Y$j+8k3FVq7P z2hNCJ!mmKggn)c#E;IY~&Afd(yFY(_`wrkG9$PSAHc+#%g*u^gu0AU#SH-ClPS15( z66%Lpk(I9r=F@{o3r(~duxwm`P3Wg*jxJ7hku4X_R23hcSTD+vDiy)8v{CIjCaU7~Lhb}!@piuVY$;p{~7 z&HSv;!Sd5o&to;sd1uF;r7EAOc_w(hSu4-71v~OL&hHhWd6?$w(Oc1MIZyRbCW`HU zGkz|Qh5I~MgY7rbM+Y_tUAZrI(2_^ubxWqsxsPiVzQ_1_1@AK6tKb`q`xShX(S8Nr z;xkBo4aeK8?rP8W~KN zwAs2O>6-3)zw~R{(;6o^r>7r#dio>!J9hJ&g z@Gk(K!>{9rp-n@(jt+Dx^xibqjHGQi#pK-5O*8K)be^*u%e$b^HZr=PVVA-a`IV&U z6ivsfRg+7Gvzjcq1=CJW@->b)c5Bde>_NA}Ubj-@Y<|`9+~jQVRA`qGg`*>xrn^hF zQLUy%BO?KTR2O>Dry-$ZFZL-6wK(??i0|vfnKP@z+%97ZPi9&cH<6|^>{saX5!5`( zPF^vpE3-y9j(%a}pu)kH-C}*p@QgT~z<`D)bsWOsx)GnXwBwmYv!bA_8FtN_TUOXV zl8%NIuAuv;6b`kx2mnsx^KQ-Yx^MtTbPVIDLeJFn%*6Ff?v<(Om*%qRoPtWnaU3HW zMg_;1!ahHklHsi+C#~X?nYT)Y%{WG`h5)urrQ#UG2}%7)Sru@U94!OiqVKMQVaZ=X{N{BOz^L{FxhA>SYBnpkKk7IvAxZuqiaJ(cDePi`XI;l! zS2$3wpzReb9#%zgw0L|6i#t>r_W^J*uM@{N6QPDtqhEGS01-&gEu@ zTx@g}edPZ#G*uI?(b`3x0jkATjooLYTOWw@xzmyUSIKxu} z5@RE0_mdkc-*)kxw`qQs`Ry`i6`y@$ccI1-+9taG3hmG6`2z=Ic$J?Cw95j1CfIiO z(qIA=j_AQgRN?t+dE9e{82t^+xAB?$2>mzi;;~HI`GMZTZ!tJNu!+Y%!r+ZRV(6_+ z9J`D04V+qhGp2s`-+zw(o?F^|m-~qjc#K#N(A`1aBM;ytZ?)ofkf!4}f*OwcktIU_ zySQo%w+QMsR|&XaWSwt!{E^td5!cYK{)HiYfg>?|k#k=n*Z}q&S{ANG#{Pt!4Lq}n z(_sJ~;9Lxg;c%vnpeHslEflpyC>kWI+*A|tcon^-!rfn}1jyosAlIFHjP4WXO& z_CcJ(C@zqq7jXs`8xoWGK-t}-@J+l$aHACC+kA`RUU0wGNZk8eC2+?iT|UYUlt@$r zBnM_Cam2V)PJ#TVSOn9Q&}II7O4Ik%2)3~hTL%*xB=8U=|2E|x^W`tX3+5!1!Q48> zA~NfZNqgd$B=t0(l2pB!)JXb7nDTqPS@rt1w0(oIzQZ*!yo>k54tIQuV?V$T`TrA+ VBsh1Tzn6a6*@d6s7x)zp{tv?ED-!?! literal 0 HcmV?d00001 diff --git a/target/test-classes/ch/engenius/bank/context/DataContextUnitTest.class b/target/test-classes/ch/engenius/bank/context/DataContextUnitTest.class new file mode 100644 index 0000000000000000000000000000000000000000..ad7661f9700d5c31643b46ec6870b07ca72713df GIT binary patch literal 4597 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 literal 0 HcmV?d00001 diff --git a/target/test-classes/ch/engenius/bank/repository/BankRepositoryUnitTest.class b/target/test-classes/ch/engenius/bank/repository/BankRepositoryUnitTest.class new file mode 100644 index 0000000000000000000000000000000000000000..bd42800156ebc0874c5579c9fd674ecdf8f2d9d3 GIT binary patch literal 1722 zcmb7E+fo}x5IrL>Yb|R_$Y2M9G4UnQg|NY~bCYus2ogC0IY@}gQ)(q9V(@C0+6yUv zK)xhjkW>=ONmVM(`KVORNHP}-SJ^K!)3e>Zr+d!nfB*aQZvgkPVv$cz);f^wNMPcj@>KM>z*sidG;mQM-`=;S*O8uzL%Zd8PwYS*`k{*a;HkYz zd;8clVPevNW#JMo3taJoj@|X!Pv~oJ4t9ZYeIsx;TRr*vn(KsNF?Z@_fTx&58dC-` z7Or4g;NI(F*KlY*|-omVb>lWrP zFEBget$~!C$Pq}D*EdQ#)yDVb^~be(r6C|HCKhnhz@mk>aZ6yj-Znd}kIHqoWfTXVM*g9NkMJ>B8trRvD{lg>!4QJ^ z6eP_<3!i~9ntKHp?MtdC_u!ge0qE2-Xlh<4iRU`x3IaGEj z3}p~0-wOpUQARYj{Aeq7$(fn+;5S*_8tF?iR+T5W;%-X@4X5SuCR6p>j@xtsrS0J* zd!d;8{^-lUauU2yUy<{p|IYOjn(5MakDIPP>>U%(a0ZHEwWEJK%QJQ_kYVgn;j`Nm zq3X(}3Ke0OJkO7uVN2%wR2prYmL$=cbw3W;azp9r=gy9^7ey>#M#EOy!?J2jB`zM zouXbddJr-Uu$Y2@_!<@N0*{z9(NFp_eaCoL`3p1O{fcWp^>E`EZddcaA(b`@f8d=S z@`dMkKY`toyG?!U;lXo!B0vxW&)uaSzBmDM3m2LA8d98ew{e})p2q{+AVC*U#!Z4* z?1Nhz02qQxQ48OoN|4K(jGH_qu*E#O3pMTuJnpaGVw-!0_6j9fpGY#UfW}1fe@G(E AmjD0& literal 0 HcmV?d00001 diff --git a/target/test-classes/ch/engenius/bank/runner/BankRunnerUnitTest.class b/target/test-classes/ch/engenius/bank/runner/BankRunnerUnitTest.class new file mode 100644 index 0000000000000000000000000000000000000000..f08ac51a8ad17a8fc2ab84bd6fb5698a1d14e096 GIT binary patch literal 327 zcma)1yH3ME5S;ZRPD~(C8frQcMO;G%q5z4?N~DmaKRc`Bf;mfPoByIhqTmDgD8!yc zN5ic&H#4ifz4`k7_yll`af$$8f@p{sJ;L~?U$rW=-K%AOx9PIt|3LchH*{0a8KV U211+&4m%#peJYA@CKzD!1N$RQ@&Et; literal 0 HcmV?d00001 diff --git a/target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.class b/target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.class new file mode 100644 index 0000000000000000000000000000000000000000..14e42f13e8ad77839d994fe443cdc51e14334a7f GIT binary patch literal 2496 zcmbVO-&Ye?5dLn0EQD1M6sw?OMNNphwOVTn(gp((8pINWTHDf1xFi=go0#m=bNb`En+=TwJ=K?;y|eeud^7XS-2MIUUw#E}1+^F=h#KfH zu@9XBeH-?cZ8^4Ev=;Ikvfv4HPAFG-lLFCrV%b2Kz~w^8l5SDD%CB2_+ugM4vbLoP z(y|MMitl<>sv&a?b*5Z(Vu+!~fN5es4hRfXYDKGDDQqgQV$C-F(Oi>3i=+(4gz^@>os(T@QGhfEyCpulw7@tW_tvSu~JYDqd(uBI5{V(=jhY&Ou} zVP2MGojE!X1|9}1a4Fkn`Q(m6`oo*ly(oHcOHL>!5xk$`I% z*ONtA6EL=H$CnH10)z2PYth3Ube|MB(dMFDS(8qacHMXr7ff7)CD5Cmo=M%wF0H1g zZ!hFBO9CPj!zH|J;IhVXMc_~nOxgBI)|4uyWkHo~hjGN`LIAryjmI#CtGZ#{)w>$Z z+`T8UtTXbSiT5$i)~Whr$+cEqhb(UAb!*h&rXKX-x`|1AK&lm`mvWqth;@O(@$f`z zIfyZZDFZi5q%qBGw)WdpI=$0!`-*Byx&o;^uqCp4pBmK$9xS-UigJrN&(G&6>9HR- zP0VVLy#%Sr+C$y(Ei zz_EDdW!1=;Si&8SnY#K~2J?(mSivU-?wa@%_XI{XunnJm&1Y57xMf$Bm8!FOJymg; zZj2=Ty>ZwCI zW%PX$Tym0yJG578;S^gd!uvWx$$N`${d$a3MnMXqlh4n%y2l-Y^7z;jh_QZS8{NO5 z_Yn?`^&bh|k3PcCkK7Q!=X@UHL2ar71K^#AKAIlD5e!p)!7paR7*_EmR}tOXd}>GE z@nn?JdWMsCpWswBdVRQW?IA{z!`m2rhOxUp;rzGTc@&Y5$ZbxW3hSRWN(H)(H0J^v}Po`oZ~-L0@wN0jD+5H@L$CSHi_s8w1<0{BH29ph_8|c8+8HerNZ;@0O#< literal 0 HcmV?d00001 diff --git a/target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.class b/target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.class new file mode 100644 index 0000000000000000000000000000000000000000..2a8592c169edbe42540b978e69fc40208771a4ad GIT binary patch literal 861 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 Date: Wed, 16 Mar 2022 09:46:24 +0100 Subject: [PATCH 2/4] .gitignore has been added --- .gitignore | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5eac309 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ \ No newline at end of file From 9e50715a5a720f35798efc628fa0255a16394ab4 Mon Sep 17 00:00:00 2001 From: nikolakabasaj Date: Fri, 18 Mar 2022 10:05:44 +0100 Subject: [PATCH 3/4] Removed redundant files (target and .idea) --- .idea/.gitignore | 3 - .idea/compiler.xml | 14 -- .idea/jarRepositories.xml | 20 --- .idea/misc.xml | 12 -- .idea/runConfigurations.xml | 10 -- .idea/uiDesigner.xml | 124 ------------------ .idea/vcs.xml | 6 - .../ch/engenius/bank/Application.class | Bin 667 -> 0 bytes .../engenius/bank/context/DataContext.class | Bin 1385 -> 0 bytes .../exception/AccountNotFoundException.class | Bin 661 -> 0 bytes .../ch/engenius/bank/model/Account.class | Bin 568 -> 0 bytes .../classes/ch/engenius/bank/model/Bank.class | Bin 1261 -> 0 bytes .../bank/repository/AccountRepository.class | Bin 1047 -> 0 bytes .../bank/repository/BankRepository.class | Bin 781 -> 0 bytes .../ch/engenius/bank/runner/BankRunner.class | Bin 2019 -> 0 bytes .../BankRunnerAccountHelper.class | Bin 2096 -> 0 bytes .../BankRunnerSanityChecker.class | Bin 3835 -> 0 bytes .../runner/runner_helper/BankRunnerTask.class | Bin 2046 -> 0 bytes .../bank/service/account/AccountService.class | Bin 531 -> 0 bytes .../service/account/AccountServiceImpl.class | Bin 3038 -> 0 bytes .../bank/service/bank/BankService.class | Bin 189 -> 0 bytes .../bank/service/bank/BankServiceImpl.class | Bin 1691 -> 0 bytes .../ch/engenius/bank/BadBankUnitTests.class | Bin 852 -> 0 bytes .../ch/engenius/bank/BankRunnerUnitTest.class | Bin 313 -> 0 bytes .../ch/engenius/bank/TestData.class | Bin 709 -> 0 bytes .../ch/engenius/bank/bank/BankUnitTest.class | Bin 4072 -> 0 bytes .../bank/context/DataContextUnitTest.class | Bin 4597 -> 0 bytes .../AccountRepositoryUnitTest.class | Bin 3767 -> 0 bytes .../repository/BankRepositoryUnitTest.class | Bin 1722 -> 0 bytes .../bank/runner/BankRunnerUnitTest.class | Bin 327 -> 0 bytes .../BankRunnerAccountHelperUnitTest.class | Bin 2496 -> 0 bytes .../BankRunnerSanityCheckerUnitTest.class | Bin 861 -> 0 bytes .../bank/service/AccountServiceUnitTest.class | Bin 4891 -> 0 bytes .../bank/service/BankServiceUnitTest.class | Bin 2434 -> 0 bytes 34 files changed, 189 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/runConfigurations.xml delete mode 100644 .idea/uiDesigner.xml delete mode 100644 .idea/vcs.xml delete mode 100644 target/classes/ch/engenius/bank/Application.class delete mode 100644 target/classes/ch/engenius/bank/context/DataContext.class delete mode 100644 target/classes/ch/engenius/bank/exception/AccountNotFoundException.class delete mode 100644 target/classes/ch/engenius/bank/model/Account.class delete mode 100644 target/classes/ch/engenius/bank/model/Bank.class delete mode 100644 target/classes/ch/engenius/bank/repository/AccountRepository.class delete mode 100644 target/classes/ch/engenius/bank/repository/BankRepository.class delete mode 100644 target/classes/ch/engenius/bank/runner/BankRunner.class delete mode 100644 target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.class delete mode 100644 target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerSanityChecker.class delete mode 100644 target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerTask.class delete mode 100644 target/classes/ch/engenius/bank/service/account/AccountService.class delete mode 100644 target/classes/ch/engenius/bank/service/account/AccountServiceImpl.class delete mode 100644 target/classes/ch/engenius/bank/service/bank/BankService.class delete mode 100644 target/classes/ch/engenius/bank/service/bank/BankServiceImpl.class delete mode 100644 target/test-classes/ch/engenius/bank/BadBankUnitTests.class delete mode 100644 target/test-classes/ch/engenius/bank/BankRunnerUnitTest.class delete mode 100644 target/test-classes/ch/engenius/bank/TestData.class delete mode 100644 target/test-classes/ch/engenius/bank/bank/BankUnitTest.class delete mode 100644 target/test-classes/ch/engenius/bank/context/DataContextUnitTest.class delete mode 100644 target/test-classes/ch/engenius/bank/repository/AccountRepositoryUnitTest.class delete mode 100644 target/test-classes/ch/engenius/bank/repository/BankRepositoryUnitTest.class delete mode 100644 target/test-classes/ch/engenius/bank/runner/BankRunnerUnitTest.class delete mode 100644 target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.class delete mode 100644 target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.class delete mode 100644 target/test-classes/ch/engenius/bank/service/AccountServiceUnitTest.class delete mode 100644 target/test-classes/ch/engenius/bank/service/BankServiceUnitTest.class diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index a84a538..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index 712ab9d..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 242782f..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 797acea..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml deleted file mode 100644 index e96534f..0000000 --- a/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/target/classes/ch/engenius/bank/Application.class b/target/classes/ch/engenius/bank/Application.class deleted file mode 100644 index 1159f89f18e34baf4f7bc82cd940814abb28897a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 667 zcmaJ;%Sr<=6g}zGP93Y(s`XW$xUdS&LU)RwqEHwrSSg6B%rw+!&6G4F{+1gB1wX)# z5^q|yLd7iZ&B?vz+(+I&UfuxgV%0+mj*D~-L&z}XZ}>g;TU<5$v+zblh9R>rl{5zo z&PKWJBFnHAUHd{cg_23f54pPab)uBe{t?~JyH^h`9BW2$$XQ{BQe2ENlm^I$?RHB> z+{jolq>tlFai64m4`6#9aPEqW;gal~77uBF9ak7;u)I}A&~f1-P&ddDS+7dNhg z{(v>3rE2b#>lEj@Njj5%glPf2=@`}r%M1)o#k`Y;NVM%Z9Tz2roq^`WcY=QyMRB4` zH8!W@8$V1JOEgx$*NQSi>!fW&KZh#S;zUQ{RN4jQf9-MGGO>zL`dxccVD^8>juZ09 zGx9^5&tQ+;aGtCUTRTBE*GoVFlZ1vbg=rG8@(J``oE-oF diff --git a/target/classes/ch/engenius/bank/context/DataContext.class b/target/classes/ch/engenius/bank/context/DataContext.class deleted file mode 100644 index 8da5aca9f4ce241a071cf4216da5fe3890b51df9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1385 zcmah}ZBNrs7(I6{l#L2wyogQ&1aX^4ReV8*B!UuWCVYTk{MeN`ilrr6OZZuuC>Txr z0sbiCxoyW9i{V3W@4Y?eJn#Me=f^Jqk5J1ag|vcem0bn>0wrT#Go6;{Sbj%q>dq(a(A_g_ZH?PJ6r^()fU4k%ia`ts%q8%K z>v-mgr@hiWeLdU@WTce9WFrCZ$%k|3tm=P!-kEs~P zRe?cCw(aOsM_{a6X#~;xo@Hxq^v?b}{V1SZQ*m8V272~7dECIHf}1L)FfB0L%UhkH zwam7Fa;)3Fx%E+CT>6$kQ2Q2U70ju)jrp!d+&Xi9N-m! zFx0RdbJIU;n(ZCEY4fJoa1Gtw)!UXlN0%9I-(o7}lZm{bVm0=L6G#e(I?M6;#4wLM z%XK;m?h7m>>S%TWT9o!p*V|zE_Rg6CxoxZE=$_xEk8dw3$x1BpDA%>5zhTRC3%^QV z2Riz(8C?jhm+P02E^Q~4Snsyq^kr%Uvwh@<2uv}qL~>$H&RlN0e%mlNELo~TY)lqq z8)1e6mf`@jjB>=d%W}^N=6Z*xHKe%%3e_`+>Q5*i&XD_t{1@J(Q06*F1jx*wz;zfE zp458nBuxUNfxvhOiUbJ90`BqqA`uzBH9j0Z zqNM0Uo+P(lik@QhU(Jb_Q~i6KI zMbIDMj}mK~h!Ne3eW>PD)vH(i`r+~R9>6Bb`T#$<#CHpT(54_ z-gQ(QWHDi5GK(opztO0hNa;3VtQAJ*!VtFChxlo=ayFDom#Pe_47wcTkhd|LMFB-Z z{&kJt*MYn+D%7mAqqH)+gu(|p8x0%tgkM3&le#Uniu;}~^dC>Y4Dbdv9);#0@oZ?a z#ZPY#to^Vl2~#ztTbnUt(NLNm#}TBc@{&?(^spqYS=30aT2w8UO$Q diff --git a/target/classes/ch/engenius/bank/model/Account.class b/target/classes/ch/engenius/bank/model/Account.class deleted file mode 100644 index d020c3b316c1ba1c3861c7e7698067169b75bc59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmaJ-O;5r=5Pb`@g;E4j5idq>fQftYq=v+gc&d8PaNpKVS#7rov?l&5O*AGR`~m(b zl?rk`Zg-4TBtcNU@~+b#k1g{&;h^o9;Kf!n5RmsWXw<< z3?~iL(Xe1UXu@IG^`~6wKx&oFxhM1!kKzXz@-yF$Q%%iA6l?jy&~tO)NF-B!u7XSH zt4M?=3_F9>Kf?(_?SjM@+OE>_CXGBfyBA(am9886BAkes%5YJvB~vwL*mM8)L^JDw zOs*Hc`h(%>`NW!+Ec-4_XTH2r*>I;=?l9X3`*e^Bosv*x|9ey+xdv4PD(i_@ER7^8Psuaqpyv~n3|K`3Mx bwn`(%#LkSED@`<)Oqit!voz7mr)~cMk`HK~ diff --git a/target/classes/ch/engenius/bank/model/Bank.class b/target/classes/ch/engenius/bank/model/Bank.class deleted file mode 100644 index 323e7f1ac2ed33d6543bd8d7a0c467e8fd17b39a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1261 zcmbVLVNcUg6g_Vnl$El<5L7l0L~%@{D(IIH5-}2H27JIQ;p1C*jza0kXo){d6BQ$g z`pv}OWQ^x^MV3s&kY?Sxx96R6?tSn6`1SbKuQlL*dPBZj_BZ1*+7hl=L5OM~FEnLIMnPOzC;s>gsS^~zg^g^}y zT41zTnQe1)BFJIjx`i9KN$(BCQf7)Buy%dr&Yf|}Kwe^bs+qn71rm`{P@rWGdJEU^OlP{MsGW%Vx=+f`KvEjC5rM{vP5{?8auKo%U!qS~L-f>f*t%JTIju7MhAMkNJJ!|47V#k}O7a GPksYwo*rBP diff --git a/target/classes/ch/engenius/bank/repository/AccountRepository.class b/target/classes/ch/engenius/bank/repository/AccountRepository.class deleted file mode 100644 index edaa20bbb182a2520aa8aada03cea326977ba2f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1047 zcma)4T~8B16g|@x%9herkRsw2g4ovRChA*}gj5@A3MOFsKHZMnf$dDQJFD=oG*L`^ z@CW##jCXh2`mx0Luy^KuoqOl(`TpbUHvmsjDeTkdSO?N*|J>ep933iiG>b4S z4!Geht&BJ$kt_)&Kxl|QmY`3O@=2a z4#l)!%EzHLZTfwKSto;aEM3J-=+n-xE+b?&;V70*hkmjv{APOpKWX2il?%r@^c~Tb z5gXN%ZXQLBBV@-kQ_TcX;?=1_)( z3a*n^O{%eh8{|=6j7r2udZk>1`Hap8(`tM|e&Yg5AIM1{=cy1_`3=gNL0PzoTa>>| w6*)TZ&_@EDfIcQK>RpIHFR=1A=30zdOll^WcjLKRgs>go?qP?{Xovg2Pro<<@&Et; diff --git a/target/classes/ch/engenius/bank/repository/BankRepository.class b/target/classes/ch/engenius/bank/repository/BankRepository.class deleted file mode 100644 index 031ddfb6ad8225cdacccfba141c7023db6d7b9f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcma))+e*Vg5QhJ0qp@kUTF>VSB5kbZ#=DB36+tKpD#hDvx@fdbBu$IHm4XNG!Uyo7 z#M!1)B#Pb)`_KOK&F;>=f4sf{*h0=g0!ba3i2)1}Mz2Ii*bU)b*vGXi>4b#AZP#vfaAyaWZdDL#!WN;>G4bEgMz9Sk{5x7eCl3IA_wg|;I|JT}Yw!~B5ll>?MhyZc(x&OtJc@t~DMBhpV_)_P8@UNy7`SB2On*TC zPG^dA+L``<{t|yhCf{DJ;&UbqcV_qO?m6H2&e=VO|K9%nFM#{_)dvr}8v1nfV?ZGA z(s*ses)n@_%Wc1uC0k(NfoYlcBLQzXQoMvgT+-mvF$7&;wp58pYe!mUs~OuitXHu{ z%d%u6wnBN`5e4*kB9Yt37V=x!jWq$0Rv?#k3@Zd*x{z9r7t*^U>4JuFf%!AuN;S)tdv+{o*hZo&`!EKtf|}5A71soY%DqE@Q09F=mNi@# zcz8zDjjlUwRb;h(BG!1RRBKuG6KCItN!(Ovof3$I-_LC~!81B;VOC&5Wwe{c6UYLO z&%*s5Y7B4w1H#K2d!(GWSB@TKH)sbDq*6B+3f%Qyrh-bAiF# zR@FA^)i(l5;q&b-fb%i>FLiu{Wfo3D?wCzmHr$(PDjpZ06_w#b9gmdZ(6O|s{jYVz zRV8Y?P*p|h870(SQlLMaPDf}xiB;wH8-dAi`eG+@NGm5)^Rqabwqe;tl_W3ITIR42 z;NU$F=u6bfl0}y>EtzfYZp%i&*sgMCG*c@X)uPcb)!NR zBl;KaWERJ9kMln6uSFL-_#%3zg9l{%*b#c3r=Zd5I>#IIIYnR7lxFzd!foa+idGI~86qD!pfg{VuWwlI8#n{grOfyM=@;+92&eeY(=tf8ASa^Qd zkpfkzR*)=lN-F&cLMp2v1sNzW?jv;?Fv1*09l&5$)di#xesY+5RO$2VG+@X9d~zD_ XE&-P=0Q}hjJmmVEEPo+854PR`3aikx diff --git a/target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.class b/target/classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelper.class deleted file mode 100644 index bb85b39f71580afdd4034a739f13b50fc743af83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2096 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 HZiM9**q<|7 diff --git a/target/classes/ch/engenius/bank/service/bank/BankServiceImpl.class b/target/classes/ch/engenius/bank/service/bank/BankServiceImpl.class deleted file mode 100644 index 80dc5651ee8b2f5cf75f2dd0da6fcc5107d27213..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1691 zcma)6TTc^F5dKbEC~V8EK#{8;i0yJ&?}{ZPTw+2}FacA-<6$|J1Kr(byG3~Sm-ynV zCMt;}{s8}tug0izwrja8RUf+Db9UzYX6BojuRlM30q_v>8X}0s5lf;8%?zCf{D>PR zZWoOgI|st_7@Fs$ExiSXXeL{TqlG~?_YGkeg)OTUV~5*^hAYZWMS6~VVl2^lqkhy7 zho-O-4B1RRI$M$gLvWBWa2nxnkU`U94K= z5<|O+={yF8=`eA_h;tf|cPG(A!*X^-$p~C?ar7~agi^U=q#=!dRjvVs{!9a+f{Jh`iD8T|Br5z!)T5iA=>EE&~s&)W>vFOGj34#OG^}FMUpg&w(WS_la5W*(esX5G%96R+QmJWTjG`D z9vW(DgyWr*g|X~dWvYek8D`&8RFYh zr)d3%!m=2(i$uCCVdZP=&gKyBO z4^N*Wwe>p6-v0Wg;G;f#$~Q{Wl=Kl*nl?edPoevfr7(k8KY-pkSuYH_V+tB~agRc| zPw%aW{6K_#r&uCtodi+vAd0Rtq_-)68|(Vu%qa$E-jUD61cwM=7#$d?v#Yeu6MPVG zcF`VJoULfVBRnSfh}sPS-5Q-$xf1#ZBnPKI;pWzPCDrx^iJ@WKCmF4o)=3ihLz3{J um2^#b5GxB{(HWAF>8T~7d9Pk^VHhJfFU2*14Ly{`4UDrzkbUJo$^&(B!1En}$0o!e&^YubMqr_1oq1E7 z_Dz1Q`WZ7z9j{f^Q@JhUX|fTAmZZ(je>*=HXm)*(YxByM?N+Xi-Yqu}Xde|W+EdfB z!E(;Nb3UqQz2lg*j?V{jRPbwMUN~oRN%VUghwPq=RaUTZy8;TbTi9rb*`8I~njj7{ z6@m!_ZdDhW>h)VJ!k$%OxjFN}MxUR{eXTv0Ir^2kkeSTAe=^H|@>kl^DlM3NY_++V z*8Le?8nru{Q_iUpTCYoKr(&eIPdTpYK9%$j*-|_dSe=0sXkC^V8%TM9%SZ6#6{ekM zBquSDJoyaqiHRDTv}GB%jq9|niJ$Pi!KjX#v^6YXk>@78TdXf>EE7)W0}_oDjXN5v T8h16?SR=5>+C4nL`u6+}*9!Lp diff --git a/target/test-classes/ch/engenius/bank/BankRunnerUnitTest.class b/target/test-classes/ch/engenius/bank/BankRunnerUnitTest.class deleted file mode 100644 index 29bb93360bfd22f5b1531b038aaf4a3885730993..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcma)%y-ve06ot>tPeVf?RTpMdAr%I^uz?sr>J+sSgzQeZY8`?j<%joTLh8T+@KA{B zij4(Z`mWEh@3qd?_wEzG6{ayf_z{8$LW~I0O227UYr9eFqT;eAjBboI{Vl;?oaYe^ z2=j8Q*lyUGp;LvnFX~S4Fj&j&lf2EilfK}-d1gYA8q2HUwcs|>MJ>)OZAx9|x;0M! znnAxc9pNnf$LwoD{MZa_$xGt~p8Wm((&fM@B8le~$(De^u_(3IKzQ*1dKbe(EOgg^ Sk3->Pe-5P{i6R^eJtRNUqDWEz diff --git a/target/test-classes/ch/engenius/bank/TestData.class b/target/test-classes/ch/engenius/bank/TestData.class deleted file mode 100644 index e8d46422f04df1aea5242fe21a2e5a2e2f5a22da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 709 zcmZ`%O>fgc5Pf5(`7jPmN@xk?`$JF;SVG*WkV4`jOU6dE6LGUP?y7Y$j+8k3FVq7P z2hNCJ!mmKggn)c#E;IY~&Afd(yFY(_`wrkG9$PSAHc+#%g*u^gu0AU#SH-ClPS15( z66%Lpk(I9r=F@{o3r(~duxwm`P3Wg*jxJ7hku4X_R23hcSTD+vDiy)8v{CIjCaU7~Lhb}!@piuVY$;p{~7 z&HSv;!Sd5o&to;sd1uF;r7EAOc_w(hSu4-71v~OL&hHhWd6?$w(Oc1MIZyRbCW`HU zGkz|Qh5I~MgY7rbM+Y_tUAZrI(2_^ubxWqsxsPiVzQ_1_1@AK6tKb`q`xShX(S8Nr z;xkBo4aeK8?rP8W~KN zwAs2O>6-3)zw~R{(;6o^r>7r#dio>!J9hJ&g z@Gk(K!>{9rp-n@(jt+Dx^xibqjHGQi#pK-5O*8K)be^*u%e$b^HZr=PVVA-a`IV&U z6ivsfRg+7Gvzjcq1=CJW@->b)c5Bde>_NA}Ubj-@Y<|`9+~jQVRA`qGg`*>xrn^hF zQLUy%BO?KTR2O>Dry-$ZFZL-6wK(??i0|vfnKP@z+%97ZPi9&cH<6|^>{saX5!5`( zPF^vpE3-y9j(%a}pu)kH-C}*p@QgT~z<`D)bsWOsx)GnXwBwmYv!bA_8FtN_TUOXV zl8%NIuAuv;6b`kx2mnsx^KQ-Yx^MtTbPVIDLeJFn%*6Ff?v<(Om*%qRoPtWnaU3HW zMg_;1!ahHklHsi+C#~X?nYT)Y%{WG`h5)urrQ#UG2}%7)Sru@U94!OiqVKMQVaZ=X{N{BOz^L{FxhA>SYBnpkKk7IvAxZuqiaJ(cDePi`XI;l! zS2$3wpzReb9#%zgw0L|6i#t>r_W^J*uM@{N6QPDtqhEGS01-&gEu@ zTx@g}edPZ#G*uI?(b`3x0jkATjooLYTOWw@xzmyUSIKxu} z5@RE0_mdkc-*)kxw`qQs`Ry`i6`y@$ccI1-+9taG3hmG6`2z=Ic$J?Cw95j1CfIiO z(qIA=j_AQgRN?t+dE9e{82t^+xAB?$2>mzi;;~HI`GMZTZ!tJNu!+Y%!r+ZRV(6_+ z9J`D04V+qhGp2s`-+zw(o?F^|m-~qjc#K#N(A`1aBM;ytZ?)ofkf!4}f*OwcktIU_ zySQo%w+QMsR|&XaWSwt!{E^td5!cYK{)HiYfg>?|k#k=n*Z}q&S{ANG#{Pt!4Lq}n z(_sJ~;9Lxg;c%vnpeHslEflpyC>kWI+*A|tcon^-!rfn}1jyosAlIFHjP4WXO& z_CcJ(C@zqq7jXs`8xoWGK-t}-@J+l$aHACC+kA`RUU0wGNZk8eC2+?iT|UYUlt@$r zBnM_Cam2V)PJ#TVSOn9Q&}II7O4Ik%2)3~hTL%*xB=8U=|2E|x^W`tX3+5!1!Q48> zA~NfZNqgd$B=t0(l2pB!)JXb7nDTqPS@rt1w0(oIzQZ*!yo>k54tIQuV?V$T`TrA+ VBsh1Tzn6a6*@d6s7x)zp{tv?ED-!?! diff --git a/target/test-classes/ch/engenius/bank/context/DataContextUnitTest.class b/target/test-classes/ch/engenius/bank/context/DataContextUnitTest.class deleted file mode 100644 index ad7661f9700d5c31643b46ec6870b07ca72713df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4597 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 diff --git a/target/test-classes/ch/engenius/bank/repository/BankRepositoryUnitTest.class b/target/test-classes/ch/engenius/bank/repository/BankRepositoryUnitTest.class deleted file mode 100644 index bd42800156ebc0874c5579c9fd674ecdf8f2d9d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1722 zcmb7E+fo}x5IrL>Yb|R_$Y2M9G4UnQg|NY~bCYus2ogC0IY@}gQ)(q9V(@C0+6yUv zK)xhjkW>=ONmVM(`KVORNHP}-SJ^K!)3e>Zr+d!nfB*aQZvgkPVv$cz);f^wNMPcj@>KM>z*sidG;mQM-`=;S*O8uzL%Zd8PwYS*`k{*a;HkYz zd;8clVPevNW#JMo3taJoj@|X!Pv~oJ4t9ZYeIsx;TRr*vn(KsNF?Z@_fTx&58dC-` z7Or4g;NI(F*KlY*|-omVb>lWrP zFEBget$~!C$Pq}D*EdQ#)yDVb^~be(r6C|HCKhnhz@mk>aZ6yj-Znd}kIHqoWfTXVM*g9NkMJ>B8trRvD{lg>!4QJ^ z6eP_<3!i~9ntKHp?MtdC_u!ge0qE2-Xlh<4iRU`x3IaGEj z3}p~0-wOpUQARYj{Aeq7$(fn+;5S*_8tF?iR+T5W;%-X@4X5SuCR6p>j@xtsrS0J* zd!d;8{^-lUauU2yUy<{p|IYOjn(5MakDIPP>>U%(a0ZHEwWEJK%QJQ_kYVgn;j`Nm zq3X(}3Ke0OJkO7uVN2%wR2prYmL$=cbw3W;azp9r=gy9^7ey>#M#EOy!?J2jB`zM zouXbddJr-Uu$Y2@_!<@N0*{z9(NFp_eaCoL`3p1O{fcWp^>E`EZddcaA(b`@f8d=S z@`dMkKY`toyG?!U;lXo!B0vxW&)uaSzBmDM3m2LA8d98ew{e})p2q{+AVC*U#!Z4* z?1Nhz02qQxQ48OoN|4K(jGH_qu*E#O3pMTuJnpaGVw-!0_6j9fpGY#UfW}1fe@G(E AmjD0& diff --git a/target/test-classes/ch/engenius/bank/runner/BankRunnerUnitTest.class b/target/test-classes/ch/engenius/bank/runner/BankRunnerUnitTest.class deleted file mode 100644 index f08ac51a8ad17a8fc2ab84bd6fb5698a1d14e096..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcma)1yH3ME5S;ZRPD~(C8frQcMO;G%q5z4?N~DmaKRc`Bf;mfPoByIhqTmDgD8!yc zN5ic&H#4ifz4`k7_yll`af$$8f@p{sJ;L~?U$rW=-K%AOx9PIt|3LchH*{0a8KV U211+&4m%#peJYA@CKzD!1N$RQ@&Et; diff --git a/target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.class b/target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerAccountHelperUnitTest.class deleted file mode 100644 index 14e42f13e8ad77839d994fe443cdc51e14334a7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2496 zcmbVO-&Ye?5dLn0EQD1M6sw?OMNNphwOVTn(gp((8pINWTHDf1xFi=go0#m=bNb`En+=TwJ=K?;y|eeud^7XS-2MIUUw#E}1+^F=h#KfH zu@9XBeH-?cZ8^4Ev=;Ikvfv4HPAFG-lLFCrV%b2Kz~w^8l5SDD%CB2_+ugM4vbLoP z(y|MMitl<>sv&a?b*5Z(Vu+!~fN5es4hRfXYDKGDDQqgQV$C-F(Oi>3i=+(4gz^@>os(T@QGhfEyCpulw7@tW_tvSu~JYDqd(uBI5{V(=jhY&Ou} zVP2MGojE!X1|9}1a4Fkn`Q(m6`oo*ly(oHcOHL>!5xk$`I% z*ONtA6EL=H$CnH10)z2PYth3Ube|MB(dMFDS(8qacHMXr7ff7)CD5Cmo=M%wF0H1g zZ!hFBO9CPj!zH|J;IhVXMc_~nOxgBI)|4uyWkHo~hjGN`LIAryjmI#CtGZ#{)w>$Z z+`T8UtTXbSiT5$i)~Whr$+cEqhb(UAb!*h&rXKX-x`|1AK&lm`mvWqth;@O(@$f`z zIfyZZDFZi5q%qBGw)WdpI=$0!`-*Byx&o;^uqCp4pBmK$9xS-UigJrN&(G&6>9HR- zP0VVLy#%Sr+C$y(Ei zz_EDdW!1=;Si&8SnY#K~2J?(mSivU-?wa@%_XI{XunnJm&1Y57xMf$Bm8!FOJymg; zZj2=Ty>ZwCI zW%PX$Tym0yJG578;S^gd!uvWx$$N`${d$a3MnMXqlh4n%y2l-Y^7z;jh_QZS8{NO5 z_Yn?`^&bh|k3PcCkK7Q!=X@UHL2ar71K^#AKAIlD5e!p)!7paR7*_EmR}tOXd}>GE z@nn?JdWMsCpWswBdVRQW?IA{z!`m2rhOxUp;rzGTc@&Y5$ZbxW3hSRWN(H)(H0J^v}Po`oZ~-L0@wN0jD+5H@L$CSHi_s8w1<0{BH29ph_8|c8+8HerNZ;@0O#< diff --git a/target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.class b/target/test-classes/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.class deleted file mode 100644 index 2a8592c169edbe42540b978e69fc40208771a4ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 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 Date: Fri, 18 Mar 2022 11:36:10 +0100 Subject: [PATCH 4/4] Minor code layout errors fixed --- .../exception/AccountNotFoundException.java | 2 +- .../repository/account/AccountRepository.java | 11 +++++++++ .../AccountRepositoryImpl.java} | 8 +++---- .../bank/repository/bank/BankRepository.java | 7 ++++++ .../BankRepositoryImpl.java} | 6 ++--- .../runner/runner_helper/BankRunnerTask.java | 10 +------- .../service/account/AccountServiceImpl.java | 13 +++++----- .../bank/service/bank/BankServiceImpl.java | 9 +++---- .../ch/engenius/bank/BadBankUnitTests.java | 21 ---------------- .../ch/engenius/bank/BankRunnerUnitTest.java | 4 ---- src/test/java/ch/engenius/bank/TestData.java | 4 +--- .../ch/engenius/bank/bank/BankUnitTest.java | 4 ++-- .../bank/context/DataContextUnitTest.java | 4 ++-- .../repository/AccountRepositoryUnitTest.java | 10 ++++---- .../repository/BankRepositoryUnitTest.java | 6 ++--- .../bank/runner/BankRunnerUnitTest.java | 5 ---- .../BankRunnerSanityCheckerUnitTest.java | 16 ------------- .../bank/service/AccountServiceUnitTest.java | 24 +++++++++++-------- 18 files changed, 63 insertions(+), 101 deletions(-) create mode 100644 src/main/java/ch/engenius/bank/repository/account/AccountRepository.java rename src/main/java/ch/engenius/bank/repository/{AccountRepository.java => account/AccountRepositoryImpl.java} (73%) create mode 100644 src/main/java/ch/engenius/bank/repository/bank/BankRepository.java rename src/main/java/ch/engenius/bank/repository/{BankRepository.java => bank/BankRepositoryImpl.java} (69%) delete mode 100644 src/test/java/ch/engenius/bank/BadBankUnitTests.java delete mode 100644 src/test/java/ch/engenius/bank/BankRunnerUnitTest.java delete mode 100644 src/test/java/ch/engenius/bank/runner/BankRunnerUnitTest.java delete mode 100644 src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.java diff --git a/src/main/java/ch/engenius/bank/exception/AccountNotFoundException.java b/src/main/java/ch/engenius/bank/exception/AccountNotFoundException.java index f12e478..0137fa3 100644 --- a/src/main/java/ch/engenius/bank/exception/AccountNotFoundException.java +++ b/src/main/java/ch/engenius/bank/exception/AccountNotFoundException.java @@ -1,6 +1,6 @@ package ch.engenius.bank.exception; -public class AccountNotFoundException extends Exception { +public class AccountNotFoundException extends RuntimeException { public AccountNotFoundException(int accountNumber) { super(String.format("Account with id %d cannot be found!", accountNumber)); } diff --git a/src/main/java/ch/engenius/bank/repository/account/AccountRepository.java b/src/main/java/ch/engenius/bank/repository/account/AccountRepository.java new file mode 100644 index 0000000..7f04da2 --- /dev/null +++ b/src/main/java/ch/engenius/bank/repository/account/AccountRepository.java @@ -0,0 +1,11 @@ +package ch.engenius.bank.repository.account; + +import ch.engenius.bank.exception.AccountNotFoundException; +import ch.engenius.bank.model.Account; + +import java.util.HashMap; + +public interface AccountRepository { + Account getAccount(int accountNumber) throws AccountNotFoundException; + HashMap getAllAccounts(); +} diff --git a/src/main/java/ch/engenius/bank/repository/AccountRepository.java b/src/main/java/ch/engenius/bank/repository/account/AccountRepositoryImpl.java similarity index 73% rename from src/main/java/ch/engenius/bank/repository/AccountRepository.java rename to src/main/java/ch/engenius/bank/repository/account/AccountRepositoryImpl.java index 7c704d1..815454f 100644 --- a/src/main/java/ch/engenius/bank/repository/AccountRepository.java +++ b/src/main/java/ch/engenius/bank/repository/account/AccountRepositoryImpl.java @@ -1,17 +1,15 @@ -package ch.engenius.bank.repository; +package ch.engenius.bank.repository.account; import ch.engenius.bank.context.DataContext; import ch.engenius.bank.exception.AccountNotFoundException; import ch.engenius.bank.model.Account; -import org.springframework.stereotype.Component; import java.util.HashMap; -@Component -public class AccountRepository { +public class AccountRepositoryImpl implements AccountRepository { private DataContext dataContext; - public AccountRepository(DataContext dataContext) { + public AccountRepositoryImpl(DataContext dataContext) { this.dataContext = dataContext; } diff --git a/src/main/java/ch/engenius/bank/repository/bank/BankRepository.java b/src/main/java/ch/engenius/bank/repository/bank/BankRepository.java new file mode 100644 index 0000000..64882f0 --- /dev/null +++ b/src/main/java/ch/engenius/bank/repository/bank/BankRepository.java @@ -0,0 +1,7 @@ +package ch.engenius.bank.repository.bank; + +import ch.engenius.bank.model.Account; + +public interface BankRepository { + Account saveAccount(int accountNumber, Account account); +} diff --git a/src/main/java/ch/engenius/bank/repository/BankRepository.java b/src/main/java/ch/engenius/bank/repository/bank/BankRepositoryImpl.java similarity index 69% rename from src/main/java/ch/engenius/bank/repository/BankRepository.java rename to src/main/java/ch/engenius/bank/repository/bank/BankRepositoryImpl.java index 938b15b..aa5b581 100644 --- a/src/main/java/ch/engenius/bank/repository/BankRepository.java +++ b/src/main/java/ch/engenius/bank/repository/bank/BankRepositoryImpl.java @@ -1,12 +1,12 @@ -package ch.engenius.bank.repository; +package ch.engenius.bank.repository.bank; import ch.engenius.bank.context.DataContext; import ch.engenius.bank.model.Account; -public class BankRepository { +public class BankRepositoryImpl implements BankRepository { private DataContext dataContext; - public BankRepository(DataContext dataContext) { + public BankRepositoryImpl(DataContext dataContext) { this.dataContext = dataContext; } diff --git a/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerTask.java b/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerTask.java index 898c2a5..6cbd0bf 100644 --- a/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerTask.java +++ b/src/main/java/ch/engenius/bank/runner/runner_helper/BankRunnerTask.java @@ -25,18 +25,10 @@ public BankRunnerTask( @Override public Void call() throws Exception { - tryRunningRandomOperation(this.maxAccount); + runRandomOperation(this.maxAccount); return null; } - private void tryRunningRandomOperation(int maxAccount) { - try { - runRandomOperation(maxAccount); - } catch (InterruptedException | AccountNotFoundException e) { - e.printStackTrace(); - } - } - private void runRandomOperation(int maxAccount) throws InterruptedException, AccountNotFoundException { BigDecimal transferAmount = BigDecimal.valueOf(random.nextDouble()*100.0); int accountInNumber = random.nextInt(maxAccount); diff --git a/src/main/java/ch/engenius/bank/service/account/AccountServiceImpl.java b/src/main/java/ch/engenius/bank/service/account/AccountServiceImpl.java index 96760ea..3d563f0 100644 --- a/src/main/java/ch/engenius/bank/service/account/AccountServiceImpl.java +++ b/src/main/java/ch/engenius/bank/service/account/AccountServiceImpl.java @@ -3,7 +3,8 @@ import ch.engenius.bank.context.DataContext; import ch.engenius.bank.exception.AccountNotFoundException; import ch.engenius.bank.model.Account; -import ch.engenius.bank.repository.AccountRepository; +import ch.engenius.bank.repository.account.AccountRepository; +import ch.engenius.bank.repository.account.AccountRepositoryImpl; import java.math.BigDecimal; import java.util.HashMap; @@ -12,10 +13,10 @@ public class AccountServiceImpl implements AccountService { private final AccountRepository accountRepository; - private ReentrantLock lock; + private final ReentrantLock lock; public AccountServiceImpl(DataContext dataContext) { - accountRepository = new AccountRepository(dataContext); + accountRepository = new AccountRepositoryImpl(dataContext); lock = new ReentrantLock(); } @@ -30,9 +31,8 @@ public void makeTransaction(int accountIn, int accountOut, BigDecimal amount) th } private void withdraw(int accountNumber, BigDecimal withdrawAmount) throws AccountNotFoundException { - Account account = getAccount(accountNumber); checkIfHasEnoughMoney(accountNumber, withdrawAmount); - + Account account = getAccount(accountNumber); BigDecimal newAmount = account.getMoney().subtract(withdrawAmount); setMoney(accountNumber, newAmount); } @@ -63,7 +63,8 @@ private boolean hasEnoughMoney(int accountNumber, BigDecimal withdrawAmount) thr } private void checkIfHasEnoughMoney(int accountNumber, BigDecimal withdrawAmount) throws AccountNotFoundException { - if (!hasEnoughMoney(accountNumber, withdrawAmount)) + if (!hasEnoughMoney(accountNumber, withdrawAmount)) { throw new IllegalStateException("not enough credits on account"); + } } } diff --git a/src/main/java/ch/engenius/bank/service/bank/BankServiceImpl.java b/src/main/java/ch/engenius/bank/service/bank/BankServiceImpl.java index 2b6823a..3025214 100644 --- a/src/main/java/ch/engenius/bank/service/bank/BankServiceImpl.java +++ b/src/main/java/ch/engenius/bank/service/bank/BankServiceImpl.java @@ -2,20 +2,17 @@ import ch.engenius.bank.context.DataContext; import ch.engenius.bank.model.Account; -import ch.engenius.bank.repository.BankRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; +import ch.engenius.bank.repository.bank.BankRepository; +import ch.engenius.bank.repository.bank.BankRepositoryImpl; import java.math.BigDecimal; -@RequiredArgsConstructor -@Component public class BankServiceImpl implements BankService { private final BankRepository bankRepository; public BankServiceImpl(DataContext dataContext) { - bankRepository = new BankRepository(dataContext); + bankRepository = new BankRepositoryImpl(dataContext); } public void registerAccounts(int number, BigDecimal defaultMoney) { diff --git a/src/test/java/ch/engenius/bank/BadBankUnitTests.java b/src/test/java/ch/engenius/bank/BadBankUnitTests.java deleted file mode 100644 index 1e23d84..0000000 --- a/src/test/java/ch/engenius/bank/BadBankUnitTests.java +++ /dev/null @@ -1,21 +0,0 @@ -package ch.engenius.bank; - - -import ch.engenius.bank.bank.BankUnitTest; -import ch.engenius.bank.repository.AccountRepositoryUnitTest; -import ch.engenius.bank.repository.BankRepositoryUnitTest; -import ch.engenius.bank.service.AccountServiceUnitTest; -import ch.engenius.bank.service.BankServiceUnitTest; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; - -@RunWith(Suite.class) -@Suite.SuiteClasses({ - BankUnitTest.class, - AccountRepositoryUnitTest.class, - BankRepositoryUnitTest.class, - AccountServiceUnitTest.class, - BankServiceUnitTest.class, -}) -public class BadBankUnitTests { -} diff --git a/src/test/java/ch/engenius/bank/BankRunnerUnitTest.java b/src/test/java/ch/engenius/bank/BankRunnerUnitTest.java deleted file mode 100644 index 08e7ecf..0000000 --- a/src/test/java/ch/engenius/bank/BankRunnerUnitTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package ch.engenius.bank; - -public class BankRunnerUnitTest { -} diff --git a/src/test/java/ch/engenius/bank/TestData.java b/src/test/java/ch/engenius/bank/TestData.java index d3f601d..0cc0cdd 100644 --- a/src/test/java/ch/engenius/bank/TestData.java +++ b/src/test/java/ch/engenius/bank/TestData.java @@ -2,12 +2,10 @@ public class TestData { public static final int ACCOUNTS_NUM = 100; - public static int ITERATIONS = 10000; public static int DEFAULT_DEPOSIT = 1000; - public static final int EXISTING_ACCOUNT_NUMBER = 1; + public static final int EXISTING_ACCOUNT_NUMBER_1 = 1; public static final int EXISTING_ACCOUNT_NUMBER_2 = 2; public static final int NON_EXISTING_ACCOUNT_NUMBER = 200; public static final int VALID_ACCOUNT_NUMBER = 10; - public static final int VALID_ACCOUNT_NUMBER_2 = 20; } diff --git a/src/test/java/ch/engenius/bank/bank/BankUnitTest.java b/src/test/java/ch/engenius/bank/bank/BankUnitTest.java index b4955c3..a13037c 100644 --- a/src/test/java/ch/engenius/bank/bank/BankUnitTest.java +++ b/src/test/java/ch/engenius/bank/bank/BankUnitTest.java @@ -55,9 +55,9 @@ public void givenInvalidAccountNumberThenGetAccountWillThrowException() throws A @Test public void givenValidAccountNumberThenGetAccountWillReturnAccount() throws AccountNotFoundException { Account account = new Account(BigDecimal.valueOf(100)); - given(bank.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account); + given(bank.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_1)).willReturn(account); - Account result = bank.getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + Account result = bank.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_1); assertNotNull(account); assertEquals(result.getMoney(), account.getMoney()); diff --git a/src/test/java/ch/engenius/bank/context/DataContextUnitTest.java b/src/test/java/ch/engenius/bank/context/DataContextUnitTest.java index 72023b5..44c774a 100644 --- a/src/test/java/ch/engenius/bank/context/DataContextUnitTest.java +++ b/src/test/java/ch/engenius/bank/context/DataContextUnitTest.java @@ -55,9 +55,9 @@ public void givenInvalidAccountNumberThenGetAccountWillThrowException() throws A @Test public void givenValidAccountNumberThenGetAccountWillReturnAccount() throws AccountNotFoundException { Account account = new Account(BigDecimal.valueOf(100)); - given(dataContext.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account); + given(dataContext.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_1)).willReturn(account); - Account result = dataContext.getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + Account result = dataContext.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_1); assertNotNull(account); assertEquals(result.getMoney(), account.getMoney()); diff --git a/src/test/java/ch/engenius/bank/repository/AccountRepositoryUnitTest.java b/src/test/java/ch/engenius/bank/repository/AccountRepositoryUnitTest.java index 57bb5a1..55bfb7f 100644 --- a/src/test/java/ch/engenius/bank/repository/AccountRepositoryUnitTest.java +++ b/src/test/java/ch/engenius/bank/repository/AccountRepositoryUnitTest.java @@ -1,9 +1,9 @@ package ch.engenius.bank.repository; import ch.engenius.bank.TestData; -import ch.engenius.bank.context.DataContextUnitTest; import ch.engenius.bank.exception.AccountNotFoundException; import ch.engenius.bank.model.Account; +import ch.engenius.bank.repository.account.AccountRepositoryImpl; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -14,8 +14,8 @@ import static org.mockito.BDDMockito.given; public class AccountRepositoryUnitTest { - private AccountRepository accountRepository = - Mockito.mock(AccountRepository.class); + private AccountRepositoryImpl accountRepository = + Mockito.mock(AccountRepositoryImpl.class); private HashMap getBankAccounts() { HashMap accounts = new HashMap<>(); @@ -35,9 +35,9 @@ public void givenInvalidAccountNumberThenGetAccountWillThrowException() throws A @Test public void givenValidAccountNumberThenGetAccountWillReturnAccount() throws AccountNotFoundException { Account account = new Account(BigDecimal.valueOf(100)); - given(accountRepository.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account); + given(accountRepository.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_1)).willReturn(account); - Account result = accountRepository.getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + Account result = accountRepository.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_1); assertNotNull(account); assertEquals(result.getMoney(), account.getMoney()); diff --git a/src/test/java/ch/engenius/bank/repository/BankRepositoryUnitTest.java b/src/test/java/ch/engenius/bank/repository/BankRepositoryUnitTest.java index c6b4987..a82a700 100644 --- a/src/test/java/ch/engenius/bank/repository/BankRepositoryUnitTest.java +++ b/src/test/java/ch/engenius/bank/repository/BankRepositoryUnitTest.java @@ -1,8 +1,8 @@ package ch.engenius.bank.repository; import ch.engenius.bank.TestData; -import ch.engenius.bank.context.DataContextUnitTest; import ch.engenius.bank.model.Account; +import ch.engenius.bank.repository.bank.BankRepositoryImpl; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -14,8 +14,8 @@ import static org.mockito.BDDMockito.then; public class BankRepositoryUnitTest { - private BankRepository bankRepository = - Mockito.mock(BankRepository.class); + private BankRepositoryImpl bankRepository = + Mockito.mock(BankRepositoryImpl.class); @Test diff --git a/src/test/java/ch/engenius/bank/runner/BankRunnerUnitTest.java b/src/test/java/ch/engenius/bank/runner/BankRunnerUnitTest.java deleted file mode 100644 index 27b914a..0000000 --- a/src/test/java/ch/engenius/bank/runner/BankRunnerUnitTest.java +++ /dev/null @@ -1,5 +0,0 @@ -package ch.engenius.bank.runner; - -public class BankRunnerUnitTest { - -} diff --git a/src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.java b/src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.java deleted file mode 100644 index c2c163b..0000000 --- a/src/test/java/ch/engenius/bank/runner/runner_helper/BankRunnerSanityCheckerUnitTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package ch.engenius.bank.runner.runner_helper; - -import ch.engenius.bank.service.account.AccountService; -import ch.engenius.bank.service.account.AccountServiceImpl; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - -public class BankRunnerSanityCheckerUnitTest { - private final AccountService accountService = - Mockito.mock(AccountServiceImpl.class); - - @Test - public void givenSanityCheckThenShouldSucceed() { - - } -} diff --git a/src/test/java/ch/engenius/bank/service/AccountServiceUnitTest.java b/src/test/java/ch/engenius/bank/service/AccountServiceUnitTest.java index 43c5611..0621e2b 100644 --- a/src/test/java/ch/engenius/bank/service/AccountServiceUnitTest.java +++ b/src/test/java/ch/engenius/bank/service/AccountServiceUnitTest.java @@ -3,6 +3,8 @@ import ch.engenius.bank.TestData; import ch.engenius.bank.exception.AccountNotFoundException; import ch.engenius.bank.model.Account; +import ch.engenius.bank.repository.account.AccountRepository; +import ch.engenius.bank.repository.account.AccountRepositoryImpl; import ch.engenius.bank.service.account.AccountService; import ch.engenius.bank.service.account.AccountServiceImpl; import org.junit.jupiter.api.Test; @@ -14,11 +16,16 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; public class AccountServiceUnitTest { private AccountService accountService = Mockito.mock(AccountServiceImpl.class); + private AccountRepository accountRepository = + Mockito.mock(AccountRepositoryImpl.class); + private HashMap getBankAccounts() { HashMap accounts = new HashMap<>(); for (int i = 0; i < TestData.ACCOUNTS_NUM; i++) { @@ -37,9 +44,9 @@ public void givenInvalidAccountNumberThenGetAccountWillThrowException() throws A @Test public void givenValidAccountNumberThenGetAccountWillReturnAccount() throws AccountNotFoundException { Account account = new Account(BigDecimal.valueOf(100)); - given(accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account); + given(accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_1)).willReturn(account); - Account result = accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + Account result = accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_1); assertNotNull(account); assertEquals(result.getMoney(), account.getMoney()); @@ -50,27 +57,24 @@ public void givenMakeTransactionWithInvalidAccountNumberWillThrowException() thr BigDecimal amount = BigDecimal.valueOf(100); given(accountService.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)).willThrow(AccountNotFoundException.class); - accountService.makeTransaction(TestData.NON_EXISTING_ACCOUNT_NUMBER, TestData.EXISTING_ACCOUNT_NUMBER, amount); + accountService.makeTransaction(TestData.NON_EXISTING_ACCOUNT_NUMBER, TestData.EXISTING_ACCOUNT_NUMBER_1, amount); assertThrows(AccountNotFoundException.class, () -> accountService.getAccount(TestData.NON_EXISTING_ACCOUNT_NUMBER)); } - // TODO: @Test public void givenMakeTransactionWithValidAccountNumberWillSucceed() throws AccountNotFoundException, InterruptedException { - getBankAccounts(); BigDecimal amount = BigDecimal.valueOf(TestData.DEFAULT_DEPOSIT); BigDecimal transactionAmount = BigDecimal.valueOf(100); Account account1 = new Account(amount); Account account2 = new Account(amount); - given(accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER)).willReturn(account1); + given(accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_1)).willReturn(account1); given(accountService.getAccount(TestData.EXISTING_ACCOUNT_NUMBER_2)).willReturn(account2); - accountService.makeTransaction(TestData.EXISTING_ACCOUNT_NUMBER, TestData.EXISTING_ACCOUNT_NUMBER_2, transactionAmount); + accountService.makeTransaction(TestData.EXISTING_ACCOUNT_NUMBER_1, TestData.EXISTING_ACCOUNT_NUMBER_2, transactionAmount); - then(accountService) - .should() - .getAccount(TestData.EXISTING_ACCOUNT_NUMBER); + verify(accountService, times(1)) + .makeTransaction(TestData.EXISTING_ACCOUNT_NUMBER_1, TestData.EXISTING_ACCOUNT_NUMBER_2, transactionAmount); } @Test