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: