From 22779b6eb86e126a1ecd56aec5d7f6f68cc8610a Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 10 Jan 2020 10:16:38 +0100 Subject: [PATCH] Fixes wrong test side entry resolution; fixes gh-1304 --- .../contract/verifier/builder/BodyParser.java | 8 ++-- .../builder/MethodBodyBuilderSpec.groovy | 44 +++++++++++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/BodyParser.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/BodyParser.java index 1c3773f7b3..e011e38fa9 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/BodyParser.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/BodyParser.java @@ -123,12 +123,14 @@ interface BodyParser extends BodyThen { return extractValue((GString) bodyValue, contentType, ContentUtils.GET_TEST_SIDE); } - if (TEXT != contentType && FORM != contentType && DEFINED != contentType) { + else if (bodyValue instanceof FromFileProperty) { + return MapConverter.transformValues(bodyValue, ContentUtils.GET_TEST_SIDE); + } + else if (TEXT != contentType && FORM != contentType && DEFINED != contentType) { boolean dontParseStrings = contentType == JSON && bodyValue instanceof Map; Closure parsingClosure = dontParseStrings ? Closure.IDENTITY : MapConverter.JSON_PARSING_CLOSURE; - return MapConverter.transformValues(bodyValue, ContentUtils.GET_TEST_SIDE, - parsingClosure); + return MapConverter.getTestSideValues(bodyValue, parsingClosure); } return bodyValue; } diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy index 8818a9170c..7f67b9f2f3 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy @@ -1927,4 +1927,48 @@ response: } } + def 'should work with an array of uuids'() { + given: + Contract contractDsl = Contract.make { + description "TEST ARRAY" + request { + method POST() + urlPath($(c('/TEST'), p('/TEST'))) + body([ + $(c(anyUuid()), p("00000000-0000-0000-0000-000000000002")), + $(c(anyUuid()), p("00000000-0000-0000-0000-000000000001")) + ]) + } + response { + status OK() + } + } + methodBuilder() + when: + String test = singleTestGenerator(contractDsl) + then: + SyntaxChecker.tryToCompileWithoutCompileStatic(methodBuilderName, test) + and: + !test.contains('singleValue') + and: + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "spock" | { + properties.testFramework = TestFramework.SPOCK + } + "mockmvc" | { + properties.testMode = TestMode.MOCKMVC + } + "jaxrs-spock" | { + properties.testFramework = TestFramework.SPOCK; properties.testMode = TestMode.JAXRSCLIENT + } + "jaxrs" | { + properties.testFramework = TestFramework.JUNIT; properties.testMode = TestMode.JAXRSCLIENT + } + "testNG" | { + properties.testFramework = TestFramework.TESTNG + } + } + }