From 4e95a90eed1470915a0cc12bb6a7e59a1845409d Mon Sep 17 00:00:00 2001 From: Jakub Kubrynski Date: Sat, 7 May 2016 22:50:36 +0200 Subject: [PATCH] Fix #262 - support maps in list --- .../DslToWireMockClientConverterSpec.groovy | 36 +++++++++++++++++++ .../dsl/BaseWireMockStubStrategy.groovy | 10 +++++- .../MockMvcMethodBodyBuilderSpec.groovy | 32 +++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/DslToWireMockClientConverterSpec.groovy b/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/DslToWireMockClientConverterSpec.groovy index 2382878856..79632e7eb1 100755 --- a/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/DslToWireMockClientConverterSpec.groovy +++ b/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/DslToWireMockClientConverterSpec.groovy @@ -171,6 +171,42 @@ class DslToWireMockClientConverterSpec extends Specification { } ''', json, false) } + + + @Issue("262") + def "should create stub with map inside list"() { + given: + def converter = new DslToWireMockClientConverter() + and: + File file = tmpFolder.newFile("dsl-mapinlist.groovy") + file.write(""" + io.codearte.accurest.dsl.GroovyDsl.make { + request { + method 'GET' + urlPath '/foos' + } + response { + status 200 + body([[id: value( + client('123'), + server(regex('[0-9]+')) + )], [id: value( + client('567'), + server(regex('[0-9]+')) + )]]) + headers { + header 'Content-Type': 'application/json' + } + } + } +""") + when: + String json = converter.convertContent("test", new Contract(file.toPath(), false, 0, null)) + then: + JSONAssert.assertEquals(''' +{"request":{"urlPath":"/foos","method":"GET"},"response":{"body":"[{\\"id\\":\\"123\\"},{\\"id\\":\\"567\\"}]"}} +''', json, false) + } def 'should convert dsl to wiremock to show it in the docs'() { given: diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/dsl/BaseWireMockStubStrategy.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/dsl/BaseWireMockStubStrategy.groovy index 985a7b8271..ac7376dc38 100755 --- a/accurest-core/src/main/groovy/io/codearte/accurest/dsl/BaseWireMockStubStrategy.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/dsl/BaseWireMockStubStrategy.groovy @@ -69,7 +69,15 @@ abstract class BaseWireMockStubStrategy { } public String parseBody(List list, ContentType contentType) { - return parseBody(toJson(list), contentType) + List result = [] + list.each { + if (it instanceof Map) { + result += MapConverter.getStubSideValues(it) + } else { + result += parseBody(it, contentType) + } + } + return parseBody(toJson(result), contentType) } public String parseBody(GString value, ContentType contentType) { diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy index 14ea6e61df..489fcfa298 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy @@ -1168,6 +1168,38 @@ World.'''""" "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } + @Issue('262') + def "should generate proper test code with map inside list"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method 'GET' + urlPath '/foos' + } + response { + status 200 + body([[id: value( + client('123'), + server(regex('[0-9]+')) + )], [id: value( + client('567'), + server(regex('[0-9]+')) + )]]) + headers { + header('Content-Type': 'application/json;charset=UTF-8') + } + } + } + MethodBodyBuilder builder = new MockMvcSpockMethodRequestProcessingBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.then(blockBuilder) + def test = blockBuilder.toString() + then: + test.contains('assertThatJson(parsedJson).array().contains("id").matches("[0-9]+")') + } + + GroovyDsl dslForDocs = // tag::dsl_example[] io.codearte.accurest.dsl.GroovyDsl.make {