Migrate http-client to plain Java test

This commit is contained in:
Dave Syer
2016-07-18 07:52:27 +01:00
parent e03614c2f7
commit 81899839df
6 changed files with 79 additions and 101 deletions

View File

@@ -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]
}
----

View File

@@ -43,17 +43,11 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-stub-runner</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-spring</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
@@ -74,42 +68,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<testSources>
<testSource>
<directory>${project.basedir}/src/test/groovy</directory>
<includes>
<include>**/*.groovy</include>
</includes>
</testSource>
<testSource>
<directory>${project.build.directory}/generated-test-sources/accurest</directory>
<includes>
<include>**/*.groovy</include>
</includes>
</testSource>
</testSources>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Spec.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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[]
}

View File

@@ -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[]
}