diff --git a/accurest-converters/src/main/groovy/io/codearte/accurest/wiremock/WiremockToDslConverter.groovy b/accurest-converters/src/main/groovy/io/codearte/accurest/wiremock/WiremockToDslConverter.groovy new file mode 100644 index 0000000000..cdd09eee72 --- /dev/null +++ b/accurest-converters/src/main/groovy/io/codearte/accurest/wiremock/WiremockToDslConverter.groovy @@ -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 + } + } + } +} diff --git a/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy b/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy new file mode 100644 index 0000000000..6a4534a20b --- /dev/null +++ b/accurest-converters/src/test/groovy/io/codearte/accurest/wiremock/WiremockToDslConverterSpec.groovy @@ -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 + } +} 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 1ae6fe4644..47a0e8e72f 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,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 diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Body.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Body.groovy index 90ae62d726..e3b75c9eb4 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Body.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Body.groovy @@ -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 body diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/DslProperty.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/DslProperty.groovy index 11ede5a82e..f1de600e8a 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/DslProperty.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/DslProperty.groovy @@ -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 { final T clientValue diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Headers.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Headers.groovy index 9ee8dfb242..5487b10b53 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Headers.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Headers.groovy @@ -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 assertionHeaders = [:] diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Request.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Request.groovy index d28bc159c0..3d0f7fec66 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Request.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/Request.groovy @@ -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) 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 index fe15280bde..190ad7b3d9 100644 --- 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 @@ -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) diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/ServerDslProperty.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/ServerDslProperty.groovy index a23cc80c23..71827545dd 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/ServerDslProperty.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/ServerDslProperty.groovy @@ -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) { diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/WithValuePattern.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/WithValuePattern.groovy index 32dfddf741..8a3b1d1f20 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/WithValuePattern.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/dsl/internal/WithValuePattern.groovy @@ -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 equalTo diff --git a/build.gradle b/build.gradle index 33ecf9a2db..a74ec2a59f 100644 --- a/build.gradle +++ b/build.gradle @@ -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') diff --git a/settings.gradle b/settings.gradle index dff32d91dd..148580177b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ -include "accurest-core", "accurest-gradle-plugin" -rootProject.name = "accurest" \ No newline at end of file +include "accurest-core", "accurest-gradle-plugin", 'accurest-converters' +rootProject.name = "accurest" +