From ec909350e9ec89e1f66759d8ad2ac14e85e95cf2 Mon Sep 17 00:00:00 2001 From: bono007 Date: Thu, 10 Dec 2020 17:25:35 -0600 Subject: [PATCH] Generates random boolean request value for aBoolean() (#1581) Fixes gh-1410 --- .../internal/PatternValueDslProperty.java | 3 +- .../SpringTestMethodBodyBuildersSpec.groovy | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/PatternValueDslProperty.java b/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/PatternValueDslProperty.java index d787d2876c..62fef0b93d 100644 --- a/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/PatternValueDslProperty.java +++ b/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/PatternValueDslProperty.java @@ -101,7 +101,8 @@ abstract class PatternValueDslProperty @Override public T aBoolean() { - return createAndValidateProperty(RegexPatterns.TRUE_OR_FALSE); + return createAndValidateProperty(RegexPatterns.TRUE_OR_FALSE, + this.random.nextBoolean()); } @Override diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy index 316f19ebb9..6619b0321c 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy @@ -2434,6 +2434,48 @@ DocumentContext parsedJson = JsonPath.parse(json); "webclient" | { properties.testMode = TestMode.WEBTESTCLIENT } | '$' } + @Issue('#1410') + def 'should generate random boolean input in generated test'() { + given: + Contract contractDsl = Contract.make { + request { + method 'GET' + urlPath '/get' + body([ + "someBooleanInputParam" : aBoolean() + ]) + headers { + contentType applicationJson() + } + } + response { + status OK() + body([ + "someBooleanOutputParam" : $(aBoolean()) + ]) + headers { + contentType(applicationJson()) + } + } + } + methodBuilder() + when: + String test = singleTestGenerator(contractDsl) + then: + // The input body string looks like one of the following: + // .body("{\"someBooleanInputParam\":true|false}"); + // .body('''{"someBooleanInputParam":true|false}''') + test.findAll(~'\\.body\\((\'{3}|")\\{("|\\\\")someBooleanInputParam("|\\\\"):(true|false)\\}(\'{3}|")\\)').size().equals(1) + and: + SyntaxChecker.tryToCompile(methodBuilderName, test) + where: + methodBuilderName | methodBuilder + "spock" | { properties.testFramework = TestFramework.SPOCK } + "testng" | { properties.testFramework = TestFramework.TESTNG } + "mockmvc" | { properties.testMode = TestMode.MOCKMVC } + "webclient" | { properties.testMode = TestMode.WEBTESTCLIENT } + } + @Issue('#162') def 'should escape regex properly for content type'() { given: