[#5] Add basic response implementation, extract base strategy elements
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -2,6 +2,8 @@
|
||||
*.iml
|
||||
|
||||
.idea/
|
||||
.gradle/
|
||||
target/
|
||||
build/
|
||||
|
||||
hs_err_pid*
|
||||
|
||||
@@ -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 }
|
||||
@@ -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
|
||||
|
||||
@@ -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 }]
|
||||
}
|
||||
}
|
||||
@@ -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 }]
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
''')
|
||||
}
|
||||
}
|
||||
@@ -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('''
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user