From 3f834e606254b8f86f56af1fdb87b8942cb83dbd Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Thu, 31 Oct 2019 14:24:24 +0100 Subject: [PATCH] Parses properly the full regex body on the request side fixes gh-94 --- .../WireMockRequestStubStrategy.groovy | 10 ++++++++ .../dsl/wiremock/WireMockGroovyDslSpec.groovy | 25 +++++++++++++++++++ .../dsl/wiremock/WireMockStubVerifier.groovy | 1 + 3 files changed, 36 insertions(+) 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 80413bef0b..40641754d7 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 @@ -98,6 +98,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. removeMatchingJsonPaths(originalBody, request.bodyMatchers) @@ -150,6 +153,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 5d4ebcd747..8066f425d3 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 @@ -2644,6 +2644,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) {