diff --git a/src/main/java/io/codearte/accurest/maven/GenerateSpecsMojo.java b/src/main/java/io/codearte/accurest/maven/GenerateSpecsMojo.java new file mode 100644 index 0000000000..aba7bb50b2 --- /dev/null +++ b/src/main/java/io/codearte/accurest/maven/GenerateSpecsMojo.java @@ -0,0 +1,47 @@ +package io.codearte.accurest.maven; + +import static java.lang.String.format; + +import java.io.File; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; + +import io.codearte.accurest.AccurestException; +import io.codearte.accurest.TestGenerator; +import io.codearte.accurest.config.AccurestConfigProperties; + +@Mojo(name = "generateSpecs", defaultPhase = LifecyclePhase.GENERATE_TEST_SOURCES) +public class GenerateSpecsMojo extends AbstractMojo { + + @Parameter(defaultValue = "${basedir}") + protected File baseDir; + + @Parameter(defaultValue = "${project.build.directory}") + protected File projectBuildDirectory; + + public void execute() throws MojoExecutionException, MojoFailureException { + AccurestConfigProperties config = new AccurestConfigProperties(); + + config.setContractsDslDir(new File(baseDir, "/src/test/resources/stubs")); + config.setBasePackageForTests("io.codearte.accurest.tests"); + config.setGeneratedTestSourcesDir(new File(projectBuildDirectory, "/generated-sources/accurest")); + + getLog().info("Accurest Plugin: Invoking test sources generation"); + getLog().info(format("Registering %s as test source directory", config.getGeneratedTestSourcesDir())); + + try { + TestGenerator generator = new TestGenerator(config); + int generatedClasses = generator.generate(); + getLog().info(String.format("Generated %s test classes.", generatedClasses)); + } catch (AccurestException e) { + throw new MojoExecutionException(format("Accurest Plugin exception: %s", e.getMessage()), e); + } + + } + +} diff --git a/src/main/java/io/codearte/accurest/maven/GenerateStubsMojo.java b/src/main/java/io/codearte/accurest/maven/GenerateStubsMojo.java index 499311cf65..5ba6ed76fb 100644 --- a/src/main/java/io/codearte/accurest/maven/GenerateStubsMojo.java +++ b/src/main/java/io/codearte/accurest/maven/GenerateStubsMojo.java @@ -26,30 +26,15 @@ public class GenerateStubsMojo extends AbstractMojo { private String mappingsDir = "mappings"; public void execute() throws MojoExecutionException, MojoFailureException { - getLog().info(""); - getLog().info("*** Accurest Maven Plugin ***"); - getLog().info(""); + AccurestConfigProperties config = new AccurestConfigProperties(); + config.setContractsDslDir(new File(baseDir, "/src/test/resources/stubs")); + config.setStubsOutputDir(new File(projectBuildDirectory, mappingsDir)); - File stubsOutputDir = new File(projectBuildDirectory, mappingsDir); - - getLog().info("baseDir = " + baseDir); - getLog().info("projectBuildDirectory = " + projectBuildDirectory); - getLog().info("mappings = " + mappingsDir); - - AccurestConfigProperties configProperties = new AccurestConfigProperties(); - - File contractsDslDir = new File(baseDir, "/src/test/resources/stubs"); - - configProperties.setContractsDslDir(contractsDslDir); - configProperties.setBasePackageForTests("io.codearte.accurest.tests"); - configProperties.setStubsOutputDir(stubsOutputDir); getLog().info("Accurest Plugin: Invoking GroovyDSL to WireMock client stubs conversion"); - getLog().info(String.format("From '%s' to '%s'", contractsDslDir, stubsOutputDir)); + getLog().info(String.format("From '%s' to '%s'", config.getContractsDslDir(), config.getStubsOutputDir())); - RecursiveFilesConverter converter = new RecursiveFilesConverter(new DslToWireMockClientConverter(), - configProperties); + RecursiveFilesConverter converter = new RecursiveFilesConverter(new DslToWireMockClientConverter(), config); converter.processFiles(); - } } diff --git a/src/test/java/io/codearte/accurest/maven/PluginIntegrationTest.java b/src/test/java/io/codearte/accurest/maven/PluginIntegrationTest.java index 839ddb36a6..a786df3778 100644 --- a/src/test/java/io/codearte/accurest/maven/PluginIntegrationTest.java +++ b/src/test/java/io/codearte/accurest/maven/PluginIntegrationTest.java @@ -25,12 +25,19 @@ public class PluginIntegrationTest { } @Test - public void test() throws Exception { + public void shouldCreateStubs() throws Exception { File basedir = resources.getBasedir("basic-with-execution"); maven.forProject(basedir) .withCliOption("-X") .execute("package") - .assertErrorFreeLog() .assertLogText("Accurest Plugin: Invoking GroovyDSL to WireMock client stubs conversion"); } + + @Test + public void shouldCreateSpecs() throws Exception { + File basedir = resources.getBasedir("basic-with-execution"); + maven.forProject(basedir) + .execute("package") + .assertLogText("Accurest Plugin: Invoking test sources generation"); + } } \ No newline at end of file diff --git a/src/test/java/io/codearte/accurest/maven/PluginUnitTest.java b/src/test/java/io/codearte/accurest/maven/PluginUnitTest.java index 1d402cf58e..d1e0bf696c 100644 --- a/src/test/java/io/codearte/accurest/maven/PluginUnitTest.java +++ b/src/test/java/io/codearte/accurest/maven/PluginUnitTest.java @@ -19,17 +19,24 @@ public class PluginUnitTest { public final TestMavenRuntime maven = new TestMavenRuntime(); @Test - public void shouldGenerateWarlockStubsInDefaultLocation() throws Exception { + public void shouldGenerateWiremockStubsInDefaultcLocation() throws Exception { File basedir = resources.getBasedir("basic"); maven.executeMojo(basedir, "generateStubs"); assertFilesPresent(basedir, "target/mappings/Sample.json"); } @Test - public void shouldGenerateWarlockStubsInSelectedLocation() throws Exception { + public void shouldGenerateWiremockStubsInSelectedLocation() throws Exception { File basedir = resources.getBasedir("basic"); maven.executeMojo(basedir, "generateStubs", TestMavenRuntime.newParameter("mappingsDir", "foo")); assertFilesPresent(basedir, "target/foo/Sample.json"); } + @Test + public void shouldGenerateContractSpecificationInDefaultLocation() throws Exception { + File basedir = resources.getBasedir("basic"); + maven.executeMojo(basedir, "generateSpecs"); + assertFilesPresent(basedir, + "target/generated-sources/accurest/io/codearte/accurest/tests/AccurestSpec.groovy"); + } } diff --git a/src/test/projects/basic-with-execution/pom.xml b/src/test/projects/basic-with-execution/pom.xml index 3cbb096806..2238e43e53 100644 --- a/src/test/projects/basic-with-execution/pom.xml +++ b/src/test/projects/basic-with-execution/pom.xml @@ -7,6 +7,45 @@ sample-project 0.1 + + + + 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.github.tomakehurst + wiremock + 2.0.4-beta + test + + + com.toomuchcoding.jsonassert + jsonassert + 0.2.2 + test + + + org.assertj + assertj-core + 2.3.0 + + + @@ -18,10 +57,42 @@ generateStubs + generateSpecs + + org.codehaus.gmavenplus + gmavenplus-plugin + 1.5 + + + + testCompile + + + + + + + ${project.build.directory}/generated-sources/accurest + + **/*.groovy + + + + + + + maven-surefire-plugin + 2.19 + + + **/*Spec.java + + + \ No newline at end of file