diff --git a/README.md b/README.md index 155c017944..99fb9e48b8 100644 --- a/README.md +++ b/README.md @@ -3,91 +3,9 @@ Accurate REST Maven Plugin ==== -Converting [Accurest](https://github.com/Codearte/accurest/wiki/1.-Introduction) GroovyDSL into WireMock stub mappings: +Documentation +--- - mvn io.codearte.accurest:accurest-maven-plugin:convert - -or shortly * - - mvn accurest:convert - -For more information please go to the [Accurest Wiki](https://github.com/Codearte/accurest/wiki/2.2-Maven-Project) or [Plugin Documentation Site](http://codearte.github.io/accurest-maven-plugin/plugin-info.html). +* [Accurest Wiki](https://github.com/Codearte/accurest/) +* [Accurest Maven Plugin Documentation Site](http://codearte.github.io/accurest-maven-plugin/plugin-info.html) - - - -Accurest Stub Runner ---- - -Run stubs mappings from current directory: - - mvn io.codearte.accurest:accurest-maven-plugin:run - -or shortly * - - mvn accurest:run - -Running stubs from repository: - - mvn accurest:run -Dstubs="org.springframework:gs-rest-service" - -where `org.springframework:gs-rest-service` is artifact with `stubs` classifier contains wiremock mappings. - - -Project configuration ----- - -```xml - - io.codearte.accurest - accurest-maven-plugin - 0.5.7 - - - - convert - generateStubs - generateTests - - - - - foobar.BaseAccurestTest - - -``` - -Sample `BaseAccurateTest.java` - -```java -package foobar; - -import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc; -import org.junit.Before; - -public class BaseAccurestTest { - - @Before - public void setup() { - RestAssuredMockMvc.standaloneSetup(new FoobarController()); - } - -} -``` - - ---- - -* Additional configuration inside `~/.m2/settings.xml` is required. - -```xml - - ... - - io.codearte.accurest - - ... - - -``` - diff --git a/src/site/asciidoc/junit.adoc b/src/site/asciidoc/junit.adoc new file mode 100644 index 0000000000..ad56a34c79 --- /dev/null +++ b/src/site/asciidoc/junit.adoc @@ -0,0 +1,29 @@ +== Java Project with JUnit Tests + +Sample minimal configuration for Java Project with JUnit tests. + +=== Test dependencies for generated contract verification tests + +[source,xml] +---- +include::../../../src/test/projects/spring-boot-java/pom.xml[tags=dependencies] +---- + +=== Project configuration for Accurest with JUnit tests and stub publishing + +[source,xml] +---- +include::../../../src/test/projects/spring-boot-java/pom.xml[tags=plugin] +---- + +=== Base Test class + +[source,java] +---- +include::../../../src/test/projects/spring-boot-java/src/test/java/hello/BaseAccurest.java[] +---- + + +=== Project source code + +https://github.com/Codearte/accurest-maven-plugin/tree/master/src/test/projects/spring-boot-java \ No newline at end of file diff --git a/src/site/asciidoc/spock.adoc b/src/site/asciidoc/spock.adoc new file mode 100644 index 0000000000..b9b4f92d24 --- /dev/null +++ b/src/site/asciidoc/spock.adoc @@ -0,0 +1,29 @@ +== Groovy Project with Spock Specifications + +Sample minimal configuration for Groovy Project with Spock Specification + +=== Test dependencies for generated contract verification tests + +[source,xml] +---- +include::../../../src/test/projects/spring-boot-groovy/pom.xml[tags=dependencies] +---- + +=== Project configuration for Accurest, Groovy and Spock specifications and stub publishing + + +[source,xml] +---- +include::../../../src/test/projects/spring-boot-groovy/pom.xml[tags=plugin] +---- + +=== Base Specification class + +[source,java] +---- +include::../../../src/test/projects/spring-boot-groovy/src/test/groovy/hello/BaseAccurest.groovy[] +---- + +=== Project source code + +https://github.com/Codearte/accurest-maven-plugin/tree/master/src/test/projects/spring-boot-groovy diff --git a/src/site/asciidoc/usage.adoc b/src/site/asciidoc/usage.adoc index 9cdbcc2140..976de79d95 100644 --- a/src/site/asciidoc/usage.adoc +++ b/src/site/asciidoc/usage.adoc @@ -1,24 +1,35 @@ -== Usage += Usage -Sample minimal configuration for project with Java source code. +== Converting Accurest GroovyDSL into WireMock stub mappings + mvn io.codearte.accurest:accurest-maven-plugin:convert + +or shortly footnoteref:[prefix,Additional configuration inside `~/.m2/settings.xml` is required: `io.codearte.accurest`.] + + mvn accurest:convert + +For more information please go to the Accurest Wiki or Plugin Documentation Site. + +== Accurest Stub Runner + +Run stubs mappings from current directory: + + mvn io.codearte.accurest:accurest-maven-plugin:run + +or shortly footnoteref:[prefix] + + mvn accurest:run + +== Running stubs from repository + + mvn accurest:run -Dstubs="org.springframework:gs-rest-service" + +where `org.springframework:gs-rest-service` is artifact with stubs classifier contains wiremock mappings. + +== Project configuration + +[source,xml] ---- - - io.codearte.accurest - accurest-maven-plugin - 0.5.8 - - - - convert - generateStubs - generateTests - - - - - foobar.AccurestBaseTest - - +include::../../../src/test/projects/spring-boot-java/pom.xml[tags=plugin] ---- diff --git a/src/site/site.xml b/src/site/site.xml index 99c060eba2..005d021238 100644 --- a/src/site/site.xml +++ b/src/site/site.xml @@ -28,6 +28,8 @@ + + diff --git a/src/test/java/io/codearte/accurest/maven/PluginIT.java b/src/test/java/io/codearte/accurest/maven/PluginIT.java index 15305cf7d2..b1e5415683 100644 --- a/src/test/java/io/codearte/accurest/maven/PluginIT.java +++ b/src/test/java/io/codearte/accurest/maven/PluginIT.java @@ -37,7 +37,7 @@ public class PluginIT { .assertLogText("Generated 1 test classes.") .assertLogText("Converting from accurest contracts written in GroovyDSL to WireMock stubs mappings") .assertLogText("Creating new json") - .assertLogText("Compiled 3 files.") // groovy test classes + .assertLogText("Running io.codearte.accurest.tests.AccurestSpec") .assertErrorFreeLog(); } @@ -51,7 +51,7 @@ public class PluginIT { .assertLogText("Generated 1 test classes.") .assertLogText("Converting from accurest contracts written in GroovyDSL to WireMock stubs mappings") .assertLogText("Creating new json") - .assertLogText("Compiling 2 source files") + .assertLogText("Running io.codearte.accurest.tests.AccurestTest") .assertErrorFreeLog(); } diff --git a/src/test/projects/spring-boot-groovy/pom.xml b/src/test/projects/spring-boot-groovy/pom.xml index 50d56c8e6a..f833504383 100644 --- a/src/test/projects/spring-boot-groovy/pom.xml +++ b/src/test/projects/spring-boot-groovy/pom.xml @@ -1,137 +1,128 @@ - 4.0.0 + 4.0.0 - io.codearte.sample - sample-simple-boot - 0.0.1-SNAPSHOT - jar + org.springframework + gs-rest-service + 0.1.0 - sample-simple-boot - Demo project for Spring Boot + + org.springframework.boot + spring-boot-starter-parent + 1.3.3.RELEASE + - - org.springframework.boot - spring-boot-starter-parent - 1.3.3.RELEASE - - + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + - - UTF-8 - 1.8 - ${it-plugin.version} - + + + + org.spockframework + spock-core + test + + + com.jayway.restassured + rest-assured + 2.9.0 + test + + + com.jayway.restassured + spring-mock-mvc + 2.9.0 + test + + + com.toomuchcoding.jsonassert + jsonassert + 0.3.0 + test + + - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - + - - org.codehaus.groovy - groovy-all - + + 1.8 + ${it-plugin.version} + - - - org.spockframework - spock-core - 1.0-groovy-2.4 - test - - - com.jayway.restassured - rest-assured - 2.9.0 - test - - - com.jayway.restassured - spring-mock-mvc - 2.9.0 - test - - - com.toomuchcoding.jsonassert - jsonassert - 0.3.0 - test - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + + io.codearte.accurest + accurest-maven-plugin + ${accurest-plugin.version} + + + + convert + generateStubs + generateTests + + + + + hello.BaseAccurest + SPOCK + + + + + org.codehaus.gmavenplus + gmavenplus-plugin + 1.5 + + + + testCompile + + + + + + + ${project.basedir}/src/test/groovy + + **/*.groovy + + + + ${project.build.directory}/generated-test-sources/accurest + + **/*.groovy + + + + + + + maven-surefire-plugin + 2.19 + + + **/*Spec.java + + + + + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - io.codearte.accurest - accurest-maven-plugin - ${accurest.version} - - - - convert - generateStubs - generateTests - - - - - com.ofg.twitter.place.BaseMockMvcTest - src/test/resources/stubs - SPOCK - Test - - - - org.codehaus.gmavenplus - gmavenplus-plugin - 1.5 - - - - addSources - compile - testCompile - - - - - - - ${project.basedir}/src/test/groovy - - **/*.groovy - - - - ${project.build.directory}/generated-test-sources/accurest - - **/*.groovy - - - - - - - - diff --git a/src/test/projects/spring-boot-groovy/src/main/groovy/com/ofg/twitter/place/PairIdController.groovy b/src/test/projects/spring-boot-groovy/src/main/groovy/com/ofg/twitter/place/PairIdController.groovy deleted file mode 100644 index 3a7671793c..0000000000 --- a/src/test/projects/spring-boot-groovy/src/main/groovy/com/ofg/twitter/place/PairIdController.groovy +++ /dev/null @@ -1,36 +0,0 @@ -package com.ofg.twitter.place - -import groovy.transform.TypeChecked -import groovy.util.logging.Slf4j -import org.springframework.http.MediaType -import org.springframework.web.bind.annotation.PathVariable -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController - -import static org.springframework.web.bind.annotation.RequestMethod.PUT - -@Slf4j -@RestController -@RequestMapping('/api') -@TypeChecked -class PairIdController { - - @RequestMapping( - value = '{pairId}', - method = PUT, - consumes = MediaType.APPLICATION_JSON_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - String getPlacesFromTweets(@PathVariable long pairId, @RequestBody List tweets) { - log.info("Inside PairIdController, doing very important logic") - if (tweets?.text != ["Gonna see you at Warsaw"]) { - throw new IllegalArgumentException("Wrong text in tweet: ${tweets?.text}") - } - return """ - { - "path" : "/api/$pairId", - "correlationId" : 123456 - } - """ - } -} diff --git a/src/test/projects/spring-boot-groovy/src/main/groovy/com/ofg/twitter/place/Tweet.java b/src/test/projects/spring-boot-groovy/src/main/groovy/com/ofg/twitter/place/Tweet.java deleted file mode 100644 index 5d1e9c2835..0000000000 --- a/src/test/projects/spring-boot-groovy/src/main/groovy/com/ofg/twitter/place/Tweet.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ofg.twitter.place; - -public class Tweet { - private String text; - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } -} diff --git a/src/test/projects/spring-boot-groovy/src/main/java/hello/Application.java b/src/test/projects/spring-boot-groovy/src/main/java/hello/Application.java new file mode 100644 index 0000000000..5abd411428 --- /dev/null +++ b/src/test/projects/spring-boot-groovy/src/main/java/hello/Application.java @@ -0,0 +1,12 @@ +package hello; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/src/test/projects/spring-boot-groovy/src/main/java/hello/Greeting.java b/src/test/projects/spring-boot-groovy/src/main/java/hello/Greeting.java new file mode 100644 index 0000000000..5d10b59b77 --- /dev/null +++ b/src/test/projects/spring-boot-groovy/src/main/java/hello/Greeting.java @@ -0,0 +1,20 @@ +package hello; + +public class Greeting { + + private final long id; + private final String content; + + public Greeting(long id, String content) { + this.id = id; + this.content = content; + } + + public long getId() { + return id; + } + + public String getContent() { + return content; + } +} diff --git a/src/test/projects/spring-boot-groovy/src/main/java/hello/GreetingController.java b/src/test/projects/spring-boot-groovy/src/main/java/hello/GreetingController.java new file mode 100644 index 0000000000..e356ab2b10 --- /dev/null +++ b/src/test/projects/spring-boot-groovy/src/main/java/hello/GreetingController.java @@ -0,0 +1,19 @@ +package hello; + +import java.util.concurrent.atomic.AtomicLong; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class GreetingController { + + private static final String template = "Hello, %s!"; + private final AtomicLong counter = new AtomicLong(); + + @RequestMapping("/greeting") + public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { + return new Greeting(counter.incrementAndGet(), + String.format(template, name)); + } +} diff --git a/src/test/projects/spring-boot-groovy/src/main/java/io/codearte/sample/SampleSimpleBootApplication.java b/src/test/projects/spring-boot-groovy/src/main/java/io/codearte/sample/SampleSimpleBootApplication.java deleted file mode 100644 index 1ef9cf14fa..0000000000 --- a/src/test/projects/spring-boot-groovy/src/main/java/io/codearte/sample/SampleSimpleBootApplication.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.codearte.sample; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class SampleSimpleBootApplication { - - public static void main(String[] args) { - SpringApplication.run(SampleSimpleBootApplication.class, args); - } -} diff --git a/src/test/projects/spring-boot-groovy/src/main/resources/application.properties b/src/test/projects/spring-boot-groovy/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/test/projects/spring-boot-groovy/src/test/accurest/greetings_ok.groovy b/src/test/projects/spring-boot-groovy/src/test/accurest/greetings_ok.groovy new file mode 100644 index 0000000000..1a1f0c44f7 --- /dev/null +++ b/src/test/projects/spring-boot-groovy/src/test/accurest/greetings_ok.groovy @@ -0,0 +1,21 @@ +io.codearte.accurest.dsl.GroovyDsl.make { + priority 2 + request { + method 'GET' + urlPath('/greeting') { + queryParameters { + parameter 'name': 'Something' + } + } + headers { + header 'Content-Type': 'application/json' + } + } + response { + status 200 + body ( + id: 1, + content: "Hello, Something!" + ) + } +} \ No newline at end of file diff --git a/src/test/projects/spring-boot-groovy/src/test/accurest/greetings_with_default_value.groovy b/src/test/projects/spring-boot-groovy/src/test/accurest/greetings_with_default_value.groovy new file mode 100644 index 0000000000..d61159c084 --- /dev/null +++ b/src/test/projects/spring-boot-groovy/src/test/accurest/greetings_with_default_value.groovy @@ -0,0 +1,17 @@ +io.codearte.accurest.dsl.GroovyDsl.make { + priority 2 + request { + method 'GET' + url('/greeting') + headers { + header 'Content-Type': 'application/json' + } + } + response { + status 200 + body ( + id: 1, + content: "Hello, World!" + ) + } +} \ No newline at end of file diff --git a/src/test/projects/spring-boot-groovy/src/test/groovy/com/ofg/twitter/place/AcceptanceTest.groovy b/src/test/projects/spring-boot-groovy/src/test/groovy/com/ofg/twitter/place/AcceptanceTest.groovy deleted file mode 100644 index d132261ded..0000000000 --- a/src/test/projects/spring-boot-groovy/src/test/groovy/com/ofg/twitter/place/AcceptanceTest.groovy +++ /dev/null @@ -1,23 +0,0 @@ -package com.ofg.twitter.place - -import com.ofg.twitter.place.PairIdController -import org.springframework.http.MediaType -import org.springframework.test.web.servlet.MockMvc -import org.springframework.test.web.servlet.setup.MockMvcBuilders -import spock.lang.Specification - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status - -class AcceptanceTest extends Specification { - - def "should have controller up and running"() { - given: - MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new PairIdController()).build() - expect: - mockMvc.perform(put("/api/${1}"). - contentType(MediaType.APPLICATION_JSON). - content("""[{"text":"Gonna see you at Warsaw"}]""")). - andExpect(status().isOk()) - } -} diff --git a/src/test/projects/spring-boot-groovy/src/test/groovy/com/ofg/twitter/place/BaseMockMvcTest.groovy b/src/test/projects/spring-boot-groovy/src/test/groovy/com/ofg/twitter/place/BaseMockMvcTest.groovy deleted file mode 100644 index 96bf1e60c4..0000000000 --- a/src/test/projects/spring-boot-groovy/src/test/groovy/com/ofg/twitter/place/BaseMockMvcTest.groovy +++ /dev/null @@ -1,16 +0,0 @@ -package com.ofg.twitter.place - -import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc -import com.ofg.twitter.place.PairIdController -import spock.lang.Specification - -abstract class BaseMockMvcTest extends Specification { - - def setup() { - RestAssuredMockMvc.standaloneSetup(new PairIdController()) - } - - void isProperCorrelationId(Integer correlationId) { - assert correlationId == 123456 - } -} diff --git a/src/test/projects/spring-boot-groovy/src/test/groovy/hello/BaseAccurest.groovy b/src/test/projects/spring-boot-groovy/src/test/groovy/hello/BaseAccurest.groovy new file mode 100644 index 0000000000..4819faaf12 --- /dev/null +++ b/src/test/projects/spring-boot-groovy/src/test/groovy/hello/BaseAccurest.groovy @@ -0,0 +1,12 @@ +package hello + +import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc +import spock.lang.Specification + +public class BaseAccurest extends Specification { + + def setup() { + RestAssuredMockMvc.standaloneSetup(new GreetingController()) + } + +} \ No newline at end of file diff --git a/src/test/projects/spring-boot-groovy/src/test/java/io/codearte/sample/SampleSimpleBootApplicationTests.java b/src/test/projects/spring-boot-groovy/src/test/java/io/codearte/sample/SampleSimpleBootApplicationTests.java deleted file mode 100644 index 345f6ef841..0000000000 --- a/src/test/projects/spring-boot-groovy/src/test/java/io/codearte/sample/SampleSimpleBootApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.codearte.sample; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = SampleSimpleBootApplication.class) -public class SampleSimpleBootApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/src/test/projects/spring-boot-groovy/src/test/resources/logback-test.groovy b/src/test/projects/spring-boot-groovy/src/test/resources/logback-test.groovy deleted file mode 100644 index 315c39c794..0000000000 --- a/src/test/projects/spring-boot-groovy/src/test/resources/logback-test.groovy +++ /dev/null @@ -1,14 +0,0 @@ -import ch.qos.logback.classic.encoder.PatternLayoutEncoder -import ch.qos.logback.core.ConsoleAppender - -String console = "CONSOLE" -String logPattern = "%d{yyyy-MM-dd HH:mm:ss.SSSZ, Europe/Warsaw} | %-5level | %X{correlationId} | %thread | %logger{1} | %m%n" - -appender(console, ConsoleAppender) { - encoder(PatternLayoutEncoder) { - pattern = logPattern - } -} - -root(INFO, [console]) -logger("com.ofg", DEBUG) diff --git a/src/test/projects/spring-boot-groovy/src/test/resources/stubs/collerate_PlacesFrom_Tweet.groovy b/src/test/projects/spring-boot-groovy/src/test/resources/stubs/collerate_PlacesFrom_Tweet.groovy deleted file mode 100644 index 826f71b791..0000000000 --- a/src/test/projects/spring-boot-groovy/src/test/resources/stubs/collerate_PlacesFrom_Tweet.groovy +++ /dev/null @@ -1,18 +0,0 @@ -io.codearte.accurest.dsl.GroovyDsl.make { - priority 2 - request { - method 'PUT' - url '/api/12' - headers { - header 'Content-Type': 'application/json' - } - body '''\ - [{ - "text": "Gonna see you at Warsaw" - }] -''' - } - response { - status 200 - } -} \ No newline at end of file diff --git a/src/test/projects/spring-boot-groovy/src/test/resources/stubs/moreComplexVersion.groovy b/src/test/projects/spring-boot-groovy/src/test/resources/stubs/moreComplexVersion.groovy deleted file mode 100644 index 943fbc23b9..0000000000 --- a/src/test/projects/spring-boot-groovy/src/test/resources/stubs/moreComplexVersion.groovy +++ /dev/null @@ -1,21 +0,0 @@ -io.codearte.accurest.dsl.GroovyDsl.make { - request { - method 'PUT' - url $(client(regex('^/api/[0-9]{2}$')), server('/api/12')) - headers { - header 'Content-Type': 'application/json' - } - body '''\ - [{ - "text": "Gonna see you at Warsaw" - }] -''' - } - response { - body ( - path: $(client('/api/12'), server(regex('^/api/[0-9]{2}$'))), - correlationId: $(client('1223456'), server(execute('isProperCorrelationId($it)'))) - ) - status 200 - } -} \ No newline at end of file diff --git a/src/test/projects/spring-boot-java/pom.xml b/src/test/projects/spring-boot-java/pom.xml index 3f1f635dbd..db9953406d 100644 --- a/src/test/projects/spring-boot-java/pom.xml +++ b/src/test/projects/spring-boot-java/pom.xml @@ -29,6 +29,7 @@ + com.jayway.restassured rest-assured @@ -53,10 +54,12 @@ 2.3.0 test + 1.8 + ${it-plugin.version} @@ -65,10 +68,11 @@ org.springframework.boot spring-boot-maven-plugin + io.codearte.accurest accurest-maven-plugin - ${it-plugin.version} + ${accurest-plugin.version} @@ -79,10 +83,10 @@ - hello - hello.BaseMockMvcTest + hello.BaseAccurest + diff --git a/src/test/projects/spring-boot-java/src/test/java/hello/BaseMockMvcTest.java b/src/test/projects/spring-boot-java/src/test/java/hello/BaseAccurest.java similarity index 87% rename from src/test/projects/spring-boot-java/src/test/java/hello/BaseMockMvcTest.java rename to src/test/projects/spring-boot-java/src/test/java/hello/BaseAccurest.java index 2fe6a9564a..d3bf7124e2 100644 --- a/src/test/projects/spring-boot-java/src/test/java/hello/BaseMockMvcTest.java +++ b/src/test/projects/spring-boot-java/src/test/java/hello/BaseAccurest.java @@ -3,7 +3,7 @@ package hello; import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc; import org.junit.Before; -public class BaseMockMvcTest { +public class BaseAccurest { @Before public void setup() {