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}.*')
+ }
+
}