From 69a9584ba2fd0b121f952b99d55113359db3c9b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mariusz=20Smyku=C5=82a?= Date: Fri, 15 Apr 2016 19:48:55 +0200 Subject: [PATCH] Fixes #230 Cannot match url with query parameters when both contain regular expressions (#231) --- .../wiremock/WireMockToDslConverter.groovy | 2 + .../dsl/WireMockRequestStubStrategy.groovy | 8 +++- .../accurest/dsl/WireMockGroovyDslSpec.groovy | 41 +++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/accurest-converters/src/main/groovy/io/codearte/accurest/wiremock/WireMockToDslConverter.groovy b/accurest-converters/src/main/groovy/io/codearte/accurest/wiremock/WireMockToDslConverter.groovy index 4107d2dcdf..0a7bfc8bb8 100644 --- a/accurest-converters/src/main/groovy/io/codearte/accurest/wiremock/WireMockToDslConverter.groovy +++ b/accurest-converters/src/main/groovy/io/codearte/accurest/wiremock/WireMockToDslConverter.groovy @@ -24,12 +24,14 @@ class WireMockToDslConverter { def response = wireMockStub.response def bodyPatterns = request.bodyPatterns String urlPattern = request.urlPattern + String urlPathPattern = request.urlPathPattern return """\ ${priority ? "priority ${priority}" : ''} request { ${request.method ? "method \"\"\"$request.method\"\"\"" : ""} ${request.url ? "url \"\"\"$request.url\"\"\"" : ""} ${urlPattern ? "url \$(client(regex('${escapeJava(urlPattern)}')), server('${new Xeger(escapeJava(urlPattern)).generate()}'))" : ""} + ${urlPathPattern ? "urlPath \$(client(regex('${escapeJava(urlPattern)}')), server('${new Xeger(escapeJava(urlPattern)).generate()}'))" : ""} ${request.urlPath ? "url \"\"\"$request.urlPath\"\"\"" : ""} ${ request.headers ? """headers { diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/dsl/WireMockRequestStubStrategy.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/dsl/WireMockRequestStubStrategy.groovy index 1c3bbb6016..e3736d0a7a 100755 --- a/accurest-core/src/main/groovy/io/codearte/accurest/dsl/WireMockRequestStubStrategy.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/dsl/WireMockRequestStubStrategy.groovy @@ -108,13 +108,17 @@ class WireMockRequestStubStrategy extends BaseWireMockStubStrategy { private void appendUrl(RequestPattern requestPattern) { Object urlPath = request?.urlPath?.clientValue if (urlPath) { - requestPattern.setUrlPath(getStubSideValue(urlPath.toString()).toString()) + if(urlPath instanceof Pattern) { + requestPattern.setUrlPathPattern(getStubSideValue(urlPath.toString()).toString()) + } else { + requestPattern.setUrlPath(getStubSideValue(urlPath.toString()).toString()) + } } if(!request.url) { return } Object url = getUrlIfGstring(request?.url?.clientValue) - if(url instanceof Pattern) { + if (url instanceof Pattern) { requestPattern.setUrlPattern(url.pattern()) } else { requestPattern.setUrl(url.toString()) diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WireMockGroovyDslSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WireMockGroovyDslSpec.groovy index 6288301bdb..df097affe8 100755 --- a/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WireMockGroovyDslSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WireMockGroovyDslSpec.groovy @@ -713,6 +713,47 @@ class WireMockGroovyDslSpec extends Specification implements WireMockStubVerifie stubMappingIsValidWireMockStub(json) } + @Issue('#230') + def "should generate request with urlPathPattern and queryParameters for client side\ + when both contains regular expressions"() { + given: + GroovyDsl groovyDsl = GroovyDsl.make { + request { + method 'GET' + urlPath($(client(regex("/users/[0-9]+")), server("/users/1"))) { + queryParameters { + parameter 'search': $(client(notMatching(~/^\/[0-9]{2}$/)), server("10")) + } + } + } + response { + status 200 + } + } + when: + def json = toWireMockClientJsonStub(groovyDsl) + then: + AssertionUtil.assertThatJsonsAreEqual((''' + { + "request": { + "method": "GET", + "urlPathPattern": "/users/[0-9]+", + "queryParameters": { + "search": { + "doesNotMatch": "^/[0-9]{2}$" + } + } + }, + "response": { + "status": 200, + } + } + '''), json) + and: + stubMappingIsValidWireMockStub(json) + } + + def "should generate request with urlPath for client side"() { given: GroovyDsl groovyDsl = GroovyDsl.make {