diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JaxRsUrlPathWhen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JaxRsUrlPathWhen.java index ca8236c3fe..c0d6268190 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JaxRsUrlPathWhen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JaxRsUrlPathWhen.java @@ -75,8 +75,8 @@ class JaxRsUrlPathWhen implements When, JaxRsAcceptor, QueryParamsResolver { .iterator(); while (iterator.hasNext()) { QueryParameter param = iterator.next(); - String text = ".queryParam(\"" + param.getName() + "\", " - + this.bodyParser.quotedShortText(resolveParamValue(param)) + ")"; + String queryParamValue = getQueryParamValue(param); + String text = ".queryParam(\"" + param.getName() + "\", " + queryParamValue + ")"; if (iterator.hasNext()) { this.blockBuilder.addLine(text); } @@ -86,6 +86,14 @@ class JaxRsUrlPathWhen implements When, JaxRsAcceptor, QueryParamsResolver { } } + private String getQueryParamValue(QueryParameter param) { + Object serverValue = param.getServerValue(); + if (serverValue instanceof ExecutionProperty) { + return ((ExecutionProperty) serverValue).getExecutionCommand(); + } + return this.bodyParser.quotedShortText(resolveParamValue(param)); + } + /** * @return {@code true} if the query parameter is allowed */ diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/MockMvcQueryParamsWhen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/MockMvcQueryParamsWhen.java index 34a04790ef..9439ec07bf 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/MockMvcQueryParamsWhen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/MockMvcQueryParamsWhen.java @@ -20,6 +20,7 @@ import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; +import org.springframework.cloud.contract.spec.internal.ExecutionProperty; import org.springframework.cloud.contract.spec.internal.MatchingStrategy; import org.springframework.cloud.contract.spec.internal.QueryParameter; import org.springframework.cloud.contract.spec.internal.Request; @@ -85,10 +86,17 @@ class MockMvcQueryParamsWhen implements When, MockMvcAcceptor, QueryParamsResolv } private String addQueryParameter(QueryParameter queryParam) { + String queryParamValue = getQueryParamValue(queryParam); return "." + QUERY_PARAM_METHOD + "(" + this.bodyParser.quotedLongText(queryParam.getName()) + "," - + this.bodyParser - .quotedLongText(resolveParamValue(MapConverter.getTestSideValuesForNonBody(queryParam))) - + ")"; + + queryParamValue + ")"; + } + + private String getQueryParamValue(QueryParameter queryParam) { + Object serverValue = queryParam.getServerValue(); + if (serverValue instanceof ExecutionProperty) { + return ((ExecutionProperty) serverValue).getExecutionCommand(); + } + return this.bodyParser.quotedLongText(resolveParamValue(MapConverter.getTestSideValuesForNonBody(queryParam))); } @Override diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy index 2aa3737748..99a1c61f36 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy @@ -1857,6 +1857,55 @@ response: } } + @Issue("#854") + def "should call execute in queryParameters [#methodBuilderName]"() { + given: + Contract contractDsl = Contract.make { + request { + method 'POST' + urlPath("/rest/something") { + queryParameters { + parameter('someHashCode': $( + consumer(regex(anInteger())), + producer(execute("hashCode()"))) + ) + } + } + } + response { + status OK() + } + } + methodBuilder() + when: + String test = singleTestGenerator(contractDsl) + then: + SyntaxChecker.tryToCompileWithoutCompileStatic(methodBuilderName, test) + test.contains('''.queryParam("someHashCode",hashCode())''') | test.contains('''.queryParam("someHashCode", hashCode())''') + and: + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "spock" | { + properties.testFramework = TestFramework.SPOCK + } + "mockmvc" | { + properties.testMode = TestMode.MOCKMVC + } + "jaxrs-spock" | { + properties.testFramework = TestFramework.SPOCK; properties.testMode = TestMode.JAXRSCLIENT + } + "jaxrs" | { + properties.testFramework = TestFramework.JUNIT; properties.testMode = TestMode.JAXRSCLIENT + } + "webclient" | { + properties.testMode = TestMode.WEBTESTCLIENT + } + "testNG" | { + properties.testFramework = TestFramework.TESTNG + } + } + @Issue("#1262") def "should work with the timeout flag for groovy [#methodBuilderName]"() { given: