From c4ab64757f7b4b04cbbefc3118d25e4424ca1841 Mon Sep 17 00:00:00 2001 From: mfeygelson <33298564+mfeygelson@users.noreply.github.com> Date: Mon, 5 Mar 2018 03:22:31 -0600 Subject: [PATCH] Support pattern properties in messaging contracts (#564) --- .../cloud/contract/spec/internal/Input.groovy | 13 ++++++++ .../spec/internal/OutputMessage.groovy | 13 ++++++++ .../spec/internal/ContractSpec.groovy | 30 +++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Input.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Input.groovy index 875a426abb..f919eaa356 100644 --- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Input.groovy +++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Input.groovy @@ -35,6 +35,8 @@ import java.util.regex.Pattern @ToString(includePackage = false, includeNames = true) class Input extends Common { + @Delegate ClientPatternValueDslProperty property = new ClientPatternValueDslProperty() + DslProperty messageFrom ExecutionProperty triggeredBy Headers messageHeaders = new Headers() @@ -111,6 +113,17 @@ class Input extends Common { closure.delegate = this.matchers closure() } + + @CompileStatic + @EqualsAndHashCode(includeFields = true) + @ToString(includePackage = false) + private class ClientPatternValueDslProperty extends PatternValueDslProperty { + + @Override + protected ClientDslProperty createProperty(Pattern pattern, Object generatedValue) { + return new ClientDslProperty(pattern, generatedValue) + } + } } diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/OutputMessage.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/OutputMessage.groovy index 0f3f217f7d..b70634af7b 100644 --- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/OutputMessage.groovy +++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/OutputMessage.groovy @@ -29,6 +29,8 @@ import java.util.regex.Pattern @ToString(includePackage = false, includeNames = true) class OutputMessage extends Common { + @Delegate ServerPatternValueDslProperty property = new ServerPatternValueDslProperty() + DslProperty sentTo Headers headers DslProperty body @@ -82,6 +84,17 @@ class OutputMessage extends Common { closure.delegate = this.matchers closure() } + + @CompileStatic + @EqualsAndHashCode(includeFields = true) + @ToString(includePackage = false) + private class ServerPatternValueDslProperty extends PatternValueDslProperty { + + @Override + protected ServerDslProperty createProperty(Pattern pattern, Object generatedValue) { + return new ServerDslProperty(pattern, generatedValue) + } + } } @CompileStatic 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 e69d20ad88..cf55575211 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 @@ -66,6 +66,36 @@ class ContractSpec extends Specification { noExceptionThrown() } + def 'should work for messaging with pattern properties'() { + when: + Contract.make { + input { + messageFrom('input') + messageBody([ + foo: anyNonBlankString() + ]) + messageHeaders { + header([ + foo: anyNumber() + ]) + } + } + outputMessage { + sentTo('output') + body([ + foo2: anyNonEmptyString() + ]) + headers { + header([ + foo2: anyIpAddress() + ]) + } + } + } + then: + noExceptionThrown() + } + def 'should generate a value if only regex is passed for client'() { given: Request request = new Request()