Added ExecutionProperty resolution for sentTo; fixes #440
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -119,7 +119,7 @@ class JUnitMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
|
||||
@Override
|
||||
protected void validateResponseHeadersBlock(BlockBuilder bb) {
|
||||
bb.addLine("""ContractVerifierMessage response = contractVerifierMessaging.receive("${outputMessage.sentTo.serverValue}");""")
|
||||
bb.addLine("""ContractVerifierMessage response = contractVerifierMessaging.receive("${sentToValue(outputMessage.sentTo.serverValue)}");""")
|
||||
bb.addLine("""assertThat(response).isNotNull();""")
|
||||
outputMessage.headers?.executeForEachHeader { Header header ->
|
||||
processHeaderElement(bb, header.name, header.serverValue instanceof NotToEscapePattern ?
|
||||
@@ -128,6 +128,13 @@ class JUnitMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
private String sentToValue(Object sentTo) {
|
||||
if (sentTo instanceof ExecutionProperty) {
|
||||
return ((ExecutionProperty) sentTo).executionCommand
|
||||
}
|
||||
return '"' + sentTo.toString() + '"'
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseAsString() {
|
||||
return 'contractVerifierObjectMapper.writeValueAsString(response.getPayload())'
|
||||
|
||||
@@ -96,13 +96,20 @@ class SpockMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
@Override
|
||||
protected void validateResponseCodeBlock(BlockBuilder bb) {
|
||||
if (outputMessage) {
|
||||
bb.addLine("""ContractVerifierMessage response = contractVerifierMessaging.receive('${outputMessage.sentTo.serverValue}')""")
|
||||
bb.addLine("""ContractVerifierMessage response = contractVerifierMessaging.receive(${sentToValue(outputMessage.sentTo.serverValue)})""")
|
||||
bb.addLine("""assert response != null""")
|
||||
} else {
|
||||
bb.addLine('noExceptionThrown()')
|
||||
}
|
||||
}
|
||||
|
||||
private String sentToValue(Object sentTo) {
|
||||
if (sentTo instanceof ExecutionProperty) {
|
||||
return ((ExecutionProperty) sentTo).executionCommand
|
||||
}
|
||||
return "'" + sentTo.toString() + "'"
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validateResponseHeadersBlock(BlockBuilder bb) {
|
||||
outputMessage.headers?.executeForEachHeader { Header header ->
|
||||
|
||||
@@ -542,4 +542,91 @@ Contract.make {
|
||||
stripped(test) == stripped(expectedMsg)
|
||||
}
|
||||
|
||||
@Issue("440")
|
||||
def "should generate tests with sentTo having a method execution for Spock"() {
|
||||
given:
|
||||
def contractDsl =
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
label 'trigger_event'
|
||||
|
||||
input {
|
||||
triggeredBy('requestIsCalled()')
|
||||
}
|
||||
|
||||
outputMessage {
|
||||
sentTo $(producer(execute("toString()")), consumer('topic.rateablequote'))
|
||||
headers {
|
||||
header('processId', value(producer(regex('[0-9]+')), consumer('123')))
|
||||
}
|
||||
body([
|
||||
eventId: value(producer(regex('[0-9]+')), consumer('1'))
|
||||
])
|
||||
}
|
||||
}
|
||||
MethodBodyBuilder builder = new SpockMessagingMethodBodyBuilder(contractDsl, properties)
|
||||
BlockBuilder blockBuilder = new BlockBuilder(" ")
|
||||
when:
|
||||
builder.appendTo(blockBuilder)
|
||||
def test = blockBuilder.toString()
|
||||
then:
|
||||
String expectedMsg =
|
||||
'''
|
||||
when:
|
||||
requestIsCalled()
|
||||
|
||||
then:
|
||||
ContractVerifierMessage response = contractVerifierMessaging.receive(toString())
|
||||
assert response != null
|
||||
response.getHeader('processId')?.toString() ==~ java.util.regex.Pattern.compile('[0-9]+')
|
||||
and:
|
||||
DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.payload))
|
||||
assertThatJson(parsedJson).field("['eventId']").matches("[0-9]+")
|
||||
'''
|
||||
stripped(test) == stripped(expectedMsg)
|
||||
}
|
||||
|
||||
@Issue("440")
|
||||
def "should generate tests with sentTo having a method execution for JUnit"() {
|
||||
given:
|
||||
def contractDsl =
|
||||
org.springframework.cloud.contract.spec.Contract.make {
|
||||
label 'trigger_event'
|
||||
|
||||
input {
|
||||
triggeredBy('requestIsCalled()')
|
||||
}
|
||||
|
||||
outputMessage {
|
||||
sentTo $(producer(execute("toString()")), consumer('topic.rateablequote'))
|
||||
headers {
|
||||
header('processId', value(producer(regex('[0-9]+')), consumer('123')))
|
||||
}
|
||||
body([
|
||||
eventId: value(producer(regex('[0-9]+')), consumer('1'))
|
||||
])
|
||||
}
|
||||
}
|
||||
MethodBodyBuilder builder = new JUnitMessagingMethodBodyBuilder(contractDsl, properties)
|
||||
BlockBuilder blockBuilder = new BlockBuilder(" ")
|
||||
when:
|
||||
builder.appendTo(blockBuilder)
|
||||
def test = blockBuilder.toString()
|
||||
then:
|
||||
String expectedMsg =
|
||||
'''
|
||||
// when:
|
||||
requestIsCalled();
|
||||
|
||||
// then:
|
||||
ContractVerifierMessage response = contractVerifierMessaging.receive(toString());
|
||||
assertThat(response).isNotNull();
|
||||
assertThat(response.getHeader("processId")).isNotNull();
|
||||
assertThat(response.getHeader("processId").toString()).matches("[0-9]+");
|
||||
// and:
|
||||
DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload()));
|
||||
assertThatJson(parsedJson).field("['eventId']").matches("[0-9]+");
|
||||
'''
|
||||
stripped(test) == stripped(expectedMsg)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user