From 9961e9cb2e037420bdcce2738b2e6960889ee5ca Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 15 Jul 2016 14:41:33 +0200 Subject: [PATCH] Updated docs --- README.adoc | 85 ++++++++++++++++--- .../main/asciidoc/verifier/introduction.adoc | 26 +++--- .../spring-cloud-contract-verifier.adoc | 1 - 3 files changed, 85 insertions(+), 27 deletions(-) diff --git a/README.adoc b/README.adoc index 5a2013e9ef..376ea42ad5 100644 --- a/README.adoc +++ b/README.adoc @@ -41,7 +41,7 @@ Spring Cloud Contract Verifier moves TDD to the level of software architecture. Let us assume that we have a system comprising of multiple microservices: -image::{images_url}/Deps.png[Microservices Architecture] +image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/docs/src/main/asciidoc/images/Deps.png[Microservices Architecture] ==== Testing issues @@ -82,11 +82,11 @@ Disadvantages: To solve the aforementioned issues Spring Cloud Contract Verifier with Stub Runner were created. Their main idea is to give you very fast feedback, without the need to set up the whole world of microservices. -image::{images_url}/Stubs1.png[Stubbed Services] +image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/docs/src/main/asciidoc/images/Stubs1.png[Stubbed Services] If you work on stubs then the only applications you need are those that your application is using directly. -image::{images_url}/Stubs2.png[Stubbed Services] +image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/docs/src/main/asciidoc/images/Stubs2.png[Stubbed Services] Spring Cloud Contract Verifier gives you the certainty that the stubs that you're using were created by the service that you're calling. Also if you can use them it means that they were tested against the producer's side. In other words - you can trust those stubs. @@ -164,21 +164,61 @@ Code examples: [source,groovy,indent=0] ---- -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-client/src/test/groovy/com/example/loan/LoanApplicationServiceSpec.groovy[tags=client_tdd,indent=0] +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' +} ---- *at some point in time you need to send a request to the Fraud Detection service* [source,groovy,indent=0] ---- -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-client/src/main/java/com/example/loan/LoanApplicationService.java[tags=client_call_server,indent=0] +ResponseEntity response = + restTemplate.exchange("http://localhost:" + port + "/fraudcheck", HttpMethod.PUT, + new HttpEntity<>(request, httpHeaders), + FraudServiceResponse.class); ---- *you define the contract locally in the repo of Fraud Detection service* [source,groovy,indent=0] ---- -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-server/src/test/resources/contracts/shouldMarkClientAsFraud.groovy[] +package contracts + +org.springframework.cloud.contract.spec.Contract.make { + request { + method 'PUT' + url '/fraudcheck' + body(""" + { + "clientPesel":"${value(client(regex('[0-9]{10}')), server('1234567890'))}", + "loanAmount":99999} + """ + ) + headers { + header('Content-Type', 'application/vnd.fraud.v1+json') + } + + } + response { + status 200 + body( """{ + "fraudCheckStatus": "${value(client('FRAUD'), server(regex('[A-Z]{5}')))}", + "rejectionReason": "Amount too high" +}""") + headers { + header('Content-Type': value(server(regex('application/vnd.fraud.v1.json.*')), client('application/vnd.fraud.v1+json'))) + } + } + +} ---- *provide the group id and artifact id for the Spring Cloud Contract Stub Runner to download stubs of your collaborators* @@ -186,7 +226,9 @@ Unresolved directive in verifier/introduction.adoc - include::{standalone_sample [source,groovy,indent=0] ---- -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-client/src/test/resources/application.yaml[] +stubrunner: + work-offline: true + stubs.ids: 'com.example:http-server:+:stubs:8080' ---- *SERVER* @@ -197,7 +239,12 @@ the API [source,java,indent=0] ---- -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] +@RequestMapping( + value = "/fraudcheck", + method = PUT, + consumes = FRAUD_SERVICE_JSON_VERSION_1, + produces = FRAUD_SERVICE_JSON_VERSION_1) +public FraudCheckResult fraudCheck(@RequestBody FraudCheck fraudCheck) { } ---- @@ -205,8 +252,13 @@ the initial impl [source,java,indent=0] ---- -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=initial_impl,indent=0] +@RequestMapping( + value = "/fraudcheck", + method = PUT, + consumes = FRAUD_SERVICE_JSON_VERSION_1, + produces = FRAUD_SERVICE_JSON_VERSION_1) +public FraudCheckResult fraudCheck(@RequestBody FraudCheck fraudCheck) { +return new FraudCheckResult(FraudCheckStatus.OK, NO_REASON); } ---- @@ -214,9 +266,16 @@ Unresolved directive in verifier/introduction.adoc - include::{standalone_sample [source,java,indent=0] ---- -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=new_impl,indent=0] -Unresolved directive in verifier/introduction.adoc - include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=initial_impl,indent=0] +@RequestMapping( + value = "/fraudcheck", + method = PUT, + consumes = FRAUD_SERVICE_JSON_VERSION_1, + produces = FRAUD_SERVICE_JSON_VERSION_1) +public FraudCheckResult fraudCheck(@RequestBody FraudCheck fraudCheck) { +if (amountGreaterThanThreshold(fraudCheck)) { + return new FraudCheckResult(FraudCheckStatus.FRAUD, AMOUNT_TOO_HIGH); +} +return new FraudCheckResult(FraudCheckStatus.OK, NO_REASON); } ---- diff --git a/docs/src/main/asciidoc/verifier/introduction.adoc b/docs/src/main/asciidoc/verifier/introduction.adoc index bf6c77d6b9..6033f1223a 100644 --- a/docs/src/main/asciidoc/verifier/introduction.adoc +++ b/docs/src/main/asciidoc/verifier/introduction.adoc @@ -19,7 +19,7 @@ Spring Cloud Contract Verifier moves TDD to the level of software architecture. Let us assume that we have a system comprising of multiple microservices: -image::{images_url}/Deps.png[Microservices Architecture] +image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/docs/src/main/asciidoc/images/Deps.png[Microservices Architecture] ==== Testing issues @@ -60,11 +60,11 @@ Disadvantages: To solve the aforementioned issues Spring Cloud Contract Verifier with Stub Runner were created. Their main idea is to give you very fast feedback, without the need to set up the whole world of microservices. -image::{images_url}/Stubs1.png[Stubbed Services] +image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/docs/src/main/asciidoc/images/Stubs1.png[Stubbed Services] If you work on stubs then the only applications you need are those that your application is using directly. -image::{images_url}/Stubs2.png[Stubbed Services] +image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/docs/src/main/asciidoc/images/Stubs2.png[Stubbed Services] Spring Cloud Contract Verifier gives you the certainty that the stubs that you're using were created by the service that you're calling. Also if you can use them it means that they were tested against the producer's side. In other words - you can trust those stubs. @@ -142,21 +142,21 @@ Code examples: [source,groovy,indent=0] ---- -include::{standalone_samples_path}/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/samples-standalone/http-client/src/test/groovy/com/example/loan/LoanApplicationServiceSpec.groovy[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::{standalone_samples_path}/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/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::{standalone_samples_path}/http-server/src/test/resources/contracts/shouldMarkClientAsFraud.groovy[] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/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::{standalone_samples_path}/http-server/src/test/resources/contracts/shou [source,groovy,indent=0] ---- -include::{standalone_samples_path}/http-client/src/test/resources/application.yaml[] +include::https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/samples/samples-standalone/http-client/src/test/resources/application.yaml[] ---- *SERVER* @@ -175,7 +175,7 @@ the API [source,java,indent=0] ---- -include::{standalone_samples_path}/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=server_api,indent=0] } ---- @@ -183,8 +183,8 @@ the initial impl [source,java,indent=0] ---- -include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] -include::{standalone_samples_path}/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/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] } ---- @@ -192,9 +192,9 @@ include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/F [source,java,indent=0] ---- -include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=server_api,indent=0] -include::{standalone_samples_path}/http-server/src/main/java/com/example/fraud/FraudDetectionController.java[tags=new_impl,indent=0] -include::{standalone_samples_path}/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/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] } ---- diff --git a/docs/src/main/asciidoc/verifier/spring-cloud-contract-verifier.adoc b/docs/src/main/asciidoc/verifier/spring-cloud-contract-verifier.adoc index 4ecd997026..9e107e1c02 100644 --- a/docs/src/main/asciidoc/verifier/spring-cloud-contract-verifier.adoc +++ b/docs/src/main/asciidoc/verifier/spring-cloud-contract-verifier.adoc @@ -5,7 +5,6 @@ :verifier_core_path: {verifier_root_path}/spring-cloud-contract-verifier-core :stubrunner_core_path: {core_path}/spring-cloud-contract-stub-runner :standalone_samples_path: {samples_path}/samples-standalone -:images_url: https://raw.githubusercontent.com/spring-cloud/spring-cloud-contract/master/docs/src/main/asciidoc/images include::introduction.adoc[]