From 3b4453390566e4c5788a0343aae2e5d31fe12e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A1stor=20Rodr=C3=ADguez?= Date: Mon, 31 Jul 2017 11:57:06 +0200 Subject: [PATCH] Test generation to place queryParameters before async on RestAssured when chain (#373) fixes #372 --- .../builder/JUnitMethodBodyBuilder.groovy | 6 +--- .../RequestProcessingMethodBodyBuilder.groovy | 7 ++++ ...kMethodRequestProcessingBodyBuilder.groovy | 6 +--- .../MockMvcMethodBodyBuilderSpec.groovy | 35 +++++++++++++++++++ 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMethodBodyBuilder.groovy index 3c35d00f63..e341c4249d 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMethodBodyBuilder.groovy @@ -126,11 +126,7 @@ abstract class JUnitMethodBodyBuilder extends RequestProcessingMethodBodyBuilder @Override protected String getInputString(Request request) { - def inputString = "${returnedResponseType()} response = given().spec(request)" - if (response.async){ - inputString = inputString + '.when().async()' - } - return inputString + return "${returnedResponseType()} response = given().spec(request)" } protected String returnedResponseType() { diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy index 5da2c0c139..02df4c3987 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy @@ -114,11 +114,18 @@ abstract class RequestProcessingMethodBodyBuilder extends MethodBodyBuilder { Url url = getUrl(request) addQueryParameters(url, bb) + addAsyncIfRequired(bb) addUrl(url, bb) addColonIfRequired(bb) bb.unindent() } + private void addAsyncIfRequired(BlockBuilder bb) { + if (response.async) { + bb.addLine('.when().async()') + } + } + @TypeChecked(TypeCheckingMode.SKIP) protected addQueryParameters(Url buildUrl, BlockBuilder bb) { if(hasQueryParams(buildUrl)){ 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 0ec9622e38..2ada092bf4 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 @@ -109,11 +109,7 @@ abstract class SpockMethodRequestProcessingBodyBuilder extends RequestProcessing @Override protected String getInputString(Request request) { - def inputString = 'def response = given().spec(request)' - if (response.async){ - inputString = inputString + '.when().async()' - } - return inputString + return 'def response = given().spec(request)' } @Override 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 e555fd0d93..df5930b7ca 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 @@ -1531,6 +1531,41 @@ World.'''""" "MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } | '.when().async()' } + @Issue('372') + def "should generate async body after queryParams when async flag set in response and queryParams set in request"() { + given: + Contract contractDsl = Contract.make { + request { + method 'GET' + url('/test') { + queryParameters { + parameter("param", "value") + } + } + } + response { + status 200 + async() + } + } + MethodBodyBuilder builder = methodBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def test = blockBuilder.toString() + def strippedTest = test.replace('\n', '').replace(' ', '').stripIndent().stripMargin() + then: + strippedTest.contains('.queryParam("param","value").when().async().get("/test")') + and: + stubMappingIsValidWireMockStub(contractDsl) + and: + SyntaxChecker.tryToCompile(methodBuilderName, blockBuilder.toString()) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { Contract dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl, properties) } + "MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } + } + def "should generate proper test code with array of primitives using #methodBuilderName"() { given: Contract contractDsl = Contract.make {