Fixed the quotes in JaxRs entities

without this change we're adding an unnecessary quote around a JaxRs entity
with this change we're ensuring that the quote is not there

fixes #261
This commit is contained in:
Marcin Grzejszczak
2017-04-18 09:49:52 +02:00
parent f4aa98636e
commit 3ace049241
3 changed files with 52 additions and 6 deletions

View File

@@ -506,7 +506,13 @@ abstract class MethodBodyBuilder {
* Removes unnecessary quotes
*/
protected String trimRepeatedQuotes(String toTrim) {
return toTrim.startsWith('"') ? toTrim.replaceAll('"', '') : toTrim
if (toTrim.startsWith('"')) {
return toTrim.replaceAll('"', '')
//#261
} else if (toTrim.startsWith('\\"') && toTrim.endsWith('\\"')) {
return toTrim.substring(2, toTrim.length() - 2)
}
return toTrim
}
/**

View File

@@ -235,7 +235,7 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
where:
methodBuilderName | methodBuilder | bodyString
"JaxRsClientSpockMethodRequestProcessingBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientSpockMethodRequestProcessingBodyBuilder(dsl, properties) } | """entity('property1=VAL1', 'application/octet-stream')"""
"JaxRsClientJUnitMethodBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } | 'entity("\\"property1=VAL1\\"", "application/octet-stream")'
"JaxRsClientJUnitMethodBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } | 'entity("property1=VAL1", "application/octet-stream")'
}
def "should generate assertions for array in response body with #methodBuilderName"() {
@@ -617,7 +617,7 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
where:
methodBuilderName | methodBuilder | bodyString
"JaxRsClientSpockMethodRequestProcessingBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientSpockMethodRequestProcessingBodyBuilder(dsl, properties) } | "entity('', 'application/octet-stream')"
"JaxRsClientJUnitMethodBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } | 'entity("\\"\\"", "application/octet-stream"'
"JaxRsClientJUnitMethodBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } | 'entity("", "application/octet-stream"'
}
def "should generate test for String in response body with #methodBodyName"() {
@@ -1113,4 +1113,44 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub
"JaxRsClientSpockMethodRequestProcessingBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientSpockMethodRequestProcessingBodyBuilder(dsl, properties) }
"JaxRsClientJUnitMethodBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) }
}
@Issue('#261')
@Unroll
def "should not produce any additional quotes for [#methodBuilderName]"() {
given:
Contract contractDsl = Contract.make {
request {
method "POST"
url "/v2/applications/a-TEST-upload/documents"
headers {
header 'Authorization': "foo"
header 'Content-Type': "multipart/form-data;boundary=Boundary_1_1831312172_1491482784697"
}
body $('''
--Boundary_1_1831312172_1491482784697
Content-Disposition: form-data; name="file"
DATA
--Boundary_1_1831312172_1491482784697--
''')
}
response {
status 400
body "File name is required"
}
}
MethodBodyBuilder builder = methodBuilder(contractDsl)
BlockBuilder blockBuilder = new BlockBuilder(" ")
when:
builder.appendTo(blockBuilder)
def test = blockBuilder.toString()
then:
!test.contains('entity("\\"\\n')
test.contains('''entity("\\n--Boundary_1_1831312172_1491482784697\\nContent-Disposition: form-data; name=\\"file\\"\\n\\nDATA\\n--Boundary_1_1831312172_1491482784697--\\n", "multipart/form-data;boundary=Boundary_1_1831312172_1491482784697"))''')
and:
SyntaxChecker.tryToCompile(methodBuilderName, blockBuilder.toString())
where:
methodBuilderName | methodBuilder
"JaxRsClientJUnitMethodBodyBuilder" | { org.springframework.cloud.contract.spec.Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) }
}
}

View File

@@ -310,7 +310,7 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
where:
methodBuilderName | methodBuilder | bodyString
"MockMvcSpockMethodBuilder" | { Contract dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl, properties) } | """.body('''property1=VAL1''')"""
"MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } | '.body("\\"property1=VAL1\\"")'
"MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } | '.body("property1=VAL1")'
}
@Issue("185")
@@ -698,7 +698,7 @@ class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStub
where:
methodBuilderName | methodBuilder | bodyString
"MockMvcSpockMethodBuilder" | { Contract dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl, properties) } | ".body('''''')"
"MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } | ".body(\"\\\"\\\"\")"
"MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } | '.body("")'
}
def "should generate test for String in response body with #methodBuilderName"() {
@@ -1163,7 +1163,7 @@ World.''')
methodBuilderName | methodBuilder | bodyString
"MockMvcSpockMethodBuilder" | { Contract dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl, properties) } | """'''hello,
World.'''"""
"MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } | '\\"hello,\\nWorld.\\"'
"MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } | '"hello,\\nWorld."'
}
@Issue('180')