From 07bf0cb9c753d643881f09eb59728730c7471d5f Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 27 Dec 2016 14:18:40 +0100 Subject: [PATCH] Fixed the way in JUnit we address list indices without this change for some reason we're using .get() to address an entry in the list via a index with this change we're doing it in the proper JSON path format which is `$[index]` fixes #85 --- .../builder/JUnitMethodBodyBuilder.groovy | 2 +- .../JaxRsClientMethodBuilderSpec.groovy | 62 ++++++++++++++++++- .../MockMvcMethodBodyBuilderSpec.groovy | 60 ++++++++++++++++++ 3 files changed, 122 insertions(+), 2 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 11181a6fdf..fcdc08057a 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 @@ -93,7 +93,7 @@ abstract class JUnitMethodBodyBuilder extends RequestProcessingMethodBodyBuilder @Override protected String getPropertyInListString(String property, Integer listIndex) { - return "${property}.get($listIndex)" ?: '' + return "${property}[$listIndex]" ?: '' } @Override 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 f9b2d51541..4d391393d0 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 @@ -774,12 +774,72 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub MethodBodyBuilder builder = new JaxRsClientJUnitMethodBodyBuilder(contractDsl, properties) BlockBuilder blockBuilder = new BlockBuilder(" ") when: - builder.then(blockBuilder) + builder.appendTo(blockBuilder) def test = blockBuilder.toString() then: test.contains('assertThatRejectionReasonIsNull(parsedJson.read("$.get("rejectionReason").title"));') } + @Issue('#85') + def "should execute custom method for more complex structures on the response side when using Spock"() { + given: + Contract contractDsl = Contract.make { + request { + method 'GET' + urlPath '/get' + } + response { + status 200 + body([ + [ + name: $(consumer("userName 1"), producer(execute('assertThatUserNameIsNotNull($it)'))) + ], + [ + name: $(consumer("userName 2"), producer(execute('assertThatUserNameIsNotNull($it)'))) + ] + ]) + } + } + MethodBodyBuilder builder = new JaxRsClientJUnitMethodBodyBuilder(contractDsl, properties) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def test = blockBuilder.toString() + then: + test.contains('''assertThatUserNameIsNotNull(parsedJson.read("$[0].name")''') + test.contains('''assertThatUserNameIsNotNull(parsedJson.read("$[1].name")''') + } + + @Issue('#85') + def "should execute custom method for more complex structures on the response side when using JUnit"() { + given: + Contract contractDsl = Contract.make { + request { + method 'GET' + urlPath '/get' + } + response { + status 200 + body([ + [ + name: $(consumer("userName 1"), producer(execute('assertThatUserNameIsNotNull($it)'))) + ], + [ + name: $(consumer("userName 2"), producer(execute('assertThatUserNameIsNotNull($it)'))) + ] + ]) + } + } + MethodBodyBuilder builder = new JaxRsClientJUnitMethodBodyBuilder(contractDsl, properties) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.then(blockBuilder) + def test = blockBuilder.toString() + then: + test.contains('''assertThatUserNameIsNotNull(parsedJson.read("$[0].name")''') + test.contains('''assertThatUserNameIsNotNull(parsedJson.read("$[1].name")''') + } + @Issue('#150') def "should support body matching in response"() { given: 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 099f9000bb..5de43ecaa9 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 @@ -1721,6 +1721,66 @@ World.'''""" SyntaxChecker.tryToCompileGroovy(blockBuilder.toString()) } + @Issue('#85') + def "should execute custom method for more complex structures on the response side when using Spock"() { + given: + Contract contractDsl = Contract.make { + request { + method 'GET' + urlPath '/get' + } + response { + status 200 + body([ + [ + name: $(consumer("userName 1"), producer(execute('assertThatUserNameIsNotNull($it)'))) + ], + [ + name: $(consumer("userName 2"), producer(execute('assertThatUserNameIsNotNull($it)'))) + ] + ]) + } + } + MethodBodyBuilder builder = new MockMvcSpockMethodRequestProcessingBodyBuilder(contractDsl, properties) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.then(blockBuilder) + def test = blockBuilder.toString() + then: + test.contains('''assertThatUserNameIsNotNull(parsedJson.read('$[0].name')''') + test.contains('''assertThatUserNameIsNotNull(parsedJson.read('$[1].name')''') + } + + @Issue('#85') + def "should execute custom method for more complex structures on the response side when using JUnit"() { + given: + Contract contractDsl = Contract.make { + request { + method 'GET' + urlPath '/get' + } + response { + status 200 + body([ + [ + name: $(consumer("userName 1"), producer(execute('assertThatUserNameIsNotNull($it)'))) + ], + [ + name: $(consumer("userName 2"), producer(execute('assertThatUserNameIsNotNull($it)'))) + ] + ]) + } + } + MethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl, properties) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.then(blockBuilder) + def test = blockBuilder.toString() + then: + test.contains('''assertThatUserNameIsNotNull(parsedJson.read("$[0].name")''') + test.contains('''assertThatUserNameIsNotNull(parsedJson.read("$[1].name")''') + } + @Issue('#111') def "should execute custom method for request headers"() { given: