[#10] Added initial version of Wiremock -> GroovyDsl

This commit is contained in:
Marcin Grzejszczak
2015-02-12 17:21:45 +01:00
parent e5d218a2d2
commit 4e02962525
12 changed files with 142 additions and 2 deletions

View File

@@ -0,0 +1,37 @@
package io.codearte.accurest.wiremock
import groovy.json.JsonSlurper
import io.coderate.accurest.dsl.GroovyDsl
class WiremockToDslConverter {
static GroovyDsl fromWiremockStub(String wiremockStringStub) {
Object wiremockStub = new JsonSlurper().parseText(wiremockStringStub)
def wiremockRequest = wiremockStub.request
def wiremockResponse = wiremockStub.response
return GroovyDsl.make {
request {
wiremockRequest.method ? method(wiremockRequest.method as String) : null
wiremockRequest.url ? url(wiremockRequest.url as String) : null
wiremockRequest.urlPattern ? urlPattern(wiremockRequest.urlPattern as String) : null
wiremockRequest.urlPath ? urlPath(wiremockRequest.urlPath as String) : null
wiremockRequest.headers ? headers {
wiremockRequest.headers.each {
def assertion = it.value
String headerName = it.key as String
header(headerName)."$assertion.key"(assertion.value)
}
} : null
}
response {
status wiremockResponse.status ? wiremockResponse.status as Integer : null
wiremockResponse.body ? body (
wiremockResponse.body as Map
) : null
wiremockResponse.headers ? headers {
wiremockResponse.headers.each {
header([(it.key) : it.value])
}
} : null
}
}
}
}

View File

@@ -0,0 +1,54 @@
package io.codearte.accurest.wiremock
import io.coderate.accurest.dsl.GroovyDsl
import spock.lang.Specification
class WiremockToDslConverterSpec extends Specification {
def 'should produce a Groovy DSL from Wiremock stub'() {
given:
String wiremockStub = '''
{
"request": {
"method": "GET",
"urlPattern": "/[0-9]{2}"
},
"response": {
"status": 200,
"body": {
"id": "123",
"surname": "Kowalsky",
"name": "Jan",
"created" : "2014-02-02 12:23:43"
},
"headers": {
"Content-Type": "text/plain"
}
}
}
'''
and:
GroovyDsl expectedGroovyDsl = GroovyDsl.make {
request {
method 'GET'
urlPattern '/[0-9]{2}'
}
response {
status 200
body (
id : '123',
surname : 'Kowalsky',
name: 'Jan',
created : '2014-02-02 12:23:43'
)
headers {
header 'Content-Type': 'text/plain'
}
}
}
when:
GroovyDsl groovyDsl = WiremockToDslConverter.fromWiremockStub(wiremockStub)
then:
groovyDsl == expectedGroovyDsl
}
}

View File

@@ -1,10 +1,14 @@
package io.coderate.accurest.dsl
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import groovy.transform.TypeChecked
import io.coderate.accurest.dsl.internal.Request
import io.coderate.accurest.dsl.internal.Response
@TypeChecked
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class GroovyDsl {
Request request

View File

@@ -1,7 +1,11 @@
package io.coderate.accurest.dsl.internal
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
@CompileStatic
@ToString(includePackage = false, includeFields = true)
@EqualsAndHashCode(includeFields = true)
class Body {
private final Map<String, DslProperty> body

View File

@@ -1,7 +1,11 @@
package io.coderate.accurest.dsl.internal
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
@CompileStatic
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class DslProperty<T> {
final T clientValue

View File

@@ -1,5 +1,10 @@
package io.coderate.accurest.dsl.internal
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class Headers {
private Map<String, WithValuePattern> assertionHeaders = [:]

View File

@@ -1,10 +1,14 @@
package io.coderate.accurest.dsl.internal
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import groovy.transform.TypeChecked
import static io.coderate.accurest.dsl.internal.DelegateHelper.delegateToClosure
@TypeChecked
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class Request extends Common {
DslProperty method
@@ -64,6 +68,8 @@ class Request extends Common {
}
@CompileStatic
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class ServerRequest extends Request {
ServerRequest(Request request) {
super(request)
@@ -71,6 +77,8 @@ class ServerRequest extends Request {
}
@CompileStatic
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class ClientRequest extends Request {
ClientRequest(Request request) {
super(request)

View File

@@ -1,11 +1,15 @@
package io.coderate.accurest.dsl.internal
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import groovy.transform.TypeChecked
import static io.coderate.accurest.dsl.internal.DelegateHelper.delegateToClosure
@TypeChecked
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false, includeFields = true)
class Response extends Common {
private DslProperty status
@@ -52,6 +56,8 @@ class Response extends Common {
}
@CompileStatic
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class ServerResponse extends Response {
ServerResponse(Response request) {
super(request)
@@ -59,6 +65,8 @@ class ServerResponse extends Response {
}
@CompileStatic
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class ClientResponse extends Response {
ClientResponse(Response request) {
super(request)

View File

@@ -1,7 +1,11 @@
package io.coderate.accurest.dsl.internal
import groovy.transform.CompileStatic
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
@CompileStatic
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class ServerDslProperty extends DslProperty {
ServerDslProperty(Object clientValue, Object serverValue) {

View File

@@ -1,7 +1,12 @@
package io.coderate.accurest.dsl.internal
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import groovy.transform.TypeChecked
@TypeChecked
@EqualsAndHashCode(includeFields = true)
@ToString(includePackage = false)
class WithValuePattern {
DslProperty<String> equalTo

View File

@@ -44,6 +44,12 @@ subprojects {
project(':accurest-core') {
}
project(':accurest-converters') {
dependencies {
compile project(':accurest-core')
}
}
project(':accurest-gradle-plugin') {
dependencies {
compile project(':accurest-core')

View File

@@ -1,2 +1,3 @@
include "accurest-core", "accurest-gradle-plugin"
rootProject.name = "accurest"
include "accurest-core", "accurest-gradle-plugin", 'accurest-converters'
rootProject.name = "accurest"