diff --git a/.gitignore b/.gitignore
index e2cf1c9..5679128 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,7 @@
.gradle
build/
out/
+.DS_Store
+src/.DS_Store
+src/main/.DS_Store
+src/test/.DS_Store
diff --git a/build.gradle b/build.gradle
index dd91bd7..ea0ba68 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,44 +1,55 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.3.RELEASE")
+ }
+}
+
group = 'org.springframework.samples'
version = '1.0.0.SNAPSHOT'
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
-apply from: 'src/build/admin-tasks.gradle'
+apply plugin: 'org.springframework.boot'
+//apply from: 'src/build/admin-tasks.gradle'
repositories {
- //mavenRepo urls: 'http://maven.springframework.org/milestone'
mavenCentral()
}
dependencies {
- //compile 'org.springframework:spring-context:3.1.0.M1'
- // https://mvnrepository.com/artifact/org.springframework/spring-context
+ // tag::jetty[]
+ compile("org.springframework.boot:spring-boot-starter-web") {
+ exclude module: "spring-boot-starter-tomcat"
+ }
+ compile("org.springframework.boot:spring-boot-starter-jetty")
+ // end::jetty[]
+ // tag::actuator[]
+ compile("org.springframework.boot:spring-boot-starter-actuator")
+ // end::actuator[]
compile group: 'org.springframework', name: 'spring-context', version: '3.1.0.RELEASE'
- // https://mvnrepository.com/artifact/org.springframework/spring-jdbc
compile group: 'org.springframework', name: 'spring-jdbc', version: '3.1.0.RELEASE'
- //compile 'org.springframework:spring-jdbc:3.1.0.M1'
compile 'cglib:cglib-nodep:2.2'
compile 'hsqldb:hsqldb:1.8.0.10'
compile 'commons-logging:commons-logging:1.1.1'
- compile 'log4j:log4j:1.2.16'
+ //compile 'log4j:log4j:1.2.16'
compile 'javax.inject:javax.inject:1'
- //testCompile 'org.springframework:spring-test:3.1.0.M1'
testCompile 'junit:junit:4.7'
}
[compileJava, compileTestJava]*.options*.compilerArgs = ['-Xlint:all']
-sourceCompatibility = 1.6
-targetCompatibility = 1.6
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
task wee(type: Wrapper) {
gradleVersion = '2.10' //we want gradle 2.10 to run this project
}
-
-// consolidate source directories for ease of browsing
sourceSets {
main {
java { srcDir 'src/main' }
diff --git a/src/main/java/com/bank/Application.java b/src/main/java/com/bank/Application.java
new file mode 100644
index 0000000..02a4429
--- /dev/null
+++ b/src/main/java/com/bank/Application.java
@@ -0,0 +1,33 @@
+package com.bank;
+
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+
+import java.util.Arrays;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+ @Bean
+ public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
+ return args -> {
+
+ System.out.println("Let's inspect the beans provided by Spring Boot:");
+
+ String[] beanNames = ctx.getBeanDefinitionNames();
+ Arrays.sort(beanNames);
+ for (String beanName : beanNames) {
+ System.out.println(beanName);
+ }
+
+ };
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/bank/controller/TransferController.java b/src/main/java/com/bank/controller/TransferController.java
new file mode 100644
index 0000000..65f675f
--- /dev/null
+++ b/src/main/java/com/bank/controller/TransferController.java
@@ -0,0 +1,14 @@
+package com.bank.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class TransferController {
+
+ @RequestMapping("/")
+ public String index() {
+ return "Greetings from Spring Boot!";
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/com/bank/domain/Account.java b/src/main/java/com/bank/domain/Account.java
similarity index 100%
rename from src/main/com/bank/domain/Account.java
rename to src/main/java/com/bank/domain/Account.java
diff --git a/src/main/java/com/bank/domain/DefaultTransferWindow.java b/src/main/java/com/bank/domain/DefaultTransferWindow.java
new file mode 100644
index 0000000..932b3e7
--- /dev/null
+++ b/src/main/java/com/bank/domain/DefaultTransferWindow.java
@@ -0,0 +1,23 @@
+package com.bank.domain;
+
+import java.time.LocalTime;
+
+public class DefaultTransferWindow {
+ private LocalTime open;
+ private LocalTime close;
+ public DefaultTransferWindow(String open, String close) {
+ this.open = LocalTime.parse(open);
+ this.close = LocalTime.parse(close);
+ }
+
+ public boolean isValidTimeForTransferMoney(LocalTime transactionTime) {
+ return (transactionTime.isAfter(open))&&(transactionTime.isBefore(close));
+ }
+
+ public LocalTime getOpen() {
+ return this.open;
+ }
+ public LocalTime getClose() {
+ return this.close;
+ }
+}
diff --git a/src/main/com/bank/domain/DepositReceipt.java b/src/main/java/com/bank/domain/DepositReceipt.java
similarity index 100%
rename from src/main/com/bank/domain/DepositReceipt.java
rename to src/main/java/com/bank/domain/DepositReceipt.java
diff --git a/src/main/com/bank/domain/InsufficientFundsException.java b/src/main/java/com/bank/domain/InsufficientFundsException.java
similarity index 100%
rename from src/main/com/bank/domain/InsufficientFundsException.java
rename to src/main/java/com/bank/domain/InsufficientFundsException.java
diff --git a/src/main/com/bank/domain/InvalidDepositAmountException.java b/src/main/java/com/bank/domain/InvalidDepositAmountException.java
similarity index 100%
rename from src/main/com/bank/domain/InvalidDepositAmountException.java
rename to src/main/java/com/bank/domain/InvalidDepositAmountException.java
diff --git a/src/main/java/com/bank/domain/LocalTimeWrapper.java b/src/main/java/com/bank/domain/LocalTimeWrapper.java
new file mode 100644
index 0000000..3758081
--- /dev/null
+++ b/src/main/java/com/bank/domain/LocalTimeWrapper.java
@@ -0,0 +1,23 @@
+package com.bank.domain;
+
+import org.omg.CORBA.Current;
+
+import java.time.LocalTime;
+
+public class LocalTimeWrapper {
+
+ private String specificTime = null;
+ public LocalTimeWrapper(String initial){
+ this.specificTime = initial;
+ }
+
+ public LocalTimeWrapper() {
+
+ }
+
+ public LocalTime getCurrentTime() {
+ if(this.specificTime != null)
+ return LocalTime.parse(this.specificTime);
+ return LocalTime.now();
+ }
+}
diff --git a/src/main/com/bank/domain/TransferReceipt.java b/src/main/java/com/bank/domain/TransferReceipt.java
similarity index 94%
rename from src/main/com/bank/domain/TransferReceipt.java
rename to src/main/java/com/bank/domain/TransferReceipt.java
index f6b3ae0..bb1d6bc 100644
--- a/src/main/com/bank/domain/TransferReceipt.java
+++ b/src/main/java/com/bank/domain/TransferReceipt.java
@@ -15,6 +15,8 @@
*/
package com.bank.domain;
+import java.time.LocalTime;
+
import static java.lang.String.format;
public class TransferReceipt {
@@ -25,6 +27,12 @@ public class TransferReceipt {
private Account initialDestinationAccountCopy;
private Account finalSourceAccountCopy;
private Account finalDestinationAccountCopy;
+ private LocalTime transactionTime;
+
+
+ public TransferReceipt(LocalTime transactionTime) {
+ this.transactionTime = transactionTime;
+ }
public void setTransferAmount(double transferAmount) {
this.transferAmount = transferAmount;
diff --git a/src/main/com/bank/repository/AccountNotFoundException.java b/src/main/java/com/bank/repository/AccountNotFoundException.java
similarity index 100%
rename from src/main/com/bank/repository/AccountNotFoundException.java
rename to src/main/java/com/bank/repository/AccountNotFoundException.java
diff --git a/src/main/com/bank/repository/AccountRepository.java b/src/main/java/com/bank/repository/AccountRepository.java
similarity index 100%
rename from src/main/com/bank/repository/AccountRepository.java
rename to src/main/java/com/bank/repository/AccountRepository.java
diff --git a/src/main/com/bank/repository/internal/JdbcAccountRepository.java b/src/main/java/com/bank/repository/internal/JdbcAccountRepository.java
similarity index 100%
rename from src/main/com/bank/repository/internal/JdbcAccountRepository.java
rename to src/main/java/com/bank/repository/internal/JdbcAccountRepository.java
diff --git a/src/main/com/bank/repository/internal/SimpleAccountRepository.java b/src/main/java/com/bank/repository/internal/SimpleAccountRepository.java
similarity index 100%
rename from src/main/com/bank/repository/internal/SimpleAccountRepository.java
rename to src/main/java/com/bank/repository/internal/SimpleAccountRepository.java
diff --git a/src/main/com/bank/service/DepositService.java b/src/main/java/com/bank/service/DepositService.java
similarity index 100%
rename from src/main/com/bank/service/DepositService.java
rename to src/main/java/com/bank/service/DepositService.java
diff --git a/src/main/com/bank/service/FeePolicy.java b/src/main/java/com/bank/service/FeePolicy.java
similarity index 100%
rename from src/main/com/bank/service/FeePolicy.java
rename to src/main/java/com/bank/service/FeePolicy.java
diff --git a/src/main/com/bank/service/TransferService.java b/src/main/java/com/bank/service/TransferService.java
similarity index 88%
rename from src/main/com/bank/service/TransferService.java
rename to src/main/java/com/bank/service/TransferService.java
index 3b886d5..05d5a1b 100644
--- a/src/main/com/bank/service/TransferService.java
+++ b/src/main/java/com/bank/service/TransferService.java
@@ -17,11 +17,12 @@
import com.bank.domain.InsufficientFundsException;
import com.bank.domain.TransferReceipt;
+import com.bank.service.internal.InvalidTransferWindow;
public interface TransferService {
TransferReceipt transfer(double amount, String srcAcctId, String destAcctId)
- throws InsufficientFundsException;
+ throws InsufficientFundsException, InvalidTransferWindow;
void setMinimumTransferAmount(double minimumTransferAmount);
}
diff --git a/src/main/com/bank/service/internal/DefaultDepositService.java b/src/main/java/com/bank/service/internal/DefaultDepositService.java
similarity index 100%
rename from src/main/com/bank/service/internal/DefaultDepositService.java
rename to src/main/java/com/bank/service/internal/DefaultDepositService.java
diff --git a/src/main/com/bank/service/internal/DefaultTransferService.java b/src/main/java/com/bank/service/internal/DefaultTransferService.java
similarity index 64%
rename from src/main/com/bank/service/internal/DefaultTransferService.java
rename to src/main/java/com/bank/service/internal/DefaultTransferService.java
index 63c4c06..f2f254f 100644
--- a/src/main/com/bank/service/internal/DefaultTransferService.java
+++ b/src/main/java/com/bank/service/internal/DefaultTransferService.java
@@ -17,24 +17,31 @@
import static java.lang.String.format;
+import com.bank.domain.*;
import org.springframework.transaction.annotation.Transactional;
-import com.bank.domain.Account;
-import com.bank.domain.InsufficientFundsException;
-import com.bank.domain.TransferReceipt;
import com.bank.repository.AccountRepository;
import com.bank.service.FeePolicy;
import com.bank.service.TransferService;
+import java.time.LocalTime;
+
public class DefaultTransferService implements TransferService {
private final AccountRepository accountRepository;
private final FeePolicy feePolicy;
private double minimumTransferAmount = 1.00;
+ private LocalTimeWrapper localTimeWrapper;
+ private DefaultTransferWindow defaultTransferWindow;
- public DefaultTransferService(AccountRepository accountRepository, FeePolicy feePolicy) {
+ public DefaultTransferService(AccountRepository accountRepository,
+ FeePolicy feePolicy,
+ LocalTimeWrapper localTimeWrapper,
+ DefaultTransferWindow transferWindow) {
this.accountRepository = accountRepository;
this.feePolicy = feePolicy;
+ this.localTimeWrapper = localTimeWrapper;
+ this.defaultTransferWindow = transferWindow;
}
@Override
@@ -44,36 +51,47 @@ public void setMinimumTransferAmount(double minimumTransferAmount) {
@Override
@Transactional
- public TransferReceipt transfer(double amount, String srcAcctId, String dstAcctId) throws InsufficientFundsException {
- if (amount < minimumTransferAmount) {
- throw new IllegalArgumentException(format("transfer amount must be at least $%.2f", minimumTransferAmount));
- }
+ public TransferReceipt transfer(double amount, String srcAcctId, String dstAcctId)
+ throws InsufficientFundsException, InvalidTransferWindow {
- TransferReceipt receipt = new TransferReceipt();
+ LocalTime transactionTime = this.localTimeWrapper.getCurrentTime();
+ checkEligibility(amount, transactionTime);
Account srcAcct = accountRepository.findById(srcAcctId);
Account dstAcct = accountRepository.findById(dstAcctId);
- receipt.setInitialSourceAccount(srcAcct);
- receipt.setInitialDestinationAccount(dstAcct);
-
double fee = feePolicy.calculateFee(amount);
if (fee > 0) {
srcAcct.debit(fee);
}
-
- receipt.setTransferAmount(amount);
- receipt.setFeeAmount(fee);
-
srcAcct.debit(amount);
dstAcct.credit(amount);
accountRepository.updateBalance(srcAcct);
accountRepository.updateBalance(dstAcct);
+ return getTransferReceipt(amount, transactionTime, srcAcct, dstAcct, fee);
+ }
+
+ private TransferReceipt getTransferReceipt(double amount, LocalTime transactionTime, Account srcAcct, Account dstAcct, double fee) {
+ TransferReceipt receipt = new TransferReceipt(transactionTime);
+ receipt.setInitialSourceAccount(srcAcct);
+ receipt.setInitialDestinationAccount(dstAcct);
+ receipt.setTransferAmount(amount);
+ receipt.setFeeAmount(fee);
receipt.setFinalSourceAccount(srcAcct);
receipt.setFinalDestinationAccount(dstAcct);
-
return receipt;
}
+
+ private void checkEligibility(double amount, LocalTime transactionTime) throws InvalidTransferWindow {
+ if (amount < minimumTransferAmount) {
+ throw new IllegalArgumentException(format("transfer amount must be at least $%.2f", minimumTransferAmount));
+ }
+
+
+ if(!defaultTransferWindow.isValidTimeForTransferMoney(transactionTime)) {
+ throw new InvalidTransferWindow("We only allow to transfer between " + defaultTransferWindow.getOpen() + " and " + defaultTransferWindow.getClose());
+ }
+ }
}
diff --git a/src/main/com/bank/service/internal/FlatFeePolicy.java b/src/main/java/com/bank/service/internal/FlatFeePolicy.java
similarity index 100%
rename from src/main/com/bank/service/internal/FlatFeePolicy.java
rename to src/main/java/com/bank/service/internal/FlatFeePolicy.java
diff --git a/src/main/java/com/bank/service/internal/InvalidTransferWindow.java b/src/main/java/com/bank/service/internal/InvalidTransferWindow.java
new file mode 100644
index 0000000..8bd8da6
--- /dev/null
+++ b/src/main/java/com/bank/service/internal/InvalidTransferWindow.java
@@ -0,0 +1,6 @@
+package com.bank.service.internal;
+
+public class InvalidTransferWindow extends Throwable {
+ public InvalidTransferWindow(String s) {
+ }
+}
diff --git a/src/main/com/bank/service/internal/VariableFeePolicy.java b/src/main/java/com/bank/service/internal/VariableFeePolicy.java
similarity index 100%
rename from src/main/com/bank/service/internal/VariableFeePolicy.java
rename to src/main/java/com/bank/service/internal/VariableFeePolicy.java
diff --git a/src/main/com/bank/service/internal/ZeroFeePolicy.java b/src/main/java/com/bank/service/internal/ZeroFeePolicy.java
similarity index 100%
rename from src/main/com/bank/service/internal/ZeroFeePolicy.java
rename to src/main/java/com/bank/service/internal/ZeroFeePolicy.java
diff --git a/src/main/com/bank/config/sql/schema.sql b/src/main/resources/sql/schema.sql
similarity index 100%
rename from src/main/com/bank/config/sql/schema.sql
rename to src/main/resources/sql/schema.sql
diff --git a/src/main/com/bank/config/sql/test-data.sql b/src/main/resources/sql/test-data.sql
similarity index 100%
rename from src/main/com/bank/config/sql/test-data.sql
rename to src/main/resources/sql/test-data.sql
diff --git a/src/main/com/bank/config/xml/transfer-service-config.xml b/src/main/resources/xml/transfer-service-config.xml
similarity index 70%
rename from src/main/com/bank/config/xml/transfer-service-config.xml
rename to src/main/resources/xml/transfer-service-config.xml
index 7d16453..b5a49b5 100644
--- a/src/main/com/bank/config/xml/transfer-service-config.xml
+++ b/src/main/resources/xml/transfer-service-config.xml
@@ -10,6 +10,8 @@
+
+
@@ -18,10 +20,17 @@
+
+
+
+
+
+
+
-
-
+
+
diff --git a/src/test/com/bank/service/internal/DefaultTransferWindowTest.java b/src/test/com/bank/service/internal/DefaultTransferWindowTest.java
deleted file mode 100644
index b51fa87..0000000
--- a/src/test/com/bank/service/internal/DefaultTransferWindowTest.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.bank.service.internal;
-
-public class DefaultTransferWindowTest {
-}
diff --git a/src/test/com/bank/config/xml/IntegrationTests.java b/src/test/java/com/bank/integration/IntegrationTests.java
similarity index 90%
rename from src/test/com/bank/config/xml/IntegrationTests.java
rename to src/test/java/com/bank/integration/IntegrationTests.java
index 0656e32..9d556f8 100644
--- a/src/test/com/bank/config/xml/IntegrationTests.java
+++ b/src/test/java/com/bank/integration/IntegrationTests.java
@@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.bank.config.xml;
+package com.bank.integration;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
+import com.bank.service.internal.InvalidTransferWindow;
import org.junit.Test;
import org.springframework.context.support.GenericXmlApplicationContext;
@@ -28,10 +29,10 @@
public class IntegrationTests {
@Test
- public void transferTenDollars() throws InsufficientFundsException {
+ public void transferTenDollars() throws InsufficientFundsException, InvalidTransferWindow {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.getEnvironment().setActiveProfiles("dev");
- ctx.load("classpath:/com/bank/config/xml/transfer-service-config.xml");
+ ctx.load("classpath:/xml/transfer-service-config.xml");
ctx.refresh();
TransferService transferService = ctx.getBean(TransferService.class);
diff --git a/src/test/com/bank/service/internal/DefaultDepositServiceTests.java b/src/test/java/com/bank/service/internal/DefaultDepositServiceTests.java
similarity index 100%
rename from src/test/com/bank/service/internal/DefaultDepositServiceTests.java
rename to src/test/java/com/bank/service/internal/DefaultDepositServiceTests.java
diff --git a/src/test/com/bank/service/internal/DefaultTransferServiceTests.java b/src/test/java/com/bank/service/internal/DefaultTransferServiceTests.java
similarity index 72%
rename from src/test/com/bank/service/internal/DefaultTransferServiceTests.java
rename to src/test/java/com/bank/service/internal/DefaultTransferServiceTests.java
index 846befc..c1db243 100644
--- a/src/test/com/bank/service/internal/DefaultTransferServiceTests.java
+++ b/src/test/java/com/bank/service/internal/DefaultTransferServiceTests.java
@@ -5,6 +5,8 @@
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
+import com.bank.domain.LocalTimeWrapper;
+import com.bank.domain.DefaultTransferWindow;
import org.junit.Before;
import org.junit.Test;
@@ -15,9 +17,6 @@
import com.bank.repository.internal.SimpleAccountRepository;
import com.bank.service.FeePolicy;
import com.bank.service.TransferService;
-import com.bank.service.internal.FlatFeePolicy;
-import com.bank.service.internal.DefaultTransferService;
-import com.bank.service.internal.ZeroFeePolicy;
public class DefaultTransferServiceTests {
@@ -28,14 +27,37 @@ public class DefaultTransferServiceTests {
public void setUp() {
accountRepository = new SimpleAccountRepository();
FeePolicy feePolicy = new ZeroFeePolicy();
- transferService = new DefaultTransferService(accountRepository, feePolicy);
+ LocalTimeWrapper localTimeWrapper = new LocalTimeWrapper();
+ DefaultTransferWindow transferWindow = new DefaultTransferWindow("06:00:00", "22:00:00");
+ transferService = new DefaultTransferService(accountRepository, feePolicy, localTimeWrapper, transferWindow);
assertThat(accountRepository.findById(A123_ID).getBalance(), equalTo(A123_INITIAL_BAL));
assertThat(accountRepository.findById(C456_ID).getBalance(), equalTo(C456_INITIAL_BAL));
}
@Test
- public void testTransfer() throws InsufficientFundsException {
+ public void invalidTransferWindow() {
+ double transferAmount = 100.00;
+ LocalTimeWrapper localTimeWrapper = new LocalTimeWrapper("23:00:00");
+ DefaultTransferWindow transferWindow = new DefaultTransferWindow("06:00:00", "22:00:00");
+ accountRepository = new SimpleAccountRepository();
+ FeePolicy feePolicy = new ZeroFeePolicy();
+ transferService = new DefaultTransferService(accountRepository, feePolicy, localTimeWrapper, transferWindow);
+
+ try {
+ transferService.transfer(transferAmount, A123_ID, C456_ID);
+ fail("expected InvalidTransactionWindowTime");
+ } catch (InsufficientFundsException e) {
+ //e.printStackTrace();
+ } catch (InvalidTransferWindow invalidTransferWindow) {
+ //invalidTransferWindow.printStackTrace();
+ }
+ assertThat(accountRepository.findById(A123_ID).getBalance(), equalTo(A123_INITIAL_BAL));
+ assertThat(accountRepository.findById(C456_ID).getBalance(), equalTo(C456_INITIAL_BAL));
+ }
+
+ @Test
+ public void testTransfer() throws InsufficientFundsException, InvalidTransferWindow {
double transferAmount = 100.00;
TransferReceipt receipt = transferService.transfer(transferAmount, A123_ID, C456_ID);
@@ -49,7 +71,7 @@ public void testTransfer() throws InsufficientFundsException {
}
@Test
- public void testInsufficientFunds() {
+ public void testInsufficientFunds() throws InvalidTransferWindow {
double overage = 9.00;
double transferAmount = A123_INITIAL_BAL + overage;
@@ -66,7 +88,7 @@ public void testInsufficientFunds() {
}
@Test
- public void testNonExistentSourceAccount() throws InsufficientFundsException {
+ public void testNonExistentSourceAccount() throws InsufficientFundsException, InvalidTransferWindow {
try {
transferService.transfer(1.00, Z999_ID, C456_ID);
fail("expected AccountNotFoundException");
@@ -77,7 +99,7 @@ public void testNonExistentSourceAccount() throws InsufficientFundsException {
}
@Test
- public void testNonExistentDestinationAccount() throws InsufficientFundsException {
+ public void testNonExistentDestinationAccount() throws InsufficientFundsException, InvalidTransferWindow {
try {
transferService.transfer(1.00, A123_ID, Z999_ID);
fail("expected AccountNotFoundException");
@@ -88,7 +110,7 @@ public void testNonExistentDestinationAccount() throws InsufficientFundsExceptio
}
@Test
- public void testZeroTransferAmount() throws InsufficientFundsException {
+ public void testZeroTransferAmount() throws InsufficientFundsException, InvalidTransferWindow {
try {
transferService.transfer(0.00, A123_ID, C456_ID);
fail("expected IllegalArgumentException");
@@ -97,7 +119,7 @@ public void testZeroTransferAmount() throws InsufficientFundsException {
}
@Test
- public void testNegativeTransferAmount() throws InsufficientFundsException {
+ public void testNegativeTransferAmount() throws InsufficientFundsException, InvalidTransferWindow {
try {
transferService.transfer(-100.00, A123_ID, C456_ID);
fail("expected IllegalArgumentException");
@@ -106,7 +128,7 @@ public void testNegativeTransferAmount() throws InsufficientFundsException {
}
@Test
- public void testTransferAmountLessThanOneCent() throws InsufficientFundsException {
+ public void testTransferAmountLessThanOneCent() throws InsufficientFundsException, InvalidTransferWindow {
try {
transferService.transfer(0.009, A123_ID, C456_ID);
fail("expected IllegalArgumentException");
@@ -115,7 +137,7 @@ public void testTransferAmountLessThanOneCent() throws InsufficientFundsExceptio
}
@Test
- public void testCustomizedMinimumTransferAmount() throws InsufficientFundsException {
+ public void testCustomizedMinimumTransferAmount() throws InsufficientFundsException, InvalidTransferWindow {
transferService.transfer(1.00, A123_ID, C456_ID); // should be fine
transferService.setMinimumTransferAmount(10.00);
transferService.transfer(10.00, A123_ID, C456_ID); // fine against new minimum
@@ -127,10 +149,12 @@ public void testCustomizedMinimumTransferAmount() throws InsufficientFundsExcept
}
@Test
- public void testNonZeroFeePolicy() throws InsufficientFundsException {
+ public void testNonZeroFeePolicy() throws InsufficientFundsException, InvalidTransferWindow {
double flatFee = 5.00;
double transferAmount = 10.00;
- transferService = new DefaultTransferService(accountRepository, new FlatFeePolicy(flatFee));
+ LocalTimeWrapper localTimeWrapper = new LocalTimeWrapper();
+ DefaultTransferWindow transferWindow = new DefaultTransferWindow("06:00:00", "22:00:00");
+ transferService = new DefaultTransferService(accountRepository, new FlatFeePolicy(flatFee), localTimeWrapper, transferWindow);
transferService.transfer(transferAmount, A123_ID, C456_ID);
assertThat(accountRepository.findById(A123_ID).getBalance(), equalTo(A123_INITIAL_BAL - transferAmount - flatFee));
assertThat(accountRepository.findById(C456_ID).getBalance(), equalTo(C456_INITIAL_BAL + transferAmount));
diff --git a/src/test/java/com/bank/service/internal/DefaultTransferWindowTest.java b/src/test/java/com/bank/service/internal/DefaultTransferWindowTest.java
new file mode 100644
index 0000000..eb389c4
--- /dev/null
+++ b/src/test/java/com/bank/service/internal/DefaultTransferWindowTest.java
@@ -0,0 +1,24 @@
+package com.bank.service.internal;
+
+import com.bank.domain.LocalTimeWrapper;
+import com.bank.domain.DefaultTransferWindow;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class DefaultTransferWindowTest {
+ @Test
+ public void withinValidTransferWindow() {
+ LocalTimeWrapper x = new LocalTimeWrapper();
+ LocalTimeWrapper localTimeWrapper = new LocalTimeWrapper("12:05:59");
+ DefaultTransferWindow transferWindow = new DefaultTransferWindow("10:00:00", "22:00:00");
+ Assert.assertTrue(transferWindow.isValidTimeForTransferMoney(localTimeWrapper.getCurrentTime()));
+ }
+
+ @Test
+ public void withinInValidTransferWindow() {
+ LocalTimeWrapper localTimeWrapper = new LocalTimeWrapper("23:00:00");
+ DefaultTransferWindow transferWindow = new DefaultTransferWindow("10:00:00", "22:00:00");
+ Assert.assertFalse(transferWindow.isValidTimeForTransferMoney(localTimeWrapper.getCurrentTime()));
+ }
+
+}
diff --git a/src/test/com/bank/service/internal/VariableFeePolicyTests.java b/src/test/java/com/bank/service/internal/VariableFeePolicyTests.java
similarity index 100%
rename from src/test/com/bank/service/internal/VariableFeePolicyTests.java
rename to src/test/java/com/bank/service/internal/VariableFeePolicyTests.java
diff --git a/tdd-using-spring.ipr b/tdd-using-spring.ipr
index 090d734..01c1f3a 100644
--- a/tdd-using-spring.ipr
+++ b/tdd-using-spring.ipr
@@ -13,7 +13,7 @@
-
+
@@ -51,7 +51,7 @@
-
+