From daa3ccb7ea0a55f6af16c17aeac702f8d73a7222 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 5 Aug 2015 18:01:03 +0200 Subject: [PATCH] [#113] Fixed missing regex in headers --- .../MockMvcSpockMethodBodyBuilder.groovy | 12 ++++++- .../MockMvcSpockMethodBuilderSpec.groovy | 33 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBodyBuilder.groovy index 40d6a24416..d686bcc54e 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBodyBuilder.groovy @@ -9,6 +9,8 @@ import io.codearte.accurest.dsl.internal.QueryParameter import io.codearte.accurest.dsl.internal.Request import io.codearte.accurest.dsl.internal.UrlPath +import java.util.regex.Pattern + @PackageScope @TypeChecked class MockMvcSpockMethodBodyBuilder extends SpockMethodBodyBuilder { @@ -46,10 +48,18 @@ class MockMvcSpockMethodBodyBuilder extends SpockMethodBodyBuilder { protected void validateResponseHeadersBlock(BlockBuilder bb) { response.headers?.collect { Header header -> - bb.addLine("response.header('$header.name') == '$header.serverValue'") + bb.addLine("response.header('$header.name') ${convertHeaderComparison(header.serverValue)}") } } + private String convertHeaderComparison(Object headerValue) { + return " == '$headerValue'" + } + + private String convertHeaderComparison(Pattern headerValue) { + return "==~ java.util.regex.Pattern.compile('$headerValue')" + } + @Override protected String getResponseAsString() { return 'response.body.asString()' diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy index 57d840710c..d29c1f87b5 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy @@ -328,4 +328,37 @@ class MockMvcSpockMethodBuilderSpec extends Specification { spockTest.contains('def responseBody = (response.body.asString())') spockTest.contains('responseBody == "test"') } + + @Issue('113') + def "should generate regex test for String in response header"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method 'POST' + url $(client(regex('/partners/[0-9]+/users')), server('/partners/1000/users')) + headers { header 'Content-Type': 'application/json' } + body( + first_name: 'John', + last_name: 'Smith', + personal_id: '12345678901', + phone_number: '500500500', + invitation_token: '00fec7141bb94793bfe7ae1d0f39bda0', + password: 'john' + ) + } + response { + status 201 + headers { + header 'Location': $(client('http://localhost/partners/1000/users/1001'), server(regex('http://localhost/partners/[0-9]+/users/[0-9]+'))) + } + } + } + MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def spockTest = blockBuilder.toString() + then: + spockTest.contains('''response.header('Location') ==~ java.util.regex.Pattern.compile('http://localhost/partners/[0-9]+/users/[0-9]+')''') + } }