Added regex support for text based response
without this change any assertion on a text based response wouldn't work with this change we start doing regex checks fixes #150
This commit is contained in:
@@ -56,9 +56,19 @@ class JUnitMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
return "contractVerifierMessaging.send(inputMessage, \"${request.messageFrom.serverValue}\")"
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Object value) {
|
||||
return ""
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, String value) {
|
||||
return "responseBody$property == \"${value}\""
|
||||
return ""
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Pattern value) {
|
||||
return ""
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -158,7 +168,7 @@ class JUnitMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
|
||||
@Override
|
||||
protected String getBodyString(String bodyAsString) {
|
||||
return ''
|
||||
return ""
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -172,11 +182,11 @@ class JUnitMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
}
|
||||
|
||||
protected String convertHeaderComparison(String headerValue) {
|
||||
return " == '$headerValue'"
|
||||
return ""
|
||||
}
|
||||
|
||||
protected String convertHeaderComparison(Pattern headerValue) {
|
||||
return "==~ java.util.regex.Pattern.compile('$headerValue')"
|
||||
return ""
|
||||
}
|
||||
|
||||
protected String createHeaderComparison(Object headerValue) {
|
||||
@@ -189,4 +199,7 @@ class JUnitMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
return "matches(\"$escapedHeader\");"
|
||||
}
|
||||
|
||||
private String patternText(Pattern value) {
|
||||
return "==~ java.util.regex.Pattern.compile('$value')"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,6 +71,16 @@ abstract class JUnitMethodBodyBuilder extends RequestProcessingMethodBodyBuilder
|
||||
return "assertThat(responseBody${property}).isEqualTo(\"${value}\")"
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Object value) {
|
||||
return getResponseBodyPropertyComparisonString(property, value as String)
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Pattern value) {
|
||||
return "assertThat(responseBody${property}).${buildEscapedMatchesMethod(value)}"
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processBodyElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) {
|
||||
blockBuilder.addLine("${exec.insertValue("parsedJson.read(\"\\\$$property\")")};")
|
||||
@@ -149,8 +159,12 @@ abstract class JUnitMethodBodyBuilder extends RequestProcessingMethodBodyBuilder
|
||||
}
|
||||
|
||||
protected String createHeaderComparison(Pattern headerValue) {
|
||||
return buildEscapedMatchesMethod(headerValue) + ";"
|
||||
}
|
||||
|
||||
private String buildEscapedMatchesMethod(Pattern headerValue) {
|
||||
String escapedHeader = convertUnicodeEscapesIfRequired("$headerValue")
|
||||
return "matches(\"$escapedHeader\");"
|
||||
return "matches(\"$escapedHeader\")"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -75,10 +75,22 @@ abstract class MethodBodyBuilder {
|
||||
|
||||
/**
|
||||
* Builds the code that for the given {@code property} will compare it to
|
||||
* the given {@code value}
|
||||
* the given Object {@code value}
|
||||
*/
|
||||
protected abstract String getResponseBodyPropertyComparisonString(String property, Object value)
|
||||
|
||||
/**
|
||||
* Builds the code that for the given {@code property} will compare it to
|
||||
* the given String {@code value}
|
||||
*/
|
||||
protected abstract String getResponseBodyPropertyComparisonString(String property, String value)
|
||||
|
||||
/**
|
||||
* Builds the code that for the given {@code property} will match it to
|
||||
* the given regular expression {@code value}
|
||||
*/
|
||||
protected abstract String getResponseBodyPropertyComparisonString(String property, Pattern value)
|
||||
|
||||
/**
|
||||
* Appends to the {@link BlockBuilder} the assertion for the given body element
|
||||
*/
|
||||
@@ -263,7 +275,7 @@ abstract class MethodBodyBuilder {
|
||||
// TODO xml validation
|
||||
} else {
|
||||
bb.addLine(getSimpleResponseBodyString(getResponseAsString()))
|
||||
processText(bb, "", convertedResponseBody as String)
|
||||
processText(bb, "", convertedResponseBody)
|
||||
addColonIfRequired(bb)
|
||||
}
|
||||
}
|
||||
@@ -286,10 +298,10 @@ abstract class MethodBodyBuilder {
|
||||
/**
|
||||
* Appends to {@link BlockBuilder} processing of the given String value.
|
||||
*/
|
||||
protected void processText(BlockBuilder blockBuilder, String property, String value) {
|
||||
if (value.startsWith('$')) {
|
||||
value = stripFirstChar(value).replaceAll('\\$value', "responseBody$property")
|
||||
blockBuilder.addLine(value)
|
||||
protected void processText(BlockBuilder blockBuilder, String property, Object value) {
|
||||
if (value instanceof String && value.startsWith('$')) {
|
||||
String newValue = stripFirstChar(value).replaceAll('\\$value', "responseBody$property")
|
||||
blockBuilder.addLine(newValue)
|
||||
addColonIfRequired(blockBuilder)
|
||||
} else {
|
||||
blockBuilder.addLine(getResponseBodyPropertyComparisonString(property, value))
|
||||
|
||||
@@ -52,6 +52,16 @@ class MockMvcJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Object value) {
|
||||
return null
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Pattern value) {
|
||||
return null
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processHeaderElement(BlockBuilder blockBuilder, String property, String value) {
|
||||
blockBuilder.addLine("assertThat(response.header(\"$property\")).${createHeaderComparison(value)}")
|
||||
|
||||
@@ -51,6 +51,11 @@ class SpockMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
return "responseBody$property == \"${value}\""
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Pattern value) {
|
||||
return null
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processBodyElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) {
|
||||
blockBuilder.addLine("${exec.insertValue("parsedJson.read('\\\$$property')")}")
|
||||
@@ -108,9 +113,14 @@ class SpockMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder {
|
||||
return blockBuilder
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Object value) {
|
||||
return ""
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPropertyInListString(String property, Integer listIndex) {
|
||||
"$property[$listIndex]" ?: ''
|
||||
return "$property[$listIndex]" ?: ''
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,6 +50,16 @@ abstract class SpockMethodRequestProcessingBodyBuilder extends RequestProcessing
|
||||
return "responseBody$property == \"${value}\""
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Object value) {
|
||||
return getResponseBodyPropertyComparisonString(property, value as String)
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResponseBodyPropertyComparisonString(String property, Pattern value) {
|
||||
return "responseBody$property ${patternComparison(value)}"
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processBodyElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) {
|
||||
blockBuilder.addLine("${exec.insertValue("parsedJson.read('\\\$$property')")}")
|
||||
@@ -129,7 +139,11 @@ abstract class SpockMethodRequestProcessingBodyBuilder extends RequestProcessing
|
||||
}
|
||||
|
||||
protected String convertHeaderComparison(Pattern headerValue) {
|
||||
return "==~ java.util.regex.Pattern.compile('$headerValue')"
|
||||
return patternComparison(headerValue)
|
||||
}
|
||||
|
||||
private String patternComparison(Pattern pattern) {
|
||||
return "==~ java.util.regex.Pattern.compile('$pattern')"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -743,6 +743,29 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
|
||||
test.contains('assertThatRejectionReasonIsNull(parsedJson.read("$.get("rejectionReason").title"));')
|
||||
}
|
||||
|
||||
@Issue('#150')
|
||||
def "should support body matching in response"() {
|
||||
given:
|
||||
Contract contractDsl = Contract.make {
|
||||
request {
|
||||
method 'GET'
|
||||
url '/get'
|
||||
}
|
||||
response {
|
||||
status 200
|
||||
status 200
|
||||
body(value(stub("HELLO FROM STUB"), server(regex(".*"))))
|
||||
}
|
||||
}
|
||||
MethodBodyBuilder builder = new JaxRsClientJUnitMethodBodyBuilder(contractDsl, properties)
|
||||
BlockBuilder blockBuilder = new BlockBuilder(" ")
|
||||
when:
|
||||
builder.then(blockBuilder)
|
||||
def test = blockBuilder.toString()
|
||||
then:
|
||||
test.contains("assertThat(responseBody).matches(\".*\");")
|
||||
}
|
||||
|
||||
private String stripped(String string) {
|
||||
return string.stripMargin().stripIndent().replace('\t', '').replace('\n', '').replace(' ','')
|
||||
}
|
||||
|
||||
@@ -1622,4 +1622,27 @@ World.'''"""
|
||||
test.contains('.header("authorization", getOAuthTokenHeader())')
|
||||
}
|
||||
|
||||
@Issue('#150')
|
||||
def "should support body matching in response"() {
|
||||
given:
|
||||
Contract contractDsl = Contract.make {
|
||||
request {
|
||||
method 'GET'
|
||||
url '/get'
|
||||
}
|
||||
response {
|
||||
status 200
|
||||
status 200
|
||||
body(value(stub("HELLO FROM STUB"), server(regex(".*"))))
|
||||
}
|
||||
}
|
||||
MethodBodyBuilder builder = new MockMvcSpockMethodRequestProcessingBodyBuilder(contractDsl, properties)
|
||||
BlockBuilder blockBuilder = new BlockBuilder(" ")
|
||||
when:
|
||||
builder.then(blockBuilder)
|
||||
def test = blockBuilder.toString()
|
||||
then:
|
||||
test.contains("responseBody ==~ java.util.regex.Pattern.compile('.*')")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user