diff --git a/spring-cloud-contract-spec/pom.xml b/spring-cloud-contract-spec/pom.xml
index 790b66ca8d..02b0320f29 100644
--- a/spring-cloud-contract-spec/pom.xml
+++ b/spring-cloud-contract-spec/pom.xml
@@ -17,6 +17,11 @@
org.codehaus.groovy
groovy
+
+ dk.brics.automaton
+ automaton
+ 1.11-8
+
org.spockframework
spock-core
diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Common.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Common.groovy
index 6cbf2a3a6f..a403f4d1e9 100644
--- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Common.groovy
+++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Common.groovy
@@ -81,15 +81,19 @@ class Common {
return new DslProperty(client.clientValue, server.serverValue)
}
- DslProperty value(Object value) {
- return new DslProperty(value)
- }
-
DslProperty value(ServerDslProperty server, ClientDslProperty client) {
assertThatSidesMatch(client.clientValue, server.serverValue)
return new DslProperty(client.clientValue, server.serverValue)
}
+ DslProperty value(DslProperty value) {
+ return value
+ }
+
+ DslProperty value(Object value) {
+ return new DslProperty(value)
+ }
+
DslProperty $(ClientDslProperty client, ServerDslProperty server) {
return value(client, server)
}
diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Request.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Request.groovy
index 724771d2f4..982fe8f1ea 100644
--- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Request.groovy
+++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Request.groovy
@@ -20,7 +20,9 @@ import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import groovy.transform.TypeChecked
+import repackaged.nl.flotsam.xeger.Xeger
+import java.util.regex.Pattern
/**
* Represents the request side of the HTTP communication
*
@@ -172,6 +174,30 @@ class Request extends Common {
throw new IllegalStateException("Optional can be used only for the stub side of the request!")
}
+ DslProperty value(ClientDslProperty client) {
+ Object clientValue = client.clientValue
+ if (client.clientValue instanceof Pattern) {
+ clientValue = new Xeger(((Pattern)client.clientValue).pattern()).generate()
+ }
+ return new DslProperty(client.clientValue, clientValue)
+ }
+
+ @Override
+ DslProperty value(ClientDslProperty client, ServerDslProperty server) {
+ if (server.clientValue instanceof Pattern) {
+ throw new IllegalStateException("You can't have a regular expression for the request on the server side")
+ }
+ return super.value(client, server)
+ }
+
+ @Override
+ DslProperty value(ServerDslProperty server, ClientDslProperty client) {
+ if (server.clientValue instanceof Pattern) {
+ throw new IllegalStateException("You can't have a regular expression for the request on the server side")
+ }
+ return super.value(server, client)
+ }
+
}
@CompileStatic
diff --git a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Response.groovy b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Response.groovy
index 454841becd..035ef82abc 100644
--- a/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Response.groovy
+++ b/spring-cloud-contract-spec/src/main/groovy/org/springframework/cloud/contract/spec/internal/Response.groovy
@@ -20,6 +20,9 @@ import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import groovy.transform.TypeChecked
+import repackaged.nl.flotsam.xeger.Xeger
+
+import java.util.regex.Pattern
/**
* Represents the response side of the HTTP communication
@@ -83,6 +86,30 @@ class Response extends Common {
void assertThatSidesMatch(OptionalProperty stubSide, Object testSide) {
throw new IllegalStateException("Optional can be used only in the test side of the response!")
}
+
+ DslProperty value(ServerDslProperty server) {
+ Object value = server.clientValue
+ if (server.clientValue instanceof Pattern) {
+ value = new Xeger(((Pattern)server.clientValue).pattern()).generate()
+ }
+ return new DslProperty(server.clientValue, value)
+ }
+
+ @Override
+ DslProperty value(ClientDslProperty client, ServerDslProperty server) {
+ if (client.clientValue instanceof Pattern) {
+ throw new IllegalStateException("You can't have a regular expression for the response on the client side")
+ }
+ return super.value(client, server)
+ }
+
+ @Override
+ DslProperty value(ServerDslProperty server, ClientDslProperty client) {
+ if (client.clientValue instanceof Pattern) {
+ throw new IllegalStateException("You can't have a regular expression for the response on the client side")
+ }
+ return super.value(server, client)
+ }
}
@CompileStatic
diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/nl/flotsam/xeger/Xeger.java b/spring-cloud-contract-spec/src/main/groovy/repackaged/nl/flotsam/xeger/Xeger.java
similarity index 96%
rename from spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/nl/flotsam/xeger/Xeger.java
rename to spring-cloud-contract-spec/src/main/groovy/repackaged/nl/flotsam/xeger/Xeger.java
index 9bd42a674a..10b3987643 100644
--- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/nl/flotsam/xeger/Xeger.java
+++ b/spring-cloud-contract-spec/src/main/groovy/repackaged/nl/flotsam/xeger/Xeger.java
@@ -19,16 +19,16 @@
* released to any central repository.
*
*/
-package nl.flotsam.xeger;
+package repackaged.nl.flotsam.xeger;
+
+import java.util.List;
+import java.util.Random;
import dk.brics.automaton.Automaton;
import dk.brics.automaton.RegExp;
import dk.brics.automaton.State;
import dk.brics.automaton.Transition;
-import java.util.List;
-import java.util.Random;
-
/**
* An object that will generate text from a regular expression. In a way, it's the opposite of a regular expression
* matcher: an instance of this class will produce text that is guaranteed to match the regular expression passed in.
@@ -53,7 +53,7 @@ public class Xeger {
}
/**
- * As {@link nl.flotsam.xeger.Xeger#Xeger(String, java.util.Random)}, creating a {@link java.util.Random} instance
+ * As {@link Xeger#Xeger(String, java.util.Random)}, creating a {@link java.util.Random} instance
* implicityly.
*
* @param regex as string
diff --git a/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/RequestSpec.groovy b/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/RequestSpec.groovy
new file mode 100644
index 0000000000..2e3e8fecc7
--- /dev/null
+++ b/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/RequestSpec.groovy
@@ -0,0 +1,37 @@
+package org.springframework.cloud.contract.spec.internal
+
+import spock.lang.Specification
+/**
+ * @author Marcin Grzejszczak
+ */
+class RequestSpec extends Specification {
+
+ def 'should throw exception when on request side a value contains regex for server'() {
+ given:
+ Request request = new Request()
+ when:
+ request.with {
+ value(client("foo"), server(regex("foo")))
+ }
+ then:
+ thrown(IllegalStateException)
+ when:
+ request.with {
+ value(server(regex("foo")), client("foo"))
+ }
+ then:
+ thrown(IllegalStateException)
+ }
+
+ def 'should generate a value if only regex is passed for client'() {
+ given:
+ Request request = new Request()
+ DslProperty property
+ when:
+ request.with {
+ property = value(client(regex("[0-9]{5}")))
+ }
+ then:
+ (property.serverValue as String).matches(/[0-9]{5}/)
+ }
+}
diff --git a/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/ResponseSpec.groovy b/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/ResponseSpec.groovy
new file mode 100644
index 0000000000..f22f855f4a
--- /dev/null
+++ b/spring-cloud-contract-spec/src/test/groovy/org/springframework/cloud/contract/spec/internal/ResponseSpec.groovy
@@ -0,0 +1,37 @@
+package org.springframework.cloud.contract.spec.internal
+
+import spock.lang.Specification
+/**
+ * @author Marcin Grzejszczak
+ */
+class ResponseSpec extends Specification {
+
+ def 'should throw exception when on response side a value contains regex for client'() {
+ given:
+ Response response = new Response()
+ when:
+ response.with {
+ value(server("foo"), client(regex("foo")))
+ }
+ then:
+ thrown(IllegalStateException)
+ when:
+ response.with {
+ value(client(regex("foo")), server("foo"))
+ }
+ then:
+ thrown(IllegalStateException)
+ }
+
+ def 'should generate a value if only regex is passed for server'() {
+ given:
+ Response request = new Response()
+ DslProperty property
+ when:
+ request.with {
+ property = value(server(regex("[0-9]{5}")))
+ }
+ then:
+ (property.serverValue as String).matches(/[0-9]{5}/)
+ }
+}
diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/test/groovy/nl/flotsam/xeger/XegerTest.java b/spring-cloud-contract-spec/src/test/groovy/repackaged/nl/flotsam/xeger/XegerTest.java
similarity index 98%
rename from spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/test/groovy/nl/flotsam/xeger/XegerTest.java
rename to spring-cloud-contract-spec/src/test/groovy/repackaged/nl/flotsam/xeger/XegerTest.java
index f60e4bf5db..a1f2cd775a 100644
--- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/test/groovy/nl/flotsam/xeger/XegerTest.java
+++ b/spring-cloud-contract-spec/src/test/groovy/repackaged/nl/flotsam/xeger/XegerTest.java
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package nl.flotsam.xeger;
+package repackaged.nl.flotsam.xeger;
import org.junit.Test;
diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/test/groovy/nl/flotsam/xeger/XegerUtilsTest.java b/spring-cloud-contract-spec/src/test/groovy/repackaged/nl/flotsam/xeger/XegerUtilsTest.java
similarity index 96%
rename from spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/test/groovy/nl/flotsam/xeger/XegerUtilsTest.java
rename to spring-cloud-contract-spec/src/test/groovy/repackaged/nl/flotsam/xeger/XegerUtilsTest.java
index ccabfeb54d..978a6ab8d3 100644
--- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/test/groovy/nl/flotsam/xeger/XegerUtilsTest.java
+++ b/spring-cloud-contract-spec/src/test/groovy/repackaged/nl/flotsam/xeger/XegerUtilsTest.java
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package nl.flotsam.xeger;
+package repackaged.nl.flotsam.xeger;
import org.hamcrest.Matchers;
import org.junit.Test;
diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/pom.xml b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/pom.xml
index 9d288ecb9b..fc38432e34 100644
--- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/pom.xml
+++ b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/pom.xml
@@ -30,11 +30,6 @@
com.github.tomakehurst
wiremock
-
- dk.brics.automaton
- automaton
- 1.11-8
-
org.spockframework
spock-core
diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverter.groovy b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverter.groovy
index 960797316c..fdccd95ba5 100644
--- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverter.groovy
+++ b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverter.groovy
@@ -23,7 +23,7 @@ import groovy.json.JsonSlurper
import groovy.transform.CompileDynamic
import groovy.xml.XmlUtil
import org.springframework.cloud.contract.spec.Contract
-import nl.flotsam.xeger.Xeger
+import repackaged.nl.flotsam.xeger.Xeger
import java.nio.charset.StandardCharsets
diff --git a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy
index c4a9fec545..04e0a36783 100755
--- a/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy
+++ b/spring-cloud-contract-verifier/spring-cloud-contract-verifier-core/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy
@@ -865,8 +865,7 @@ class WireMockGroovyDslSpec extends Specification implements WireMockStubVerifie
}
}
then:
- def e = thrown(IllegalStateException)
- e.message.contains "Query parameter 'age' can't be a pattern for the server side"
+ thrown(IllegalStateException)
}
def "should not allow query parameter unresolvable for a server value"() {