[#5] Add basic response implementation, extract base strategy elements

This commit is contained in:
Marcin Zajaczkowski
2015-02-04 13:36:41 +01:00
parent e5ee0e437d
commit daffd14cc3
9 changed files with 172 additions and 50 deletions

2
.gitignore vendored
View File

@@ -2,6 +2,8 @@
*.iml
.idea/
.gradle/
target/
build/
hs_err_pid*

View File

@@ -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<String, Map<String, Object>> getRequestSection(Request request, Closure<String> buildUrlPattern, Closure<Map> 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<String, WithValuePattern> entry -> [(entry.key): buildClientHeaderFromValuePattern(entry.value)]
}
}
private Map buildServerHeadersSection(Headers headers) {
protected Map buildServerHeadersSection(Headers headers) {
return createHeadersSection(headers) {
Map.Entry<String, WithValuePattern> 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 }

View File

@@ -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

View File

@@ -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<String, Map<String, Object>> getRequestSection(Request request, Closure<String> buildUrlPattern, Closure<Map> buildHeaders) {
return [request: [method : request.method,
url : request.url,
urlPattern: buildUrlPattern(),
urlPath : request.urlPath,
headers : buildHeaders()].findAll { it.value }]
}
}

View File

@@ -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<String, Map<String, Object>> getResponseSection(Response response, Closure<String> buildUrlPattern, Closure<Map> buildHeaders) {
return [response: [status : response.status,
headers: buildHeaders()]
.findAll { it.value }]
}
}

View File

@@ -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

View File

@@ -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
}
}

View File

@@ -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
}
}
''')
}
}

View File

@@ -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('''
{