From e3056a497890f3b327da071aed24e4d82c21ec66 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 7 Dec 2016 16:53:21 +0100 Subject: [PATCH] #167 updated the regex and tests --- .../verifier/builder/MockMvcJUnitMethodBodyBuilder.groovy | 6 +++--- .../MockMvcSpockMethodRequestProcessingBodyBuilder.groovy | 3 ++- .../builder/SpockMethodRequestProcessingBodyBuilder.groovy | 4 ++++ .../verifier/builder/MockMvcMethodBodyBuilderSpec.groovy | 4 ++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcJUnitMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcJUnitMethodBodyBuilder.groovy index 5357f95e46..f9bdd6f6cb 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcJUnitMethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcJUnitMethodBodyBuilder.groovy @@ -19,13 +19,12 @@ package org.springframework.cloud.contract.verifier.builder import groovy.transform.PackageScope import groovy.transform.TypeChecked import org.springframework.cloud.contract.spec.Contract -import org.springframework.cloud.contract.spec.internal.Header import org.springframework.cloud.contract.spec.internal.ExecutionProperty +import org.springframework.cloud.contract.spec.internal.Header import org.springframework.cloud.contract.spec.internal.NotToEscapePattern import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties import java.util.regex.Pattern - /** * A {@link JUnitMethodBodyBuilder} implementation that uses MockMvc to send requests. * @@ -66,7 +65,8 @@ class MockMvcJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder { @Override protected void processHeaderElement(BlockBuilder blockBuilder, String property, Object value) { if (value instanceof NotToEscapePattern) { - blockBuilder.addLine("assertThat(response.header(\"$property\")).${createMatchesMethod(value.serverValue.pattern())};") + blockBuilder.addLine("assertThat(response.header(\"$property\"))." + + "${createMatchesMethod(value.serverValue.pattern().replace("\\", "\\\\"))};") } } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcSpockMethodRequestProcessingBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcSpockMethodRequestProcessingBodyBuilder.groovy index ff0dcba879..8e6f002b57 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcSpockMethodRequestProcessingBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcSpockMethodRequestProcessingBodyBuilder.groovy @@ -59,7 +59,8 @@ class MockMvcSpockMethodRequestProcessingBodyBuilder extends SpockMethodRequestP @Override protected void processHeaderElement(BlockBuilder blockBuilder, String property, Object value) { if (value instanceof NotToEscapePattern) { - blockBuilder.addLine("response.header('$property') ${patternComparison(value.serverValue)}") + blockBuilder.addLine("response.header('$property') " + + "${patternComparison(value.serverValue.pattern().replace("\\", "\\\\"))}") } } @Override diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMethodRequestProcessingBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMethodRequestProcessingBodyBuilder.groovy index 3302b1b5d2..e32914eec3 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMethodRequestProcessingBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMethodRequestProcessingBodyBuilder.groovy @@ -148,6 +148,10 @@ abstract class SpockMethodRequestProcessingBodyBuilder extends RequestProcessing } protected String patternComparison(Pattern pattern) { + return patternComparison(pattern.toString()) + } + + protected String patternComparison(String pattern) { return "==~ java.util.regex.Pattern.compile('$pattern')" } diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy index 64a5501cec..430d6986c7 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy @@ -1558,7 +1558,7 @@ World.'''""" strippedTest.matches(""".*header\\("header", "application\\/vnd\\.fraud\\.v1\\+json;.*"\\).*""") strippedTest.matches(""".*body\\('''\\{"requestElement":"[0-9]{5}"\\}'''\\).*""") strippedTest.matches(""".*put\\("/foo/[0-9]{5}"\\).*""") - strippedTest.contains("""response.header('Content-Type') ==~ java.util.regex.Pattern.compile('application/vnd\\.fraud\\.v1\\+json.*')""") + strippedTest.contains("""response.header('Content-Type') ==~ java.util.regex.Pattern.compile('application/vnd\\\\.fraud\\\\.v1\\\\+json.*')""") "application/vnd.fraud.v1+json;charset=UTF-8".matches('application/vnd\\.fraud\\.v1\\+json.*') strippedTest.contains("""assertThatJson(parsedJson).field("responseElement").matches("[0-9]{7}")""") } @@ -1776,7 +1776,7 @@ World.'''""" builder.appendTo(blockBuilder) def test = blockBuilder.toString() then: - test.contains('application/vnd\\.fraud\\.v1\\+json.*') + test.contains('application/vnd\\\\.fraud\\\\.v1\\\\+json.*') where: methodBuilder << [{ Contract dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl, properties)}, { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties)}]