From 4ddae01bf938f5362166dd522a11446df7c61ce1 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Thu, 11 May 2017 11:37:50 +0200 Subject: [PATCH] Calling toString on getting messaging headers With contract like this ``` // output message of the contract outputMessage { // destination to which the output message will be sent sentTo 'verifications' // the body of the output message body( eligible: true ) headers { header("contentType", applicationJsonUtf8()) } } ``` the generated test produces ``` ContractVerifierMessage response = contractVerifierMessaging.receive("verifications"); assertThat(response.getHeader("contentType")).isEqualTo("application/json;charset=UTF-8"); ``` The headers in the response is a MimeType not a String so the equality check fails. fixes #297 --- .../builder/JUnitMessagingMethodBodyBuilder.groovy | 11 +++++++---- .../builder/SpockMessagingMethodBodyBuilder.groovy | 6 +++--- .../builder/MessagingMethodBodyBuilderSpec.groovy | 10 ++++++---- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMessagingMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMessagingMethodBodyBuilder.groovy index 65379af459..fdf1979381 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMessagingMethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnitMessagingMethodBodyBuilder.groovy @@ -88,17 +88,20 @@ class JUnitMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder { @Override protected void processHeaderElement(BlockBuilder blockBuilder, String property, String value) { - blockBuilder.addLine("assertThat(response.getHeader(\"$property\")).${createHeaderComparison(value)}") + blockBuilder.addLine("assertThat(response.getHeader(\"$property\")).isNotNull();") + blockBuilder.addLine("assertThat(response.getHeader(\"$property\").toString()).${createHeaderComparison(value)}") } @Override protected void processHeaderElement(BlockBuilder blockBuilder, String property, Pattern pattern) { - blockBuilder.addLine("assertThat(response.getHeader(\"$property\")).${createHeaderComparison(pattern)}") + blockBuilder.addLine("assertThat(response.getHeader(\"$property\")).isNotNull();") + blockBuilder.addLine("assertThat(response.getHeader(\"$property\").toString()).${createHeaderComparison(pattern)}") } @Override protected void processHeaderElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) { - blockBuilder.addLine("${exec.insertValue("response.getHeader(\"$property\")")};") + blockBuilder.addLine("assertThat(response.getHeader(\"$property\")).isNotNull();") + blockBuilder.addLine("${exec.insertValue("response.getHeader(\"$property\").toString()")};") } @Override @@ -110,7 +113,7 @@ class JUnitMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder { protected void validateResponseHeadersBlock(BlockBuilder bb) { bb.addLine("""ContractVerifierMessage response = contractVerifierMessaging.receive("${outputMessage.sentTo.serverValue}");""") bb.addLine("""assertThat(response).isNotNull();""") - outputMessage.headers?.executeForEachHeader { Header header ->\ + outputMessage.headers?.executeForEachHeader { Header header -> processHeaderElement(bb, header.name, header.serverValue) } } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMessagingMethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMessagingMethodBodyBuilder.groovy index 6c6a3041de..4d9359beed 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMessagingMethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockMessagingMethodBodyBuilder.groovy @@ -73,17 +73,17 @@ class SpockMessagingMethodBodyBuilder extends MessagingMethodBodyBuilder { @Override protected void processHeaderElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) { - blockBuilder.addLine("${exec.insertValue("response.getHeader(\'$property\')")}") + blockBuilder.addLine("${exec.insertValue("response.getHeader(\'$property\')?.toString()")}") } @Override protected void processHeaderElement(BlockBuilder blockBuilder, String property, String value) { - blockBuilder.addLine("response.getHeader('$property') ${convertHeaderComparison(value)}") + blockBuilder.addLine("response.getHeader('$property')?.toString() ${convertHeaderComparison(value)}") } @Override protected void processHeaderElement(BlockBuilder blockBuilder, String property, Pattern value) { - blockBuilder.addLine("response.getHeader('$property') ${convertHeaderComparison(value)}") + blockBuilder.addLine("response.getHeader('$property')?.toString() ${convertHeaderComparison(value)}") } @Override diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy index 266b68bd91..01fae3f1b3 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy @@ -59,7 +59,7 @@ def contractDsl = Contract.make { then: ContractVerifierMessage response = contractVerifierMessaging.receive('activemq:output') assert response != null - response.getHeader('BOOK-NAME') == 'foo' + response.getHeader('BOOK-NAME')?.toString() == 'foo' and: DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.payload)) assertThatJson(parsedJson).field("bookName").isEqualTo("foo") @@ -99,7 +99,8 @@ def contractDsl = Contract.make { // then: ContractVerifierMessage response = contractVerifierMessaging.receive("activemq:output"); assertThat(response).isNotNull(); - assertThat(response.getHeader("BOOK-NAME")).isEqualTo("foo"); + assertThat(response.getHeader("BOOK-NAME")).isNotNull(); + assertThat(response.getHeader("BOOK-NAME").toString()).isEqualTo("foo"); // and: DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); assertThatJson(parsedJson).field("bookName").isEqualTo("foo"); @@ -154,7 +155,7 @@ when: then: ContractVerifierMessage response = contractVerifierMessaging.receive('jms:output') assert response !- null - response.getHeader('BOOK-NAME') == 'foo' + response.getHeader('BOOK-NAME')?.toString() == 'foo' and: DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.payload)) assertThatJson(parsedJson).field("bookName").isEqualTo("foo") @@ -207,7 +208,8 @@ and: // then: ContractVerifierMessage response = contractVerifierMessaging.receive("jms:output"); assertThat(response).isNotNull(); - assertThat(response.getHeader("BOOK-NAME")).isEqualTo("foo"); + assertThat(response.getHeader("BOOK-NAME")).isNotNull(); + assertThat(response.getHeader("BOOK-NAME").toString()).isEqualTo("foo"); // and: DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); assertThatJson(parsedJson).field("bookName").isEqualTo("foo");