From bc22227fe3812637cbcf4f75b16ed9d1236c9f68 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 15 Jul 2016 13:15:22 +0200 Subject: [PATCH] Added missing docs for #32 --- docs/src/main/asciidoc/verifier/contract.adoc | 11 ++++++ .../pom.xml | 5 +++ .../MockMvcMethodBodyBuilderSpec.groovy | 36 ++++++++++++++++++- 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/docs/src/main/asciidoc/verifier/contract.adoc b/docs/src/main/asciidoc/verifier/contract.adoc index 1e7077cf9f..604b1e7679 100644 --- a/docs/src/main/asciidoc/verifier/contract.adoc +++ b/docs/src/main/asciidoc/verifier/contract.adoc @@ -113,6 +113,17 @@ Please see the example below: include::{verifier_core_path}/src/test/groovy/org/springframework/cloud/contract/verifier/builder/ContractHttpDocsSpec.groovy[tags=regex,indent=0] ---- +You can also provide only one side of the communication using a regular expression. If you do that then automatically we'll +provide the generated string that matches the provided regular expression. For example: + +[source,groovy,indent=0] +---- +include::{verifier_core_path}/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy[tags=dsl_one_side_data_generation_example,indent=0] +---- + +In this example for request and response the opposite side of the communication will have the respective data generated. + + === Passing optional parameters It is possible to provide optional parameters in your contract. It's only possible to have optional parameter for the: diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/pom.xml b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/pom.xml index 4a6855f61d..7e682bd0e0 100644 --- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/pom.xml +++ b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/pom.xml @@ -73,6 +73,11 @@ spring-boot-starter-test test + + org.slf4j + slf4j-simple + test + diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy index 7f8dec46f2..ed35d0348e 100644 --- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy @@ -1398,7 +1398,6 @@ World.'''""" test.contains('assertThatJson(parsedJson).field("message").matches("^(?!\\\\s*\\$).+")') } - Contract dslForDocs = // tag::dsl_example[] org.springframework.cloud.contract.spec.Contract.make { @@ -1444,4 +1443,39 @@ World.'''""" } } // end::dsl_example[] + + Contract dslWithOnlyOneSideForDocs = + // tag::dsl_one_side_data_generation_example[] + org.springframework.cloud.contract.spec.Contract.make { + request { + method 'PUT' + url '/foo' + body([ + requestElement: value(client(regex('[0-9]{5}'))) + ]) + } + response { + status 200 + body([ + responseElement: value(server(regex('[0-9]{7}'))) + ]) + } + } + // end::dsl_one_side_data_generation_example[] + + @Issue('#32') + def "should generate the regular expression for the other side of communication"() { + given: + MethodBodyBuilder builder = new MockMvcSpockMethodRequestProcessingBodyBuilder( + dslWithOnlyOneSideForDocs, properties) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.given(blockBuilder) + builder.then(blockBuilder) + def test = blockBuilder.toString() + then: + test.replace('\n', '').matches('.*') + test.replace('\n', '').stripIndent().stripMargin().matches('.*field\\("responseElement"\\).isEqualTo\\("[0-9]{7}.*') + } + }