From 40bce485df1e9608fc6d98343cf222e101ab3b85 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 12 May 2015 11:15:06 +0200 Subject: [PATCH] [#49] Fixed two more issues with the conversion --- .../wiremock/WiremockToDslConverter.groovy | 39 +- .../WiremockToDslConverterSpec.groovy | 376 ++++++++++++------ build.gradle | 1 + 3 files changed, 279 insertions(+), 137 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 beb15bfd2b..76570ee2b2 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 @@ -18,12 +18,12 @@ class WiremockToDslConverter { def response = wiremockStub.response def bodyPatterns = request.bodyPatterns return """\ - request { - ${request.method ? "method \"\"\"$request.method\"\"\"" : ""} - ${request.url ? "url \"\"\"$request.url\"\"\"" : ""} - ${request.urlPattern ? "url \$(client(regex('${escapeJava(request.urlPattern)}')), server(''))" : ""} - ${request.urlPath ? "url \"\"\"$request.urlPath\"\"\"" : ""} - ${ + request { + ${request.method ? "method \"\"\"$request.method\"\"\"" : ""} + ${request.url ? "url \"\"\"$request.url\"\"\"" : ""} + ${request.urlPattern ? "url \$(client(regex('${escapeJava(request.urlPattern)}')), server(''))" : ""} + ${request.urlPath ? "url \"\"\"$request.urlPath\"\"\"" : ""} + ${ request.headers ? """headers { ${ request.headers.collect { @@ -36,20 +36,21 @@ class WiremockToDslConverter { } """ : "" } - ${bodyPatterns?.equalTo ? "body('''${bodyPatterns.equalTo}''')" : '' } - ${bodyPatterns?.matches ? "body \$(client(regex('${escapeJava(bodyPatterns.matches)}')), server(''))" : ""} - } - response { - ${response.status ? "status $response.status" : ""} - ${response.body ? "body( ${buildBody(response.body)})" : ""} - ${ + ${bodyPatterns?.equalTo?.every { it } ? "body('''${bodyPatterns.equalTo[0]}''')" : ''} + ${bodyPatterns?.equalToJson?.every { it } ? "body('''${bodyPatterns.equalToJson[0]}''')" : ''} + ${bodyPatterns?.matches?.every { it } ? "body \$(client(regex('${escapeJava(bodyPatterns.matches[0])}')), server(''))" : ""} + } + response { + ${response.status ? "status $response.status" : ""} + ${response.body ? "body( ${buildBody(response.body)})" : ""} + ${ response.headers ? """headers { - ${response.headers.collect { "header('$it.key': '${it.value}')\n" }.join('')} - } - """ : "" + ${response.headers.collect { "header('$it.key': '${it.value}')\n" }.join('')} + } + """ : "" } - } - """ + } + """ } private String buildHeader(String method, Object value) { @@ -158,7 +159,7 @@ class WiremockToDslConverter { static String wrapWithFactoryMethod(String dslFromWiremockStub) { return """\ ${GroovyDsl.name}.make { - $dslFromWiremockStub + $dslFromWiremockStub } """ } 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 index a88c05681e..98d74e6ca2 100755 --- a/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy +++ b/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy @@ -1,5 +1,6 @@ package io.codearte.accurest.wiremock +import com.github.tomakehurst.wiremock.stubbing.StubMapping import io.codearte.accurest.dsl.GroovyDsl import spock.lang.Specification @@ -9,27 +10,29 @@ class WiremockToDslConverterSpec extends Specification { given: String wiremockStub = '''\ { - "request": { - "method": "GET", - "url": "/path", - "headers" : { - "Accept": { - "matches": "text/.*" - }, - "X-Custom-Header": { - "contains": "2134" - } - } - }, - "response": { - "status": 200, - "body": "{ \\"id\\": { \\"value\\": \\"132\\" }, \\"surname\\": \\"Kowalsky\\", \\"name\\": \\"Jan\\", \\"created\\": \\"2014-02-02 12:23:43\\" }", - "headers": { - "Content-Type": "text/plain", - } - } + "request": { + "method": "GET", + "url": "/path", + "headers" : { + "Accept": { + "matches": "text/.*" + }, + "X-Custom-Header": { + "contains": "2134" + } + } + }, + "response": { + "status": 200, + "body": "{ \\"id\\": { \\"value\\": \\"132\\" }, \\"surname\\": \\"Kowalsky\\", \\"name\\": \\"Jan\\", \\"created\\": \\"2014-02-02 12:23:43\\" }", + "headers": { + "Content-Type": "text/plain" + } + } } ''' + and: + stubMappingIsValidWiremockStub(wiremockStub) and: GroovyDsl expectedGroovyDsl = GroovyDsl.make { request { @@ -66,8 +69,8 @@ class WiremockToDslConverterSpec extends Specification { then: new GroovyShell(this.class.classLoader).evaluate( """ io.codearte.accurest.dsl.GroovyDsl.make { - $groovyDsl - }""") == expectedGroovyDsl + $groovyDsl + }""") == expectedGroovyDsl } @@ -75,24 +78,26 @@ class WiremockToDslConverterSpec extends Specification { given: String wiremockStub = '''\ { - "request": { - "method": "DELETE", - "urlPattern": "/credit-card-verification-data/[0-9]+", - "headers": { - "Content-Type": { - "equalTo": "application/vnd.mymoid-adapter.v2+json; charset=UTF-8" - } - } - }, - "response": { - "status": 200, - "body": "{\\"status\\": \\"OK\\"}", - "headers": { - "Content-Type": "application/json" - } - } + "request": { + "method": "DELETE", + "urlPattern": "/credit-card-verification-data/[0-9]+", + "headers": { + "Content-Type": { + "equalTo": "application/vnd.mymoid-adapter.v2+json; charset=UTF-8" + } + } + }, + "response": { + "status": 200, + "body": "{\\"status\\": \\"OK\\"}", + "headers": { + "Content-Type": "application/json" + } + } } ''' + and: + stubMappingIsValidWiremockStub(wiremockStub) and: GroovyDsl expectedGroovyDsl = GroovyDsl.make { request { @@ -105,7 +110,7 @@ class WiremockToDslConverterSpec extends Specification { response { status 200 body("""{ - "status": "OK" + "status": "OK" }""") headers { header 'Content-Type': 'application/json' @@ -118,8 +123,8 @@ class WiremockToDslConverterSpec extends Specification { then: new GroovyShell(this.class.classLoader).evaluate( """ io.codearte.accurest.dsl.GroovyDsl.make { - $groovyDsl - }""") == expectedGroovyDsl + $groovyDsl + }""") == expectedGroovyDsl } def 'should convert Wiremock stub with response body containing integer'() { @@ -127,23 +132,25 @@ class WiremockToDslConverterSpec extends Specification { String wiremockStub = '''\ { "request": { - "method": "POST", - "url": "/charge/count", - "headers": { - "Content-Type": { - "equalTo": "application/vnd.creditcard-reporter.v1+json" - } - } + "method": "POST", + "url": "/charge/count", + "headers": { + "Content-Type": { + "equalTo": "application/vnd.creditcard-reporter.v1+json" + } + } }, "response": { - "status": 200, - "body": 200, - "headers": { - "Content-Type": "application/json" - } + "status": 200, + "body": 200, + "headers": { + "Content-Type": "application/json" + } } } ''' + and: + stubMappingIsValidWiremockStub(wiremockStub) and: GroovyDsl expectedGroovyDsl = GroovyDsl.make { request { @@ -167,8 +174,8 @@ class WiremockToDslConverterSpec extends Specification { then: new GroovyShell(this.class.classLoader).evaluate( """ io.codearte.accurest.dsl.GroovyDsl.make { - $groovyDsl - }""") == expectedGroovyDsl + $groovyDsl + }""") == expectedGroovyDsl } def 'should convert Wiremock stub with response body as a list'() { @@ -176,23 +183,25 @@ class WiremockToDslConverterSpec extends Specification { String wiremockStub = '''\ { "request": { - "method": "POST", - "url": "/charge/count", - "headers": { - "Content-Type": { - "equalTo": "application/vnd.creditcard-reporter.v1+json" - } - } + "method": "POST", + "url": "/charge/count", + "headers": { + "Content-Type": { + "equalTo": "application/vnd.creditcard-reporter.v1+json" + } + } }, "response": { - "status": 200, - "body": "[ {\\"a\\":1, \\"c\\":\\"3\\"}, \\"b\\", \\"a\\" ]", - "headers": { - "Content-Type": "application/json" - } + "status": 200, + "body": "[ {\\"a\\":1, \\"c\\":\\"3\\"}, \\"b\\", \\"a\\" ]", + "headers": { + "Content-Type": "application/json" + } } } ''' + and: + stubMappingIsValidWiremockStub(wiremockStub) and: GroovyDsl expectedGroovyDsl = GroovyDsl.make { request { @@ -219,8 +228,8 @@ class WiremockToDslConverterSpec extends Specification { then: new GroovyShell(this.class.classLoader).evaluate( """ io.codearte.accurest.dsl.GroovyDsl.make { - $groovyDsl - }""") == expectedGroovyDsl + $groovyDsl + }""") == expectedGroovyDsl } @@ -229,20 +238,22 @@ class WiremockToDslConverterSpec extends Specification { String wiremockStub = '''\ { "request": { - "method": "POST", - "url": "/charge/search?pageNumber=0&size=2147483647", - "headers": { - "Content-Type": { - "equalTo": "application/vnd.creditcard-reporter.v1+json" - } - } + "method": "POST", + "url": "/charge/search?pageNumber=0&size=2147483647", + "headers": { + "Content-Type": { + "equalTo": "application/vnd.creditcard-reporter.v1+json" + } + } }, "response": { - "status": 200, - "body":"[{\\"amount\\":1.01,\\"name\\":\\"Name\\",\\"info\\":{\\"title\\":\\"title1\\",\\"payload\\":null},\\"booleanvalue\\":true,\\"user\\":null},{\\"amount\\":2.01,\\"name\\":\\"Name2\\",\\"info\\":{\\"title\\":\\"title2\\",\\"payload\\":null},\\"booleanvalue\\":true,\\"user\\":null}]" - } + "status": 200, + "body":"[{\\"amount\\":1.01,\\"name\\":\\"Name\\",\\"info\\":{\\"title\\":\\"title1\\",\\"payload\\":null},\\"booleanvalue\\":true,\\"user\\":null},{\\"amount\\":2.01,\\"name\\":\\"Name2\\",\\"info\\":{\\"title\\":\\"title2\\",\\"payload\\":null},\\"booleanvalue\\":true,\\"user\\":null}]" + } } ''' + and: + stubMappingIsValidWiremockStub(wiremockStub) and: GroovyDsl expectedGroovyDsl = GroovyDsl.make { request { @@ -255,26 +266,26 @@ class WiremockToDslConverterSpec extends Specification { response { status 200 body("""[ - { - "amount": 1.01, - "name": "Name", - "info": { - "title": "title1", - "payload": null - }, - "booleanvalue": true, - "user": null - }, - { - "amount": 2.01, - "name": "Name2", - "info": { - "title": "title2", - "payload": null - }, - "booleanvalue": true, - "user": null - } + { + "amount": 1.01, + "name": "Name", + "info": { + "title": "title1", + "payload": null + }, + "booleanvalue": true, + "user": null + }, + { + "amount": 2.01, + "name": "Name2", + "info": { + "title": "title2", + "payload": null + }, + "booleanvalue": true, + "user": null + } ]""") } } @@ -283,8 +294,8 @@ class WiremockToDslConverterSpec extends Specification { then: new GroovyShell(this.class.classLoader).evaluate( """ io.codearte.accurest.dsl.GroovyDsl.make { - $groovyDsl - }""") == expectedGroovyDsl + $groovyDsl + }""") == expectedGroovyDsl } def 'should convert Wiremock stub with request body checking equality to Json'() { @@ -292,17 +303,19 @@ class WiremockToDslConverterSpec extends Specification { String wiremockStub = '''\ { "request": { - "method": "POST", - "url": "/test", - "bodyPatterns": { - "equalTo": "{\\"property1\\":\\"abc\\",\\"property2\\":\\"2017-01\\",\\"property3\\":\\"666\\",\\"property4\\":1428566412}" - } + "method": "POST", + "url": "/test", + "bodyPatterns": [{ + "equalTo": "{\\"property1\\":\\"abc\\",\\"property2\\":\\"2017-01\\",\\"property3\\":\\"666\\",\\"property4\\":1428566412}" + }] }, "response": { - "status": 200 - } + "status": 200 + } } ''' + and: + stubMappingIsValidWiremockStub(wiremockStub) and: GroovyDsl expectedGroovyDsl = GroovyDsl.make { request { @@ -319,8 +332,8 @@ class WiremockToDslConverterSpec extends Specification { then: GroovyDsl evaluatedGroovyDsl = new GroovyShell(this.class.classLoader).evaluate( """ io.codearte.accurest.dsl.GroovyDsl.make { - $groovyDsl - }""") + $groovyDsl + }""") and: evaluatedGroovyDsl == expectedGroovyDsl } @@ -330,17 +343,19 @@ class WiremockToDslConverterSpec extends Specification { String wiremockStub = '''\ { "request": { - "method": "POST", - "url": "/test", - "bodyPatterns": { - "matches": "[0-9]{5}" - } + "method": "POST", + "url": "/test", + "bodyPatterns": [{ + "matches": "[0-9]{5}" + }] }, "response": { - "status": 200 - } + "status": 200 + } } ''' + and: + stubMappingIsValidWiremockStub(wiremockStub) and: GroovyDsl expectedGroovyDsl = GroovyDsl.make { request { @@ -357,10 +372,135 @@ class WiremockToDslConverterSpec extends Specification { then: GroovyDsl evaluatedGroovyDsl = new GroovyShell(this.class.classLoader).evaluate( """ io.codearte.accurest.dsl.GroovyDsl.make { - $groovyDsl - }""") + $groovyDsl + }""") and: evaluatedGroovyDsl == expectedGroovyDsl } + def 'should convert Wiremock stub with request body with equalToJson'() { + given: + String wiremockStub = '''\ +{ + "request" : { + "url" : "/test", + "method" : "POST", + "bodyPatterns" : [ { + "equalToJson" : "{\\"pan\\":\\"4855141150107894\\",\\"expirationDate\\":\\"2017-01\\",\\"dcvx\\":\\"178\\"}", + "jsonCompareMode" : "LENIENT" + } ] + }, + "response" : { + "status" : 200 + } +} +''' + and: + stubMappingIsValidWiremockStub(wiremockStub) + and: + GroovyDsl expectedGroovyDsl = GroovyDsl.make { + request { + method 'POST' + url '/test' + body '''{"pan":"4855141150107894","expirationDate":"2017-01","dcvx":"178"}''' + } + response { + status 200 + } + } + when: + String groovyDsl = WiremockToDslConverter.fromWiremockStub(wiremockStub) + then: + GroovyDsl evaluatedGroovyDsl = new GroovyShell(this.class.classLoader).evaluate( + """ io.codearte.accurest.dsl.GroovyDsl.make { + $groovyDsl + }""") + and: + evaluatedGroovyDsl == expectedGroovyDsl + } + + def 'should convert Wiremock stub with request body with equalTo'() { + given: + String wiremockStub = '''\ + { + "request" : { + "url" : "/test", + "method" : "POST", + "bodyPatterns" : [ { + "equalTo" : "{\\"pan\\":\\"4855141150107894\\",\\"expirationDate\\":\\"2017-01\\",\\"dcvx\\":\\"178\\"}" + } ] + }, + "response" : { + "status" : 200 + } + } + ''' + and: + stubMappingIsValidWiremockStub(wiremockStub) + and: + GroovyDsl expectedGroovyDsl = GroovyDsl.make { + request { + method 'POST' + url '/test' + body '''{"pan":"4855141150107894","expirationDate":"2017-01","dcvx":"178"}''' + } + response { + status 200 + } + } + when: + String groovyDsl = WiremockToDslConverter.fromWiremockStub(wiremockStub) + then: + GroovyDsl evaluatedGroovyDsl = new GroovyShell(this.class.classLoader).evaluate( + """ io.codearte.accurest.dsl.GroovyDsl.make { + $groovyDsl + }""") + and: + evaluatedGroovyDsl == expectedGroovyDsl + } + + def 'should convert Wiremock stub with request body with matches'() { + given: + String wiremockStub = '''\ + { + "request" : { + "url" : "/test", + "method" : "POST", + "bodyPatterns" : [ { + "matches" : "[0-9]{2}" + } ] + }, + "response" : { + "status" : 200 + } + } + ''' + and: + stubMappingIsValidWiremockStub(wiremockStub) + and: + GroovyDsl expectedGroovyDsl = GroovyDsl.make { + request { + method 'POST' + url '/test' + body $(client(~/[0-9]{2}/), server('')) + } + response { + status 200 + } + } + when: + String groovyDsl = WiremockToDslConverter.fromWiremockStub(wiremockStub) + then: + GroovyDsl evaluatedGroovyDsl = new GroovyShell(this.class.classLoader).evaluate( + """ io.codearte.accurest.dsl.GroovyDsl.make { + $groovyDsl + }""") + and: + evaluatedGroovyDsl == expectedGroovyDsl + } + + void stubMappingIsValidWiremockStub(String mappingDefinition) { + StubMapping.buildFrom(mappingDefinition) + } + } diff --git a/build.gradle b/build.gradle index c2d42cfdf1..28d6b6d0a2 100644 --- a/build.gradle +++ b/build.gradle @@ -98,6 +98,7 @@ project(':accurest-converters') { compile project(':accurest-core') compile 'org.apache.commons:commons-lang3:3.3.2' compile 'commons-io:commons-io:[2.4,)' + testCompile 'com.github.tomakehurst:wiremock:1.53' } }