From 7879779e48ca8651f40abd635825c779eeec40e9 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Sat, 22 Aug 2015 09:37:35 +0200 Subject: [PATCH] [#124] Multiline strings support. Fixes #124 --- .../builder/SpockMethodBodyBuilder.groovy | 2 +- .../JaxRsClientSpockMethodBuilderSpec.groovy | 35 ++++--- .../MockMvcSpockMethodBuilderSpec.groovy | 93 ++++++++++++------- 3 files changed, 80 insertions(+), 50 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/SpockMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/SpockMethodBodyBuilder.groovy index f0d29ebefe..af8993e140 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/SpockMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/SpockMethodBodyBuilder.groovy @@ -155,7 +155,7 @@ abstract class SpockMethodBodyBuilder { value = value.substring(1).replaceAll('\\$value', "responseBody$property") blockBuilder.addLine(value) } else { - blockBuilder.addLine("responseBody$property == \"${value}\"") + blockBuilder.addLine("responseBody$property == '''${value}'''") } } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy index f7e0b7d777..07123d6265 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy @@ -26,8 +26,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification { when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2 == \"b\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") + blockBuilder.toString().contains("responseBody.property2 == '''b'''") } @Issue("#79") @@ -54,9 +54,9 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification { when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2[0].a == \"sth\"") - blockBuilder.toString().contains("responseBody.property2[1].b == \"sthElse\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") + blockBuilder.toString().contains("responseBody.property2[0].a == '''sth'''") + blockBuilder.toString().contains("responseBody.property2[1].b == '''sthElse'''") } @Issue("#82") @@ -128,8 +128,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification { when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody[0].property1 == \"a\"") - blockBuilder.toString().contains("responseBody[1].property2 == \"b\"") + blockBuilder.toString().contains("responseBody[0].property1 == '''a'''") + blockBuilder.toString().contains("responseBody[1].property2 == '''b'''") } def "should generate assertions for array inside response body element"() { @@ -154,8 +154,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification { when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1[0].property2 == \"test1\"") - blockBuilder.toString().contains("responseBody.property1[1].property3 == \"test2\"") + blockBuilder.toString().contains("responseBody.property1[0].property2 == '''test1'''") + blockBuilder.toString().contains("responseBody.property1[1].property3 == '''test2'''") } def "should generate assertions for nested objects in response body"() { @@ -180,8 +180,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification { when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2.property3 == \"b\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") + blockBuilder.toString().contains("responseBody.property2.property3 == '''b'''") } def "should generate regex assertions for map objects in response body"() { @@ -212,7 +212,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification { when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") blockBuilder.toString().contains("responseBody.property2 ==~ java.util.regex.Pattern.compile('[0-9]{3}')") } @@ -238,7 +238,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification { when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") blockBuilder.toString().contains("responseBody.property2 ==~ java.util.regex.Pattern.compile('[0-9]{3}')") } @@ -335,8 +335,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification { spockTest.contains("queryParam('age', '99'") spockTest.contains("queryParam('name', 'Denis.Stepanov'") spockTest.contains("queryParam('email', 'bob@email.com'") - spockTest.contains('responseBody.property1 == "a"') - spockTest.contains('responseBody.property2 == "b"') + spockTest.contains("responseBody.property1 == '''a'''") + spockTest.contains("responseBody.property2 == '''b'''") } def "should generate test for empty body"() { @@ -372,13 +372,12 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification { body "test" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) def spockTest = blockBuilder.toString() then: - spockTest.contains('def responseBody = (response.body.asString())') - spockTest.contains('responseBody == "test"') + spockTest.contains("responseBody == '''test'''") } } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy index 6d2ed106d1..c314de48ca 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy @@ -3,13 +3,15 @@ package io.codearte.accurest.builder import io.codearte.accurest.dsl.GroovyDsl import spock.lang.Issue import spock.lang.Specification +import spock.lang.Unroll /** * @author Jakub Kubrynski */ class MockMvcSpockMethodBuilderSpec extends Specification { - def "should generate assertions for simple response body"() { + @Unroll + def "should generate assertions for simple response body for [#spockMethodBuilder]"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -24,13 +26,13 @@ class MockMvcSpockMethodBuilderSpec extends Specification { }""" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2 == \"b\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") + blockBuilder.toString().contains("responseBody.property2 == '''b'''") } @Issue("#79") @@ -52,14 +54,14 @@ class MockMvcSpockMethodBuilderSpec extends Specification { ) } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2[0].a == \"sth\"") - blockBuilder.toString().contains("responseBody.property2[1].b == \"sthElse\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") + blockBuilder.toString().contains("responseBody.property2[0].a == '''sth'''") + blockBuilder.toString().contains("responseBody.property2[1].b == '''sthElse'''") } @Issue("#82") @@ -77,7 +79,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification { status 200 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -100,7 +102,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification { status 200 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -126,13 +128,13 @@ class MockMvcSpockMethodBuilderSpec extends Specification { }]""" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody[0].property1 == \"a\"") - blockBuilder.toString().contains("responseBody[1].property2 == \"b\"") + blockBuilder.toString().contains("responseBody[0].property1 == '''a'''") + blockBuilder.toString().contains("responseBody[1].property2 == '''b'''") } def "should generate assertions for array inside response body element"() { @@ -152,13 +154,13 @@ class MockMvcSpockMethodBuilderSpec extends Specification { }""" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1[0].property2 == \"test1\"") - blockBuilder.toString().contains("responseBody.property1[1].property3 == \"test2\"") + blockBuilder.toString().contains("responseBody.property1[0].property2 == '''test1'''") + blockBuilder.toString().contains("responseBody.property1[1].property3 == '''test2'''") } def "should generate assertions for nested objects in response body"() { @@ -178,13 +180,13 @@ class MockMvcSpockMethodBuilderSpec extends Specification { ''' } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2.property3 == \"b\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") + blockBuilder.toString().contains("responseBody.property2.property3 == '''b'''") } def "should generate regex assertions for map objects in response body"() { @@ -210,12 +212,12 @@ class MockMvcSpockMethodBuilderSpec extends Specification { } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") blockBuilder.toString().contains("responseBody.property2 ==~ java.util.regex.Pattern.compile('[0-9]{3}')") } @@ -236,13 +238,14 @@ class MockMvcSpockMethodBuilderSpec extends Specification { } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") + blockBuilder.toString().contains("responseBody.property1 == '''a'''") blockBuilder.toString().contains("responseBody.property2 ==~ java.util.regex.Pattern.compile('[0-9]{3}')") + } def "should generate a call with an url path and query parameters"() { @@ -275,15 +278,15 @@ class MockMvcSpockMethodBuilderSpec extends Specification { """ } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) def spockTest = blockBuilder.toString() then: spockTest.contains('get("/users?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') - spockTest.contains('responseBody.property1 == "a"') - spockTest.contains('responseBody.property2 == "b"') + spockTest.contains("responseBody.property1 == '''a'''") + spockTest.contains("responseBody.property2 == '''b'''") } def "should generate test for empty body"() { @@ -298,7 +301,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification { status 406 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -319,14 +322,14 @@ class MockMvcSpockMethodBuilderSpec extends Specification { body "test" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) def spockTest = blockBuilder.toString() then: spockTest.contains('def responseBody = (response.body.asString())') - spockTest.contains('responseBody == "test"') + spockTest.contains("responseBody == '''test'''") } @Issue('113') @@ -353,7 +356,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification { } } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -386,7 +389,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification { } } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -394,4 +397,32 @@ class MockMvcSpockMethodBuilderSpec extends Specification { then: spockTest.contains('''response.header('Location') ==~ java.util.regex.Pattern.compile('^((http[s]?|ftp):\\/)\\/?([^:\\/\\s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+')''') } + + @Issue('124') + def "should create proper response body matching for multiline strings"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + + request { + method 'POST' + url '/invitations' + } + + response { + status 422 + body( + message: "First line\n" + + " Second line" + ) + } + } + SpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def spockTest = blockBuilder.toString() + then: + spockTest.contains("""responseBody.message == '''First line + Second line'''""") + } }