From e2999d9f8bf4f3315710642f417994df4068d998 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 4 Nov 2019 09:20:25 +0100 Subject: [PATCH] Updates the parsing of a json body containing a regex in the body --- .../dsl/wiremock/WireMockRequestStubStrategy.groovy | 10 ++++++---- .../wiremock/restdocs/WireMockSnippetTests.java | 8 +++----- 2 files changed, 9 insertions(+), 9 deletions(-) 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 40641754d7..c8e1626348 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 @@ -93,14 +93,15 @@ class WireMockRequestStubStrategy extends BaseWireMockStubStrategy { } boolean bodyHasMatchingStrategy = request.body.clientValue instanceof MatchingStrategy MatchingStrategy matchingStrategy = getMatchingStrategyFromBody(request.body) + Object clientSideBody = MapConverter.transformToClientValues(request.body) if (contentType == ContentType.JSON) { def originalBody = matchingStrategy?.clientValue if (bodyHasMatchingStrategy) { requestPattern.withRequestBody( convertToValuePattern(matchingStrategy)) - } else if (containsPattern(request?.body)) { + } else if (clientSideBody instanceof Pattern || clientSideBody instanceof RegexProperty) { requestPattern.withRequestBody( - convertToValuePattern(appendBodyRegexpMatchPattern(request.body))) + convertToValuePattern(appendBodyRegexpMatchPattern(request.body, contentType))) } else { def body = JsonToJsonPathsConverter. removeMatchingJsonPaths(originalBody, request.bodyMatchers) @@ -399,13 +400,14 @@ class WireMockRequestStubStrategy extends BaseWireMockStubStrategy { } private MatchingStrategy appendBodyRegexpMatchPattern(Object value, ContentType contentType) { + Object clientValue = MapConverter.transformToClientValues(value) switch (contentType) { case ContentType.JSON: return new MatchingStrategy( - buildJSONRegexpMatch(value), MatchingStrategy.Type.MATCHING) + buildJSONRegexpMatch(clientValue), MatchingStrategy.Type.MATCHING) case ContentType.UNKNOWN: return new MatchingStrategy( - buildGStringRegexpForStubSide(value), MatchingStrategy.Type.MATCHING) + buildGStringRegexpForStubSide(clientValue), MatchingStrategy.Type.MATCHING) case ContentType.XML: throw new IllegalStateException("XML pattern matching is not implemented yet") } diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java index af40a141aa..4168b11d67 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java @@ -177,8 +177,7 @@ public class WireMockSnippetTests { @Test public void should_accept_query_params() throws IOException { - this.operation = operation(requestGetWithQueryParam(), response(), - this.context); + this.operation = operation(requestGetWithQueryParam(), response(), this.context); WireMockSnippet snippet = new WireMockSnippet(); snippet.document(this.operation); @@ -188,9 +187,8 @@ public class WireMockSnippetTests { StubMapping stubMapping = WireMockStubMapping .buildFrom(new String(Files.readAllBytes(stub.toPath()))); assertThat(stubMapping.getRequest().getUrlPath()).isEqualTo("/bar"); - assertThat(stubMapping.getRequest() - .getQueryParameters()) - .containsOnly(Assertions.entry("myParam", MultiValuePattern.of(equalTo(("myValue"))))); + assertThat(stubMapping.getRequest().getQueryParameters()).containsOnly( + Assertions.entry("myParam", MultiValuePattern.of(equalTo(("myValue"))))); } private Operation operation(OperationRequest request, OperationResponse response,