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 2563c7906c..ce26062d87 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 @@ -95,7 +95,8 @@ abstract class PatternValueDslProperty implements RegexCr @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 6dac394458..d76f5a8b76 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 @@ -2435,6 +2435,48 @@ DocumentContext parsedJson = JsonPath.parse(json); "webclient" | { configProperties.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: