diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.java index 386f4b0760..40ebb8e541 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.java @@ -46,6 +46,7 @@ import org.springframework.cloud.contract.spec.Contract; import org.springframework.cloud.contract.spec.internal.Body; import org.springframework.cloud.contract.spec.internal.BodyMatcher; import org.springframework.cloud.contract.spec.internal.BodyMatchers; +import org.springframework.cloud.contract.spec.internal.ClientDslProperty; import org.springframework.cloud.contract.spec.internal.DslProperty; import org.springframework.cloud.contract.spec.internal.FromFileProperty; import org.springframework.cloud.contract.spec.internal.MatchingStrategy; @@ -369,6 +370,10 @@ class WireMockRequestStubStrategy extends BaseWireMockStubStrategy { } protected ContentPattern convertToValuePattern(Object object) { + if (object instanceof ClientDslProperty) { + object = ((ClientDslProperty) object).getClientValue(); + } + if (object instanceof Pattern || object instanceof RegexProperty) { return WireMock.matching(new RegexProperty(object).pattern()); } 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 83192ef2d7..5fcf4ba8c1 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 @@ -3062,6 +3062,74 @@ class WireMockGroovyDslSpec extends Specification implements WireMockStubVerifie server?.shutdown() } + def "should work with client DSL properties"() { + given: + org.springframework.cloud.contract.spec.Contract groovyDsl = org.springframework.cloud.contract.spec.Contract. + make { + request { + method('GET') + url("/api/foo") + headers { + header("foo", $(client(anyAlphaNumeric()), server("123"))) + } + cookies { + cookie("cookie1", $(client("foo"), server("bar"))) + cookie("cookie2", $(client(~/[a-z]+/), server("bar"))) + cookie("cookie3", $(client(anyAlphaNumeric()), server("bar"))) + cookie("cookie4", $(anyAlphaNumeric())) + } + } + response { + status OK() + body("ok") + headers { + header 'Content-Type': 'text/plain' + } + } + } + when: + String wireMockStub = new WireMockStubStrategy("Test", new ContractMetadata(null, false, 0, null, groovyDsl), groovyDsl). + toWireMockClientStub() + then: + AssertionUtil.assertThatJsonsAreEqual(''' + { + "request" : { + "url" : "/api/foo", + "method" : "GET", + "headers" : { + "foo" : { + "matches" : "[a-zA-Z0-9]+" + } + }, + "cookies" : { + "cookie1" : { + "equalTo" : "foo" + }, + "cookie2" : { + "matches" : "[a-z]+" + }, + "cookie3" : { + "matches" : "[a-zA-Z0-9]+" + }, + "cookie4" : { + "matches" : "[a-zA-Z0-9]+" + } + } + }, + "response" : { + "status" : 200, + "body" : "ok", + "headers" : { + "Content-Type" : "text/plain" + }, + "transformers" : [ "response-template", "foo-transformer" ] + } + } + ''', wireMockStub) + and: + stubMappingIsValidWireMockStub(wireMockStub) + } + WireMockConfiguration config() { return new WireMockConfiguration().extensions(responseTemplateTransformer()) }