diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.groovy index 71ef494b5a..aba5f54370 100755 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.groovy @@ -126,6 +126,9 @@ class WireMockRequestStubStrategy extends BaseWireMockStubStrategy { if (bodyHasMatchingStrategy) { requestPattern.withRequestBody( convertToValuePattern(matchingStrategy)) + } else if (containsPattern(request?.body)) { + requestPattern.withRequestBody( + convertToValuePattern(appendBodyRegexpMatchPattern(request.body))) } else { def body = JsonToJsonPathsConverter. @@ -181,6 +184,13 @@ class WireMockRequestStubStrategy extends BaseWireMockStubStrategy { } } + private Object generateConcreteValue(Object originalBody) { + if (originalBody instanceof Pattern || originalBody instanceof RegexProperty) { + return new RegexProperty(originalBody).generate() + } + return originalBody + } + private RequestPatternBuilder requestBodyGuessedFromMatchingStrategy(RequestPatternBuilder requestPattern) { return requestPattern.withRequestBody(convertToValuePattern( getMatchingStrategy(request.body.clientValue))) diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockGroovyDslSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockGroovyDslSpec.groovy index 6c5db7ba87..be34bde777 100755 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockGroovyDslSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockGroovyDslSpec.groovy @@ -2793,6 +2793,31 @@ class WireMockGroovyDslSpec extends Specification implements WireMockStubVerifie stubMappingIsValidWireMockStub(wireMockStub) } + @Issue("#94") + def "should not produce any cursors in the stub"() { + given: + Contract contractDsl = Contract.make { + request { + method 'POST' + urlPath $(test('/resource/resourceId/another-resource/another-resource-id/sth'), stub(regex('/resource/[\\w\\.]+/another-resource/([\\w+\\.-]|%[a-fA-F0-9]{2})+/sth'))) + body($(stub(regex(".+")), test(execute("encrypt('a lot of code')")))) + } + response { + status 201 + } + // 1 is the highest + priority 1000 + } + when: + String wireMockStub = new WireMockStubStrategy("Test", + new ContractMetadata(null, false, 0, null, contractDsl), contractDsl) + .toWireMockClientStub() + + then: + stubMappingIsValidWireMockStub(wireMockStub) + + } + WireMockConfiguration config() { return new WireMockConfiguration().extensions(responseTemplateTransformer()) } diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockStubVerifier.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockStubVerifier.groovy index ec21f700b5..b3fac933ea 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockStubVerifier.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockStubVerifier.groovy @@ -32,6 +32,7 @@ trait WireMockStubVerifier { Pattern.compile(it.getValue()) } assert !mappingDefinition.contains('org.springframework.cloud.contract.spec.internal') + assert !mappingDefinition.contains('cursor') } void stubMappingIsValidWireMockStub(Contract contractDsl) {