From 3867ee867615c8e55bfc21f860b3bef2d480b1c0 Mon Sep 17 00:00:00 2001 From: Catalin Buleandra Date: Sun, 22 Mar 2015 16:14:30 +0100 Subject: [PATCH] Wiremock stubs should be generated with bodyPatterns as array, and response body as String literal --- .../DslToWiremockClientConverterSpec.groovy | 6 ++-- .../WiremockToDslConverterSpec.groovy | 15 ++------- .../dsl/BaseWiremockStubStrategy.groovy | 28 +++++++++++++++- .../dsl/WiremockRequestStubStrategy.groovy | 32 ++----------------- .../dsl/WiremockResponseStubStrategy.groovy | 15 ++++++--- .../accurest/dsl/WiremockGroovyDslSpec.groovy | 26 +++++---------- .../plugin/BasicFunctionalSpec.groovy | 6 ++-- 7 files changed, 55 insertions(+), 73 deletions(-) mode change 100644 => 100755 accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy mode change 100644 => 100755 accurest-core/src/main/groovy/io/coderate/accurest/dsl/BaseWiremockStubStrategy.groovy mode change 100644 => 100755 accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockResponseStubStrategy.groovy diff --git a/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/DslToWiremockClientConverterSpec.groovy b/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/DslToWiremockClientConverterSpec.groovy index f753cc6bf4..e4ccc28328 100755 --- a/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/DslToWiremockClientConverterSpec.groovy +++ b/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/DslToWiremockClientConverterSpec.groovy @@ -84,9 +84,9 @@ class DslToWiremockClientConverterSpec extends Specification { "request":{ "method":"PUT", "url":"/api/12", - "bodyPatterns": { - "equalTo": "[{\\"created_at\\":\\"Sat Jul 26 09:38:57 +0000 2014\\",\\"id\\":492967299297845248,\\"id_str\\":\\"492967299297845248\\",\\"place\\":{\\"attributes\\":{},\\"bounding_box\\":{\\"coordinates\\":[[[-77.119759,38.791645],[-76.909393,38.791645],[-76.909393,38.995548],[-77.119759,38.995548]]],\\"type\\":\\"Polygon\\"},\\"country\\":\\"United States\\",\\"country_code\\":\\"US\\",\\"full_name\\":\\"Washington, DC\\",\\"id\\":\\"01fbe706f872cb32\\",\\"name\\":\\"Washington\\",\\"place_type\\":\\"city\\",\\"url\\":\\"http://api.twitter.com/1/geo/id/01fbe706f872cb32.json\\"},\\"text\\":\\"Gonna see you at Warsaw\\"}]" - }, + "bodyPatterns": [ + { "equalTo": "[{\\"created_at\\":\\"Sat Jul 26 09:38:57 +0000 2014\\",\\"id\\":492967299297845248,\\"id_str\\":\\"492967299297845248\\",\\"place\\":{\\"attributes\\":{},\\"bounding_box\\":{\\"coordinates\\":[[[-77.119759,38.791645],[-76.909393,38.791645],[-76.909393,38.995548],[-77.119759,38.995548]]],\\"type\\":\\"Polygon\\"},\\"country\\":\\"United States\\",\\"country_code\\":\\"US\\",\\"full_name\\":\\"Washington, DC\\",\\"id\\":\\"01fbe706f872cb32\\",\\"name\\":\\"Washington\\",\\"place_type\\":\\"city\\",\\"url\\":\\"http://api.twitter.com/1/geo/id/01fbe706f872cb32.json\\"},\\"text\\":\\"Gonna see you at Warsaw\\"}]" } + ], "headers": { "Content-Type": { "equalTo": "application/vnd.com.ofg.twitter-places-analyzer.v1+json" diff --git a/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy b/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy old mode 100644 new mode 100755 index 35a5c88caf..af1ba33e1b --- a/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy +++ b/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy @@ -23,14 +23,7 @@ class WiremockToDslConverterSpec extends Specification { }, "response": { "status": 200, - "body": { - "id": { - "value": "132" - }, - "surname": "Kowalsky", - "name": "Jan", - "created" : "2014-02-02 12:23:43" - }, + "body": "{ \\"id\\": { \\"value\\": \\"132\\" }, \\"surname\\": \\"Kowalsky\\", \\"name\\": \\"Jan\\", \\"created\\": \\"2014-02-02 12:23:43\\" }", "headers": { "Content-Type": "text/plain", } @@ -193,11 +186,7 @@ class WiremockToDslConverterSpec extends Specification { }, "response": { "status": 200, - "body": [ - {"a":1, "c":"3"}, - "b", - "a" - ], + "body": "[ {\\"a\\":1, \\"c\\":\\"3\\"}, \\"b\\", \\"a\\" ]", "headers": { "Content-Type": "application/json" } diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/BaseWiremockStubStrategy.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/BaseWiremockStubStrategy.groovy old mode 100644 new mode 100755 index 5e89c3d3bc..c297a8757b --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/BaseWiremockStubStrategy.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/BaseWiremockStubStrategy.groovy @@ -1,11 +1,15 @@ package io.coderate.accurest.dsl - +import groovy.json.JsonOutput +import groovy.json.JsonSlurper import groovy.transform.TypeChecked +import groovy.xml.XmlUtil import io.coderate.accurest.dsl.internal.Header import io.coderate.accurest.dsl.internal.Headers import java.util.regex.Pattern +import static groovy.json.StringEscapeUtils.escapeJava + @TypeChecked abstract class BaseWiremockStubStrategy { protected Map buildClientRequestHeadersSection(Headers headers) { @@ -38,4 +42,26 @@ abstract class BaseWiremockStubStrategy { return [(entryKey): [matches : entry.pattern()]] } + protected String parseBody(Object body) { + String bodyAsString = body as String + try { + def json = new JsonSlurper().parseText(bodyAsString) + return escapeJava(JsonOutput.toJson(bodyAsString)) + } catch (Exception jsonException) { + try { + def xml = new XmlSlurper().parseText(bodyAsString) + return escapeJava(XmlUtil.serialize(bodyAsString)) + } catch (Exception xmlException) { + return escapeJava(bodyAsString) + } + } + } + + protected String parseBody(List body) { + return JsonOutput.toJson(body) + } + + protected String parseBody(Map body) { + return JsonOutput.toJson(body) + } } diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockRequestStubStrategy.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockRequestStubStrategy.groovy index 885c53483b..02b78deb3e 100755 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockRequestStubStrategy.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockRequestStubStrategy.groovy @@ -1,16 +1,12 @@ package io.coderate.accurest.dsl -import groovy.json.JsonOutput -import groovy.json.JsonSlurper + import groovy.transform.PackageScope import groovy.transform.TypeChecked -import groovy.xml.XmlUtil import io.coderate.accurest.dsl.internal.ClientRequest import io.coderate.accurest.dsl.internal.Request import java.util.regex.Pattern -import static groovy.json.StringEscapeUtils.escapeJava - @TypeChecked @PackageScope class WiremockRequestStubStrategy extends BaseWiremockStubStrategy { @@ -39,30 +35,6 @@ class WiremockRequestStubStrategy extends BaseWiremockStubStrategy { private Map appendBody(ClientRequest clientRequest) { Object body = clientRequest?.body?.clientValue - return body != null ? [bodyPatterns: [equalTo: parseBody(body)]] : [:] + return body != null ? [bodyPatterns: [[equalTo: parseBody(body)]]] : [:] } - - private String parseBody(Object responseBodyObject) { - String responseBody = responseBodyObject as String - try { - def json = new JsonSlurper().parseText(responseBody) - return escapeJava(JsonOutput.toJson(responseBody)) - } catch (Exception jsonException) { - try { - def xml = new XmlSlurper().parseText(responseBody) - return escapeJava(XmlUtil.serialize(responseBody)) - } catch (Exception xmlException) { - return escapeJava(responseBody) - } - } - } - - private String parseBody(List responseBody) { - return JsonOutput.toJson(responseBody) - } - - private String parseBody(Map responseBody) { - return JsonOutput.toJson(responseBody) - } - } diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockResponseStubStrategy.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockResponseStubStrategy.groovy old mode 100644 new mode 100755 index a1d9f2eb68..4c905bf4dc --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockResponseStubStrategy.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockResponseStubStrategy.groovy @@ -1,10 +1,10 @@ package io.coderate.accurest.dsl -import groovy.transform.CompileStatic import groovy.transform.PackageScope +import groovy.transform.TypeChecked import io.coderate.accurest.dsl.internal.ClientResponse import io.coderate.accurest.dsl.internal.Response -@CompileStatic +@TypeChecked @PackageScope class WiremockResponseStubStrategy extends BaseWiremockStubStrategy { @@ -20,8 +20,13 @@ class WiremockResponseStubStrategy extends BaseWiremockStubStrategy { } private Map buildResponseContent(ClientResponse response) { - return [status : response?.status?.clientValue, - body : response?.body?.clientValue, - headers: buildClientResponseHeadersSection(response.headers)].findAll { it.value } + return ([status : response?.status?.clientValue, + headers: buildClientResponseHeadersSection(response.headers) + ] << appendBody(response)).findAll { it.value } } + + private Map appendBody(ClientResponse response) { + Object body = response?.body?.clientValue + return body != null ? [body: parseBody(body)] : [:] + } } 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 f849bc717d..a5db188554 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 @@ -44,12 +44,7 @@ class WiremockGroovyDslSpec extends Specification { }, "response": { "status": 200, - "body": { - "id": "123", - "surname": "Kowalsky", - "name": "Jan", - "created" : "2014-02-02 12:23:43" - }, + "body": "{\\"id\\":\\"123\\",\\"surname\\":\\"Kowalsky\\",\\"name\\":\\"Jan\\",\\"created\\":\\"2014-02-02 12:23:43\\"}", "headers": { "Content-Type": "text/plain" } @@ -92,12 +87,7 @@ class WiremockGroovyDslSpec extends Specification { }, "response": { "status": 200, - "body": { - "id": "123", - "surname": "Kowalsky", - "name": "Jan", - "created" : "2014-02-02 12:23:43" - }, + "body": "{\\"created\\":\\"2014-02-02 12:23:43\\",\\"id\\":\\"123\\",\\"name\\":\\"Jan\\",\\"surname\\":\\"Kowalsky\\"}", "headers": { "Content-Type": "text/plain" } @@ -140,15 +130,15 @@ class WiremockGroovyDslSpec extends Specification { "request": { "method": "GET", "urlPattern": "/[0-9]{2}", - "bodyPatterns": { - "equalTo":"{\\"name\\":\\"Jan\\"}" - } + "bodyPatterns": [ + { + "equalTo":"{\\"name\\":\\"Jan\\"}" + } + ] }, "response": { "status": 200, - "body": { - "name": "Jan" - }, + "body": "{\\"name\\":\\"Jan\\"}", "headers": { "Content-Type": "text/plain" } diff --git a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/BasicFunctionalSpec.groovy b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/BasicFunctionalSpec.groovy index d1b3d976bd..e2ee36959d 100755 --- a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/BasicFunctionalSpec.groovy +++ b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/BasicFunctionalSpec.groovy @@ -51,9 +51,9 @@ class BasicFunctionalSpec extends IntegrationSpec { } }, "url": "/api/12", - "bodyPatterns": { - "equalTo": "[{\\"text\\":\\"Gonna see you at Warsaw\\"}]" - } + "bodyPatterns": [ + { "equalTo": "[{\\"text\\":\\"Gonna see you at Warsaw\\"}]" } + ] }, "response": { "status": 200