[#10] Added initial version of Wiremock -> GroovyDsl
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = [:]
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
include "accurest-core", "accurest-gradle-plugin"
|
||||
rootProject.name = "accurest"
|
||||
include "accurest-core", "accurest-gradle-plugin", 'accurest-converters'
|
||||
rootProject.name = "accurest"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user