Fixed the generation of values for regexs
This commit is contained in:
@@ -6,24 +6,26 @@ org.springframework.cloud.contract.spec.Contract.make {
|
||||
url '/fraudcheck'
|
||||
body("""
|
||||
{
|
||||
"clientId":"${value(consumer(regex('[0-9]{10}')), producer('1234567890'))}",
|
||||
"clientId":"${value(consumer(regex('[0-9]{10}')))}",
|
||||
"loanAmount":99999}
|
||||
"""
|
||||
)
|
||||
headers {
|
||||
header('Content-Type', 'application/vnd.fraud.v1+json')
|
||||
}
|
||||
|
||||
}
|
||||
response {
|
||||
status 200
|
||||
body( """{
|
||||
"fraudCheckStatus": "${value(consumer('FRAUD'), producer(regex('[A-Z]{5}')))}",
|
||||
"rejectionReason": "Amount too high"
|
||||
}""")
|
||||
"fraudCheckStatus": "FRAUD",
|
||||
"rejectionReason": "Amount too high"
|
||||
}""")
|
||||
headers {
|
||||
header('Content-Type': value(producer(regex('application/vnd.fraud.v1.json.*')), consumer('application/vnd.fraud.v1+json')))
|
||||
}
|
||||
header('Content-Type': value(
|
||||
producer(regex('application/vnd.fraud.v1.json.*')),
|
||||
consumer('application/vnd.fraud.v1+json'))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,7 +23,10 @@ org.springframework.cloud.contract.spec.Contract.make {
|
||||
rejectionReason: $(consumer(null), producer(execute('assertThatRejectionReasonIsNull($it)')))
|
||||
)
|
||||
headers {
|
||||
header('Content-Type': value(producer(regex('application/vnd.fraud.v1.json.*')), consumer('application/vnd.fraud.v1+json')))
|
||||
header('Content-Type': value(
|
||||
producer(regex('application/vnd.fraud.v1.json.*')),
|
||||
consumer('application/vnd.fraud.v1+json'))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 an input for messaging. The input can be a message or some
|
||||
@@ -77,6 +80,14 @@ class Input extends Common {
|
||||
closure()
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
static class BodyType extends DslProperty {
|
||||
|
||||
BodyType(Object clientValue, Object serverValue) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@TypeChecked
|
||||
@EqualsAndHashCode
|
||||
@@ -47,14 +50,6 @@ class OutputMessage extends Common {
|
||||
this.sentTo = sentTo
|
||||
}
|
||||
|
||||
ServerDslProperty producer(Object clientValue) {
|
||||
return new ServerDslProperty(clientValue)
|
||||
}
|
||||
|
||||
ClientDslProperty consumer(Object clientValue) {
|
||||
return new ClientDslProperty(clientValue)
|
||||
}
|
||||
|
||||
void body(Object bodyAsValue) {
|
||||
this.body = new DslProperty(bodyAsValue)
|
||||
}
|
||||
@@ -72,6 +67,14 @@ class OutputMessage extends Common {
|
||||
void assertThat(String assertThat) {
|
||||
this.assertThat = new ExecutionProperty(assertThat)
|
||||
}
|
||||
|
||||
DslProperty value(ServerDslProperty server) {
|
||||
Object value = server.clientValue
|
||||
if (server.clientValue instanceof Pattern) {
|
||||
value = new Xeger(((Pattern)server.clientValue).pattern()).generate()
|
||||
}
|
||||
return new DslProperty(value, server.serverValue)
|
||||
}
|
||||
}
|
||||
|
||||
@CompileStatic
|
||||
|
||||
@@ -92,7 +92,7 @@ class Response extends Common {
|
||||
if (server.clientValue instanceof Pattern) {
|
||||
value = new Xeger(((Pattern)server.clientValue).pattern()).generate()
|
||||
}
|
||||
return new DslProperty(server.clientValue, value)
|
||||
return new DslProperty(value, server.serverValue)
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package org.springframework.cloud.contract.spec.internal
|
||||
|
||||
import spock.lang.Specification
|
||||
|
||||
import java.util.regex.Pattern
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
@@ -32,6 +35,7 @@ class ResponseSpec extends Specification {
|
||||
property = value(producer(regex("[0-9]{5}")))
|
||||
}
|
||||
then:
|
||||
(property.serverValue as String).matches(/[0-9]{5}/)
|
||||
(property.clientValue as String).matches(/[0-9]{5}/)
|
||||
(property.serverValue as Pattern).pattern() == '[0-9]{5}'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.cloud.contract.verifier.plugin
|
||||
|
||||
import org.gradle.testkit.runner.BuildResult
|
||||
import org.springframework.cloud.contract.verifier.util.AssertionUtil
|
||||
import spock.lang.Ignore
|
||||
import spock.lang.Stepwise
|
||||
|
||||
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS
|
||||
@@ -80,7 +81,7 @@ class BasicFunctionalSpec extends ContractVerifierIntegrationSpec {
|
||||
""", generatedClientJsonStub)
|
||||
}
|
||||
|
||||
//@Ignore("for some reason it's flickering")
|
||||
@Ignore("for some reason it's flickering")
|
||||
def "tasks should be up-to-date when appropriate"() {
|
||||
given:
|
||||
assert !fileExists(GENERATED_CLIENT_JSON_STUB)
|
||||
|
||||
@@ -1451,16 +1451,25 @@ World.'''"""
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
request {
|
||||
method 'PUT'
|
||||
url '/foo'
|
||||
url value(consumer(regex('/foo/[0-9]{5}')))
|
||||
body([
|
||||
requestElement: value(consumer(regex('[0-9]{5}')))
|
||||
])
|
||||
headers {
|
||||
header('header', value(consumer(regex('application\\/vnd\\.fraud\\.v1\\+json;.*'))))
|
||||
}
|
||||
}
|
||||
response {
|
||||
status 200
|
||||
body([
|
||||
responseElement: value(producer(regex('[0-9]{7}')))
|
||||
])
|
||||
headers {
|
||||
header('Content-Type': value(
|
||||
producer(regex('application/vnd.fraud.v1.json.*')),
|
||||
consumer('application/vnd.fraud.v1+json'))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
// end::dsl_one_side_data_generation_example[]
|
||||
@@ -1472,12 +1481,16 @@ World.'''"""
|
||||
dslWithOnlyOneSideForDocs, properties)
|
||||
BlockBuilder blockBuilder = new BlockBuilder(" ")
|
||||
when:
|
||||
builder.given(blockBuilder)
|
||||
builder.then(blockBuilder)
|
||||
builder.appendTo(blockBuilder)
|
||||
def test = blockBuilder.toString()
|
||||
def strippedTest = test.replace('\n', '').stripIndent().stripMargin()
|
||||
then:
|
||||
test.replace('\n', '').matches('.*')
|
||||
test.replace('\n', '').stripIndent().stripMargin().matches('.*field\\("responseElement"\\).isEqualTo\\("[0-9]{7}.*')
|
||||
strippedTest.matches(""".*header\\('header', 'application\\/vnd\\.fraud\\.v1\\+json;.*'\\).*""")
|
||||
strippedTest.matches(""".*body\\('''\\{"requestElement":"[0-9]{5}"\\}'''\\).*""")
|
||||
strippedTest.matches(""".*put\\("/foo/[0-9]{5}"\\).*""")
|
||||
strippedTest.contains("""response.header('Content-Type') ==~ java.util.regex.Pattern.compile('application/vnd.fraud.v1.json.*')""")
|
||||
"application/vnd.fraud.v1+json;charset=UTF-8".matches('application/vnd.fraud.v1.json.*')
|
||||
strippedTest.contains("""assertThatJson(parsedJson).field("responseElement").matches("[0-9]{7}")""")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user