From 81899839df486e80adb065b63ed949fd07cd7968 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 18 Jul 2016 07:52:27 +0100 Subject: [PATCH] Migrate http-client to plain Java test --- .../main/asciidoc/verifier/introduction.adoc | 22 ++++---- samples/standalone/http-client/pom.xml | 42 --------------- .../java/com/example/loan/model/Client.java | 7 +++ .../example/loan/model/LoanApplication.java | 8 +++ .../loan/LoanApplicationServiceSpec.groovy | 48 ----------------- .../loan/LoanApplicationServiceTests.java | 53 +++++++++++++++++++ 6 files changed, 79 insertions(+), 101 deletions(-) delete mode 100644 samples/standalone/http-client/src/test/groovy/com/example/loan/LoanApplicationServiceSpec.groovy create mode 100644 samples/standalone/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java diff --git a/docs/src/main/asciidoc/verifier/introduction.adoc b/docs/src/main/asciidoc/verifier/introduction.adoc index 3117f8841f..2ee7708603 100644 --- a/docs/src/main/asciidoc/verifier/introduction.adoc +++ b/docs/src/main/asciidoc/verifier/introduction.adoc @@ -109,7 +109,7 @@ we mark him as fraud). The current implementation grants loan to everybody. Of course both client and server development teams need to communicate directly and discuss changes while going through the process. CDC is all about communication. -The code is available under the `samples/samples-standalone/http-server` and `samples/samples-standalone/http-client` folders. +The code is available under the `samples/standalone/http-server` and `samples/standalone/http-client` folders. As a developer of the Loan Issuance service (a consumer to the Fraud Detection server): @@ -142,21 +142,21 @@ Code examples: [source,groovy,indent=0] ---- -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-client/src/test/groovy/com/example/loan/LoanApplicationServiceSpec.groovy[tags=client_tdd,indent=0] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-client/src/test/java/com/example/loan/LoanApplicationServiceSpec.java[tags=client_tdd,indent=0] ---- *at some point in time you need to send a request to the Fraud Detection service* [source,groovy,indent=0] ---- -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-client/src/main/java/com/example/loan/LoanApplicationService.java[tags=client_call_server,indent=0] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-client/src/main/java/com/example/loan/LoanApplicationService.java[tags=client_call_server,indent=0] ---- *you define the contract locally in the repo of Fraud Detection service* [source,groovy,indent=0] ---- -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-server/src/test/resources/contracts/shouldMarkClientAsFraud.groovy[] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-server/src/test/resources/contracts/shouldMarkClientAsFraud.groovy[] ---- *provide the group id and artifact id for the Spring Cloud Contract Stub Runner to download stubs of your collaborators* @@ -164,7 +164,7 @@ include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/ma [source,groovy,indent=0] ---- -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-client/src/test/resources/application.yaml[] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-client/src/test/resources/application.yaml[] ---- *SERVER* @@ -175,7 +175,7 @@ the API [source,java,indent=0] ---- -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] } ---- @@ -183,8 +183,8 @@ the initial impl [source,java,indent=0] ---- -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=initial_impl,indent=0] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=initial_impl,indent=0] } ---- @@ -192,9 +192,9 @@ include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/ma [source,java,indent=0] ---- -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=new_impl,indent=0] -include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=initial_impl,indent=0] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=new_impl,indent=0] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/standalone/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=initial_impl,indent=0] } ---- diff --git a/samples/standalone/http-client/pom.xml b/samples/standalone/http-client/pom.xml index 44dabfa182..2cf3465e03 100644 --- a/samples/standalone/http-client/pom.xml +++ b/samples/standalone/http-client/pom.xml @@ -43,17 +43,11 @@ spring-boot-starter-test test - org.springframework.cloud spring-cloud-contract-stub-runner test - - org.spockframework - spock-spring - test - @@ -74,42 +68,6 @@ org.springframework.boot spring-boot-maven-plugin - - org.codehaus.gmavenplus - gmavenplus-plugin - 1.5 - - - - testCompile - - - - - - - ${project.basedir}/src/test/groovy - - **/*.groovy - - - - ${project.build.directory}/generated-test-sources/accurest - - **/*.groovy - - - - - - - maven-surefire-plugin - - - **/*Spec.java - - - maven-deploy-plugin diff --git a/samples/standalone/http-client/src/main/java/com/example/loan/model/Client.java b/samples/standalone/http-client/src/main/java/com/example/loan/model/Client.java index c93978173b..abf66106b5 100644 --- a/samples/standalone/http-client/src/main/java/com/example/loan/model/Client.java +++ b/samples/standalone/http-client/src/main/java/com/example/loan/model/Client.java @@ -3,6 +3,13 @@ package com.example.loan.model; public class Client { private String pesel; + + public Client() { + } + + public Client(String pesel) { + this.pesel = pesel; + } public String getPesel() { return pesel; diff --git a/samples/standalone/http-client/src/main/java/com/example/loan/model/LoanApplication.java b/samples/standalone/http-client/src/main/java/com/example/loan/model/LoanApplication.java index a4c9212c0e..27d66f884c 100644 --- a/samples/standalone/http-client/src/main/java/com/example/loan/model/LoanApplication.java +++ b/samples/standalone/http-client/src/main/java/com/example/loan/model/LoanApplication.java @@ -10,6 +10,14 @@ public class LoanApplication { private String loanApplicationId; + public LoanApplication() { + } + + public LoanApplication(Client client, double amount) { + this.client = client; + this.amount = BigDecimal.valueOf(amount); + } + public Client getClient() { return client; } diff --git a/samples/standalone/http-client/src/test/groovy/com/example/loan/LoanApplicationServiceSpec.groovy b/samples/standalone/http-client/src/test/groovy/com/example/loan/LoanApplicationServiceSpec.groovy deleted file mode 100644 index bc9e3a9010..0000000000 --- a/samples/standalone/http-client/src/test/groovy/com/example/loan/LoanApplicationServiceSpec.groovy +++ /dev/null @@ -1,48 +0,0 @@ -package com.example.loan - -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.IntegrationTest; -import org.springframework.boot.test.context.SpringBootContextLoader -import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner; -import org.springframework.test.context.ContextConfiguration - -import spock.lang.Specification - -import com.example.loan.model.Client -import com.example.loan.model.LoanApplication -import com.example.loan.model.LoanApplicationResult -import com.example.loan.model.LoanApplicationStatus - -@ContextConfiguration(loader = SpringBootContextLoader, classes = Application) -@AutoConfigureStubRunner -@IntegrationTest("debug=true") -class LoanApplicationServiceSpec extends Specification { - - @Autowired - LoanApplicationService sut - - def 'should successfully apply for loan'() { - given: - LoanApplication application = - new LoanApplication(client: new Client(pesel: '1234567890'), amount: 123.123) - when: - LoanApplicationResult loanApplication = sut.loanApplication(application) - then: - loanApplication.loanApplicationStatus == LoanApplicationStatus.LOAN_APPLIED - loanApplication.rejectionReason == null - } - - // tag::client_tdd[] - def 'should be rejected due to abnormal loan amount'() { - given: - LoanApplication application = - new LoanApplication(client: new Client(pesel: '1234567890'), amount: 99_999) - when: - LoanApplicationResult loanApplication = sut.loanApplication(application) - then: - loanApplication.loanApplicationStatus == LoanApplicationStatus.LOAN_APPLICATION_REJECTED - loanApplication.rejectionReason == 'Amount too high' - } - // end::client_tdd[] - -} diff --git a/samples/standalone/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java b/samples/standalone/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java new file mode 100644 index 0000000000..c6a5235ee6 --- /dev/null +++ b/samples/standalone/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java @@ -0,0 +1,53 @@ +package com.example.loan; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner; +import org.springframework.test.context.junit4.SpringRunner; + +import com.example.loan.model.Client; +import com.example.loan.model.LoanApplication; +import com.example.loan.model.LoanApplicationResult; +import com.example.loan.model.LoanApplicationStatus; + +@RunWith(SpringRunner.class) +@SpringBootTest +@AutoConfigureStubRunner +public class LoanApplicationServiceTests { + + @Autowired + private LoanApplicationService sut; + + @Test + public void shouldSuccessfullyApplyForLoan() { + // given: + LoanApplication application = new LoanApplication(new Client("1234567890"), + 123.123); + // when: + LoanApplicationResult loanApplication = sut.loanApplication(application); + // then: + assertThat(loanApplication.getLoanApplicationStatus()) + .isEqualTo(LoanApplicationStatus.LOAN_APPLIED); + assertThat(loanApplication.getRejectionReason()).isNull(); + } + + // tag::client_tdd[] + @Test + public void shouldBeRejectedDueToAbnormalLoanAmount() { + // given: + LoanApplication application = new LoanApplication(new Client("1234567890"), + 99999); + // when: + LoanApplicationResult loanApplication = sut.loanApplication(application); + // then: + assertThat(loanApplication.getLoanApplicationStatus()) + .isEqualTo(LoanApplicationStatus.LOAN_APPLICATION_REJECTED); + assertThat(loanApplication.getRejectionReason()).isEqualTo("Amount too high"); + } + // end::client_tdd[] + +}