From daffd14cc3b87016b64574fd93aadb014923a73a Mon Sep 17 00:00:00 2001 From: Marcin Zajaczkowski Date: Wed, 4 Feb 2015 13:36:41 +0100 Subject: [PATCH] [#5] Add basic response implementation, extract base strategy elements --- .gitignore | 2 + ...groovy => BaseWiremockStubStrategy.groovy} | 43 +-------------- .../io/coderate/accurest/dsl/GroovyDsl.groovy | 1 + .../dsl/WiremockRequestStubStrategy.groovy | 43 +++++++++++++++ .../dsl/WiremockResponseStubStrategy.groovy | 29 ++++++++++ .../dsl/{ => internal}/Request.groovy | 2 +- .../accurest/dsl/internal/Response.groovy | 29 ++++++++++ .../dsl/WiremockGroovyDslResponseSpec.groovy | 55 +++++++++++++++++++ .../accurest/dsl/WiremockGroovyDslSpec.groovy | 18 +++--- 9 files changed, 172 insertions(+), 50 deletions(-) rename accurest-core/src/main/groovy/io/coderate/accurest/dsl/{WiremockStubStrategy.groovy => BaseWiremockStubStrategy.groovy} (58%) create mode 100644 accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockRequestStubStrategy.groovy create mode 100644 accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockResponseStubStrategy.groovy rename accurest-core/src/main/groovy/io/coderate/accurest/dsl/{ => internal}/Request.groovy (96%) create mode 100644 accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Response.groovy create mode 100644 accurest-core/src/test/groovy/io/codearte/accurest/dsl/WiremockGroovyDslResponseSpec.groovy diff --git a/.gitignore b/.gitignore index c1785e61a0..5fd4a2d374 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ *.iml .idea/ +.gradle/ target/ +build/ hs_err_pid* diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockStubStrategy.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/BaseWiremockStubStrategy.groovy similarity index 58% rename from accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockStubStrategy.groovy rename to accurest-core/src/main/groovy/io/coderate/accurest/dsl/BaseWiremockStubStrategy.groovy index ee846b1a28..8c02509ad8 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockStubStrategy.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/BaseWiremockStubStrategy.groovy @@ -1,55 +1,19 @@ package io.coderate.accurest.dsl -import groovy.json.JsonOutput import groovy.transform.CompileStatic import io.coderate.accurest.dsl.internal.CustomizableProperty import io.coderate.accurest.dsl.internal.Headers import io.coderate.accurest.dsl.internal.WithValuePattern @CompileStatic -class WiremockStubStrategy { - - private final Request request - - WiremockStubStrategy(GroovyDsl groovyDsl) { - this.request = groovyDsl.request - } - - String toWiremockClientStub() { - return JsonOutput.toJson(buildClientRequest(request)) - } - - String toWiremockServerStub() { - return JsonOutput.toJson(buildServerRequest(request)) - } - - private Map buildClientRequest(Request request) { - return getRequestSection(request, - { request.urlPattern?.toClientSide() }, - { buildClientHeadersSection(request.headers) }) - } - - private Map buildServerRequest(Request request) { - return getRequestSection(request, - { request.urlPattern?.toServerSide() }, - { buildServerHeadersSection(request.headers) }) - } - - private Map> getRequestSection(Request request, Closure buildUrlPattern, Closure buildHeaders) { - return [request: [method : request.method, - url : request.url, - urlPattern: buildUrlPattern(), - urlPath : request.urlPath, - headers : buildHeaders()].findAll { it.value }] - } - - private Map buildClientHeadersSection(Headers headers) { +abstract class BaseWiremockStubStrategy { + protected Map buildClientHeadersSection(Headers headers) { return createHeadersSection(headers) { Map.Entry entry -> [(entry.key): buildClientHeaderFromValuePattern(entry.value)] } } - private Map buildServerHeadersSection(Headers headers) { + protected Map buildServerHeadersSection(Headers headers) { return createHeadersSection(headers) { Map.Entry entry -> [(entry.key): buildServerHeaderFromValuePattern(entry.value)] } @@ -59,7 +23,6 @@ class WiremockStubStrategy { return headers?.entries()?.collectEntries(closure) } - private Map buildClientHeaderFromValuePattern(WithValuePattern valuePattern) { return getValuePatternSection(valuePattern) .findAll { it.value } diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/GroovyDsl.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/GroovyDsl.groovy index 3eb01b9e8c..1ae6fe4644 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/GroovyDsl.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/GroovyDsl.groovy @@ -1,6 +1,7 @@ package io.coderate.accurest.dsl import groovy.transform.TypeChecked +import io.coderate.accurest.dsl.internal.Request import io.coderate.accurest.dsl.internal.Response @TypeChecked 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 new file mode 100644 index 0000000000..3693d7864e --- /dev/null +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockRequestStubStrategy.groovy @@ -0,0 +1,43 @@ +package io.coderate.accurest.dsl + +import groovy.json.JsonOutput +import groovy.transform.CompileStatic +import io.coderate.accurest.dsl.internal.Request + +@CompileStatic +class WiremockRequestStubStrategy extends BaseWiremockStubStrategy { + + private final Request request + + WiremockRequestStubStrategy(GroovyDsl groovyDsl) { + this.request = groovyDsl.request + } + + String toWiremockClientStub() { + return JsonOutput.toJson(buildClientRequest(request)) + } + + String toWiremockServerStub() { + return JsonOutput.toJson(buildServerRequest(request)) + } + + private Map buildClientRequest(Request request) { + return getRequestSection(request, + { request.urlPattern?.toClientSide() }, + { buildClientHeadersSection(request.headers) }) + } + + private Map buildServerRequest(Request request) { + return getRequestSection(request, + { request.urlPattern?.toServerSide() }, + { buildServerHeadersSection(request.headers) }) + } + + private Map> getRequestSection(Request request, Closure buildUrlPattern, Closure buildHeaders) { + return [request: [method : request.method, + url : request.url, + urlPattern: buildUrlPattern(), + urlPath : request.urlPath, + headers : buildHeaders()].findAll { it.value }] + } +} 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 new file mode 100644 index 0000000000..297b001345 --- /dev/null +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/WiremockResponseStubStrategy.groovy @@ -0,0 +1,29 @@ +package io.coderate.accurest.dsl + +import groovy.json.JsonOutput +import groovy.transform.CompileStatic +import io.coderate.accurest.dsl.internal.Response + +@CompileStatic +class WiremockResponseStubStrategy extends BaseWiremockStubStrategy { + + Response response + + WiremockResponseStubStrategy(GroovyDsl groovyDsl) { //TODO: Or Response? + this.response = groovyDsl.response + } + + String toWiremockClientStub() { + return JsonOutput.toJson(buildClientRequest(response)) + } + + private Map buildClientRequest(Response response) { + return getResponseSection(response, { "TODO" }, { buildClientHeadersSection(response.headers) }) + } + + private Map> getResponseSection(Response response, Closure buildUrlPattern, Closure buildHeaders) { + return [response: [status : response.status, + headers: buildHeaders()] + .findAll { it.value }] + } +} diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/Request.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Request.groovy similarity index 96% rename from accurest-core/src/main/groovy/io/coderate/accurest/dsl/Request.groovy rename to accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Request.groovy index 60fd51b785..d89bd1bd84 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/Request.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Request.groovy @@ -1,4 +1,4 @@ -package io.coderate.accurest.dsl +package io.coderate.accurest.dsl.internal import groovy.transform.TypeChecked import io.coderate.accurest.dsl.internal.Headers diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Response.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Response.groovy new file mode 100644 index 0000000000..6b0c0d1916 --- /dev/null +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Response.groovy @@ -0,0 +1,29 @@ +package io.coderate.accurest.dsl.internal + +import groovy.transform.TypeChecked + +import static io.coderate.accurest.dsl.internal.DelegateHelper.delegateToClosure + +@TypeChecked +class Response { + + private int status + private Headers headers + + void status(int status) { + this.status = status + } + + void headers(@DelegatesTo(Headers) Closure closure) { + this.headers = new Headers() + delegateToClosure(closure, headers) + } + + int getStatus() { + return status + } + + Headers getHeaders() { + return headers + } +} diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WiremockGroovyDslResponseSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WiremockGroovyDslResponseSpec.groovy new file mode 100644 index 0000000000..752cdec417 --- /dev/null +++ b/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WiremockGroovyDslResponseSpec.groovy @@ -0,0 +1,55 @@ +package io.codearte.accurest.dsl + +import groovy.json.JsonSlurper +import io.coderate.accurest.dsl.GroovyDsl +import io.coderate.accurest.dsl.WiremockResponseStubStrategy +import spock.lang.Specification + +class WiremockGroovyDslResponseSpec extends Specification { + + def 'should generate response without body for client side'() { + given: + GroovyDsl dsl = GroovyDsl.make { + response { + status 200 + } + } + when: + String wiremockStub = new WiremockResponseStubStrategy(dsl).toWiremockClientStub() + then: + new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' + { + "response": { + "status": 200 + } + } + ''') + } + + def 'should generate headers for response for client side'() { + given: + GroovyDsl dsl = GroovyDsl.make { + response { + headers { + header('Content-Type').equalTo('text/xml') + } + status 200 + } + } + when: + String wiremockStub = new WiremockResponseStubStrategy(dsl).toWiremockClientStub() + then: + new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' + { + "response": { + "headers": { + "Content-Type": { + "equalTo": "text/xml" + }, + }, + "status": 200 + } + } + ''') + } +} 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 f6feb8710e..493151c210 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WiremockGroovyDslSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WiremockGroovyDslSpec.groovy @@ -2,7 +2,7 @@ package io.codearte.accurest.dsl import groovy.json.JsonSlurper import io.coderate.accurest.dsl.GroovyDsl -import io.coderate.accurest.dsl.WiremockStubStrategy +import io.coderate.accurest.dsl.WiremockRequestStubStrategy import spock.lang.Ignore import spock.lang.Specification @@ -61,7 +61,7 @@ class WiremockGroovyDslSpec extends Specification { } } when: - String wiremockStub = new WiremockStubStrategy(groovyDsl).toWiremockClientStub() + String wiremockStub = new WiremockRequestStubStrategy(groovyDsl).toWiremockClientStub() then: new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' { @@ -81,7 +81,7 @@ class WiremockGroovyDslSpec extends Specification { } } when: - String wiremockStub = new WiremockStubStrategy(groovyDsl).toWiremockClientStub() + String wiremockStub = new WiremockRequestStubStrategy(groovyDsl).toWiremockClientStub() then: new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' { @@ -103,7 +103,7 @@ class WiremockGroovyDslSpec extends Specification { } } when: - String wiremockStub = new WiremockStubStrategy(groovyDsl).toWiremockClientStub() + String wiremockStub = new WiremockRequestStubStrategy(groovyDsl).toWiremockClientStub() then: new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' { @@ -125,7 +125,7 @@ class WiremockGroovyDslSpec extends Specification { } } when: - String wiremockStub = new WiremockStubStrategy(groovyDsl).toWiremockServerStub() + String wiremockStub = new WiremockRequestStubStrategy(groovyDsl).toWiremockServerStub() then: new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' { @@ -144,7 +144,7 @@ class WiremockGroovyDslSpec extends Specification { } } when: - String wiremockStub = new WiremockStubStrategy(groovyDsl).toWiremockClientStub() + String wiremockStub = new WiremockRequestStubStrategy(groovyDsl).toWiremockClientStub() then: new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' { @@ -163,7 +163,7 @@ class WiremockGroovyDslSpec extends Specification { } } when: - String wiremockStub = new WiremockStubStrategy(groovyDsl).toWiremockServerStub() + String wiremockStub = new WiremockRequestStubStrategy(groovyDsl).toWiremockServerStub() then: new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' { @@ -196,7 +196,7 @@ class WiremockGroovyDslSpec extends Specification { } } when: - String wiremockStub = new WiremockStubStrategy(groovyDsl).toWiremockClientStub() + String wiremockStub = new WiremockRequestStubStrategy(groovyDsl).toWiremockClientStub() then: new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' { @@ -242,7 +242,7 @@ class WiremockGroovyDslSpec extends Specification { } } when: - String wiremockStub = new WiremockStubStrategy(groovyDsl).toWiremockServerStub() + String wiremockStub = new WiremockRequestStubStrategy(groovyDsl).toWiremockServerStub() then: new JsonSlurper().parseText(wiremockStub) == new JsonSlurper().parseText(''' {