diff --git a/spring-cloud-contract-dependencies/pom.xml b/spring-cloud-contract-dependencies/pom.xml
index f9cfaca078..0e7a05c1f8 100644
--- a/spring-cloud-contract-dependencies/pom.xml
+++ b/spring-cloud-contract-dependencies/pom.xml
@@ -15,7 +15,7 @@
Spring Cloud Contract Dependencies
2.8.0
- 0.4.9
+ 0.4.10
1.0.2.v20150114
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml
index 2d166662a4..43992aab15 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml
+++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml
@@ -63,7 +63,7 @@
com.toomuchcoding.jsonassert
jsonassert
- 0.4.9
+ 0.4.10
test
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/different-module-configuration/module/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/different-module-configuration/module/pom.xml
index 170806a7d3..9c19e123c6 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/different-module-configuration/module/pom.xml
+++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/different-module-configuration/module/pom.xml
@@ -62,7 +62,7 @@
com.toomuchcoding.jsonassert
jsonassert
- 0.4.9
+ 0.4.10
test
diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientJUnitMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientJUnitMethodBodyBuilder.groovy
index 10148e0d52..e765e147f4 100644
--- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientJUnitMethodBodyBuilder.groovy
+++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientJUnitMethodBodyBuilder.groovy
@@ -115,6 +115,9 @@ class JaxRsClientJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder {
protected appendHeaders(BlockBuilder bb) {
request.headers?.executeForEachHeader { Header header ->
+ if (headerOfAbsentType(header)) {
+ return
+ }
if (header.name == 'Content-Type' || header.name == 'Accept') return
bb.addLine(".header(\"${header.name}\", \"${header.serverValue}\")")
}
diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientSpockMethodRequestProcessingBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientSpockMethodRequestProcessingBodyBuilder.groovy
index a18fcbe7dd..6dafd53011 100644
--- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientSpockMethodRequestProcessingBodyBuilder.groovy
+++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientSpockMethodRequestProcessingBodyBuilder.groovy
@@ -120,6 +120,9 @@ class JaxRsClientSpockMethodRequestProcessingBodyBuilder extends SpockMethodRequ
protected appendHeaders(BlockBuilder bb) {
request.headers?.executeForEachHeader { Header header ->
+ if (headerOfAbsentType(header)) {
+ return
+ }
if (header.name == 'Content-Type' || header.name == 'Accept') return // Particular headers are set via 'request' / 'entity' methods
bb.addLine(".header('${header.name}', '${header.serverValue}')")
}
diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy
index 0114f033e2..b4af946ecd 100644
--- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy
+++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/RequestProcessingMethodBodyBuilder.groovy
@@ -95,6 +95,9 @@ abstract class RequestProcessingMethodBodyBuilder extends MethodBodyBuilder {
@Override
protected void processInput(BlockBuilder bb) {
request.headers?.executeForEachHeader { Header header ->
+ if (headerOfAbsentType(header)) {
+ return
+ }
bb.addLine(getHeaderString(header))
}
if (request.body) {
@@ -107,6 +110,11 @@ abstract class RequestProcessingMethodBodyBuilder extends MethodBodyBuilder {
}
}
+ protected boolean headerOfAbsentType(Header header) {
+ return header.serverValue instanceof MatchingStrategy &&
+ ((MatchingStrategy) header.serverValue).type == MatchingStrategy.Type.ABSENT
+ }
+
@Override
protected void when(BlockBuilder bb) {
bb.addLine(getInputString(request))
diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy
index b45cc12176..c011db3852 100644
--- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy
+++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy
@@ -315,6 +315,39 @@ DocumentContext parsedJson = JsonPath.parse(json);
"JaxRsClientJUnitMethodBodyBuilder" | { Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) }
}
+ @Issue("#424")
+ def "should not put an absent header to the request [#methodBuilderName]"() {
+ given:
+ Contract contractDsl = Contract.make {
+ request {
+ method 'GET'
+ url '/mytest'
+ headers {
+ header('myheader', absent())
+ }
+ }
+ response {
+ status 200
+ }
+ }
+ MethodBodyBuilder builder = methodBuilder(contractDsl)
+ BlockBuilder blockBuilder = new BlockBuilder(" ")
+ when:
+ builder.appendTo(blockBuilder)
+ then:
+ !blockBuilder.toString().contains("myheader")
+ and:
+ SyntaxChecker.tryToCompileWithoutCompileStatic(methodBuilderName, blockBuilder.toString())
+ and:
+ stubMappingIsValidWireMockStub(contractDsl)
+ where:
+ methodBuilderName | methodBuilder
+ "MockMvcSpockMethodBuilder" | { Contract dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl, properties) }
+ "MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) }
+ "JaxRsClientSpockMethodRequestProcessingBodyBuilder" | { Contract dsl -> new JaxRsClientSpockMethodRequestProcessingBodyBuilder(dsl, properties) }
+ "JaxRsClientJUnitMethodBodyBuilder" | { Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) }
+ }
+
def "should use fixed delay milliseconds in the generated test [#methodBuilderName]"() {
given:
Contract contractDsl = Contract.make {
diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy
index 1b9217256b..7c0c338845 100755
--- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy
+++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy
@@ -1880,7 +1880,69 @@ class WireMockGroovyDslSpec extends Specification implements WireMockStubVerifie
''', wireMockStub)
and:
stubMappingIsValidWireMockStub(wireMockStub)
+ }
+ @Issue('#427')
+ def "should not fail to generate a stub when arrays are there in the request"() {
+ given:
+ Contract groovyDsl = Contract.make {
+ request {
+ method "POST"
+ urlPath('/batch/persons')
+ body("""
+ [{
+ "fruitsILike": [
+ "apple"
+ ]
+ },
+ {
+ "fruitsILike": [
+ ]
+ },
+ {
+ "fruitsILike": [
+ "orange"
+ ]
+ }]
+ """)
+ }
+ response {
+ status 201
+ headers {
+ contentType(applicationJsonUtf8())
+ }
+ body("""{
+ "id": "foo"
+ }"
+ """)
+ }
+ }
+ when:
+ String wireMockStub = new WireMockStubStrategy("Test", new ContractMetadata(null, false, 0, null, groovyDsl), groovyDsl).toWireMockClientStub()
+ then:
+ AssertionUtil.assertThatJsonsAreEqual('''
+ {
+ "request" : {
+ "urlPath" : "/batch/persons",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "matchesJsonPath" : "$[*].['fruitsILike'][?(@ == 'orange')]"
+ }, {
+ "matchesJsonPath" : "$[*].['fruitsILike'][?(@ == 'apple')]"
+ } ]
+ },
+ "response" : {
+ "status" : 201,
+ "body" : "{\\"id\\":\\"foo\\"}",
+ "headers" : {
+ "Content-Type" : "application/json;charset=UTF-8"
+ },
+ "transformers" : [ "response-template" ]
+ }
+ }
+ ''', wireMockStub)
+ and:
+ stubMappingIsValidWireMockStub(wireMockStub)
}
@Issue('#385')