From 207617d4ceaeb7c8d1979d7080d4b23a35257f68 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 8 Nov 2019 14:57:48 +0100 Subject: [PATCH] Fixed the error when using optional() and anyOf() together fixes gh-1215 --- .../spec/internal/OptionalProperty.groovy | 12 ++++++++++-- .../spec/internal/ContractSpec.groovy | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/OptionalProperty.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/OptionalProperty.groovy index 84ef03c347..a7e3de33bb 100644 --- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/OptionalProperty.groovy +++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/OptionalProperty.groovy @@ -45,8 +45,16 @@ class OptionalProperty implements Serializable, CanBeDynamic { } String value() { - return this.value instanceof RegexProperty ? - ((RegexProperty) this.value).pattern.pattern() : this.value + Object valueToCheck = valueToCheck() + return (valueToCheck instanceof RegexProperty || valueToCheck instanceof Pattern) ? + new RegexProperty(valueToCheck).pattern.pattern() : valueToCheck + } + + private Object valueToCheck() { + if (this.value instanceof ClientDslProperty) { + return ((ClientDslProperty) this.value).getClientValue() + } + return this.value } protected Pattern optionalPatternValue() { diff --git a/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/ContractSpec.groovy b/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/ContractSpec.groovy index c6a6bbf60e..37fc7c877c 100644 --- a/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/ContractSpec.groovy +++ b/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/ContractSpec.groovy @@ -442,4 +442,23 @@ then: then: thrown(AssertionError) } + + @Issue("1215") + def 'should work fine when dealing with anyOf'() { + when: + Contract.make { + request { + method 'GET' + url '/any' + body ( + foo: $(consumer(optional(anyOf('WORKS','MIGHTY', 'DESPAIR'))), producer('DESPAIR')) + ) + } + response { + status OK() + } + } + then: + noExceptionThrown() + } }