From 97c9d66b088f0494afacecf0e0a9c41887158263 Mon Sep 17 00:00:00 2001 From: mchmielarz Date: Wed, 23 Dec 2015 00:23:21 +0100 Subject: [PATCH 1/2] This fixes #187 --- .../util/JsonToJsonPathsConverter.groovy | 14 ++++++++- .../JaxRsClientSpockMethodBuilderSpec.groovy | 29 +++++++++++++++++++ .../MockMvcSpockMethodBuilderSpec.groovy | 29 +++++++++++++++++++ .../util/JsonToJsonPathsConverterSpec.groovy | 18 +++++++++++- 4 files changed, 88 insertions(+), 2 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/util/JsonToJsonPathsConverter.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/util/JsonToJsonPathsConverter.groovy index 0bf9cc2ff5..a0e62b09fc 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/util/JsonToJsonPathsConverter.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/util/JsonToJsonPathsConverter.groovy @@ -142,7 +142,19 @@ class JsonToJsonPathsConverter { } protected static String potentiallyWrappedWithQuotesValue(Object value) { - return value instanceof Number ? value : "'$value'" + return isNumber(value) || isBoolean(value) || isNull(value) ? value : "'$value'" + } + + private static boolean isNull(value) { + value == null + } + + private static boolean isBoolean(value) { + value instanceof Boolean + } + + private static boolean isNumber(value) { + value instanceof Number } } 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 d8d13e124f..a8daa0af22 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 @@ -34,6 +34,35 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc stubMappingIsValidWireMockStub(new WireMockStubStrategy(contractDsl).toWireMockClientStub()) } + @Issue("#187") + def "should generate assertions for null and boolean values"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body """{ + "property1": "true", + "property2": null, + "property3": false +}""" + } + } + JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("\$[?(@.property1 == 'true')]") + blockBuilder.toString().contains("\$[?(@.property2 == null)]") + blockBuilder.toString().contains("\$[?(@.property3 == false)]") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy(contractDsl).toWireMockClientStub()) + } + @Issue("#79") def "should generate assertions for simple response body constructed from map with a list"() { given: 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 efdb49fbc0..ba403adcde 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 @@ -40,6 +40,35 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu stubMappingIsValidWireMockStub(new WireMockStubStrategy(contractDsl).toWireMockClientStub()) } + @Issue("#187") + def "should generate assertions for null and boolean values"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body """{ + "property1": "true", + "property2": null, + "property3": false +}""" + } + } + MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("\$[?(@.property1 == 'true')]") + blockBuilder.toString().contains("\$[?(@.property2 == null)]") + blockBuilder.toString().contains("\$[?(@.property3 == false)]") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy(contractDsl).toWireMockClientStub()) + } + @Issue("#79") def "should generate assertions for simple response body constructed from map with a list"() { given: diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/util/JsonToJsonPathsConverterSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/util/JsonToJsonPathsConverterSpec.groovy index 90b0c0d2da..fd1a4f5c50 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/util/JsonToJsonPathsConverterSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/util/JsonToJsonPathsConverterSpec.groovy @@ -119,6 +119,21 @@ class JsonToJsonPathsConverterSpec extends Specification { assertThatJsonPathsInMapAreValid(json, pathAndValues) } + def 'should convert a json with null and boolean values'() { + given: + String json = ''' + { + "property1" : null, + "property2" : true + } +''' + when: + JsonPaths pathAndValues = JsonToJsonPathsConverter.transformToJsonPathWithTestsSideValues(new JsonSlurper().parseText(json)) + then: + pathAndValues['''$[?(@.property1 == null)]'''] == null + pathAndValues['''$[?(@.property2 == true)]'''] == true + } + def "should convert numbers map"() { given: String json = ''' { @@ -207,7 +222,8 @@ class JsonToJsonPathsConverterSpec extends Specification { private void assertThatJsonPathsInMapAreValid(String json, JsonPaths pathAndValues) { DocumentContext parsedJson = JsonPath.using(Configuration.builder().options(Option.ALWAYS_RETURN_LIST).build()).parse(json); pathAndValues.each { - assert parsedJson.read(it.jsonPath, JSONArray).getAt(it.optionalSuffix ?: 0) == it.optionalSuffix ? [it.value] : it.value + def at = parsedJson.read(it.jsonPath, JSONArray).getAt(it.optionalSuffix ?: 0) + assert at == it.optionalSuffix ? [it.value] : it.value } } From bfbd7d01db49af30192a50b0a4f3d58dd29822f7 Mon Sep 17 00:00:00 2001 From: mchmielarz Date: Wed, 23 Dec 2015 22:33:46 +0100 Subject: [PATCH 2/2] Returns added to methods. --- .../codearte/accurest/util/JsonToJsonPathsConverter.groovy | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/util/JsonToJsonPathsConverter.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/util/JsonToJsonPathsConverter.groovy index a0e62b09fc..46dd08003b 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/util/JsonToJsonPathsConverter.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/util/JsonToJsonPathsConverter.groovy @@ -146,15 +146,15 @@ class JsonToJsonPathsConverter { } private static boolean isNull(value) { - value == null + return value == null } private static boolean isBoolean(value) { - value instanceof Boolean + return value instanceof Boolean } private static boolean isNumber(value) { - value instanceof Number + return value instanceof Number } }