From 87d6d9e4f1efb44e79d43c258a2c774ff8f90584 Mon Sep 17 00:00:00 2001 From: Axel Hodler Date: Tue, 1 May 2018 15:32:12 +0200 Subject: [PATCH] Dont parse body if not specified in contract (#624) --- .../JaxRsClientJUnitMethodBodyBuilder.groovy | 4 ++- ...kMethodRequestProcessingBodyBuilder.groovy | 4 ++- .../RequestProcessingMethodBodyBuilder.groovy | 7 +++++ .../JaxRsClientMethodBuilderSpec.groovy | 28 +++++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientJUnitMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientJUnitMethodBodyBuilder.groovy index 47bd2eda22..0a67fb0216 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientJUnitMethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientJUnitMethodBodyBuilder.groovy @@ -73,7 +73,9 @@ class JaxRsClientJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder { bb.unindent() bb.addEmptyLine() - bb.addLine("String responseAsString = response.readEntity(String.class);") + if (expectsResponseBody()) { + bb.addLine("String responseAsString = response.readEntity(String.class);") + } } protected void appendUrlPathAndQueryParameters(BlockBuilder bb) { diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientSpockMethodRequestProcessingBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientSpockMethodRequestProcessingBodyBuilder.groovy index a6e7327a20..f483785f96 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientSpockMethodRequestProcessingBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientSpockMethodRequestProcessingBodyBuilder.groovy @@ -69,7 +69,9 @@ class JaxRsClientSpockMethodRequestProcessingBodyBuilder extends SpockMethodRequ bb.unindent() bb.addEmptyLine() - bb.addLine("String responseAsString = response.readEntity(String)") + if (expectsResponseBody()) { + bb.addLine("String responseAsString = response.readEntity(String)") + } } protected void appendRequestWithRequiredResponseContentType(BlockBuilder bb) { 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 95592889ef..1fc64deb51 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 @@ -73,6 +73,13 @@ abstract class RequestProcessingMethodBodyBuilder extends MethodBodyBuilder { return true } + /** + * Returns {@code true} if a response body is expected + */ + protected boolean expectsResponseBody() { + return response.body != null; + } + /** * Returns {@code true} if the query parameter is allowed */ diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientMethodBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientMethodBuilderSpec.groovy index add3644b64..b94301dcca 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientMethodBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientMethodBuilderSpec.groovy @@ -687,6 +687,34 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub "JaxRsClientJUnitMethodBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } | 'entity("", "application/octet-stream"' } + def "should not parse the response body if there is no response body specified in the contract"() { + given: + Contract contractDsl = Contract.make { + request { + method "HEAD" + url "head" + } + response { + status OK() + } + } + MethodBodyBuilder builder = methodBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def test = blockBuilder.toString() + then: + !test.contains(bodyParsingString) + and: + stubMappingIsValidWireMockStub(contractDsl) + and: + SyntaxChecker.tryToCompile(methodBuilderName, blockBuilder.toString()) + where: + methodBuilderName | methodBuilder | bodyParsingString + "JaxRsClientSpockMethodRequestProcessingBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientSpockMethodRequestProcessingBodyBuilder(dsl, properties) } | "String responseAsString = response.readEntity(String)" + "JaxRsClientJUnitMethodBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } | "String responseAsString = response.readEntity(String.class);" + } + def "should generate test for String in response body with #methodBodyName"() { given: Contract contractDsl = Contract.make {