From c2a1efa9dc655c295edcb9181f20f892aa7be500 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 23 Nov 2016 17:43:25 +0100 Subject: [PATCH] Plugins are generating tests for all contracts when using external contracts When using contract plugins together with a shared repo with contracts we end up with creating contract tests for all the contracts. Stubs are created properly but tests generation ignores the path pattern. With this change we fix the way tests are generated fixes #155 --- .../contract/maven/verifier/ConvertMojo.java | 2 +- .../maven/verifier/CopyContracts.java | 10 ++++++++-- .../maven/verifier/PluginUnitTest.java | 4 ++-- .../projects/complex-remote-contracts/pom.xml | 2 +- .../contracts-0.0.1-SNAPSHOT.jar | Bin 2995 -> 4038 bytes .../contract/verifier/TestGenerator.groovy | 3 ++- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ConvertMojo.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ConvertMojo.java index a097f94605..10d33c0c26 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ConvertMojo.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/ConvertMojo.java @@ -134,7 +134,7 @@ public class ConvertMojo extends AbstractMojo { this.aetherStubDownloaderFactory, this.repoSession).downloadAndUnpackContractsIfRequired(config, this.contractsDirectory); getLog().info("Directory with contract is present at [" + contractsDirectory + "]"); - new CopyContracts(this.project, this.mavenSession, this.mavenResourcesFiltering) + new CopyContracts(this.project, this.mavenSession, this.mavenResourcesFiltering, config) .copy(contractsDirectory, this.stubsDirectory); config.setContractsDslDir(isInsideProject() ? contractsDirectory : this.source); diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/CopyContracts.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/CopyContracts.java index 6b8e0bafdb..bbbd64c6de 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/CopyContracts.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/CopyContracts.java @@ -28,6 +28,7 @@ import org.apache.maven.shared.filtering.MavenResourcesExecution; import org.apache.maven.shared.filtering.MavenResourcesFiltering; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties; class CopyContracts { private static final Logger log = LoggerFactory @@ -35,17 +36,22 @@ class CopyContracts { private final MavenProject project; private final MavenSession mavenSession; private final MavenResourcesFiltering mavenResourcesFiltering; + private final ContractVerifierConfigProperties config; public CopyContracts(MavenProject project, MavenSession mavenSession, - MavenResourcesFiltering mavenResourcesFiltering) { + MavenResourcesFiltering mavenResourcesFiltering, + ContractVerifierConfigProperties config) { this.project = project; this.mavenSession = mavenSession; this.mavenResourcesFiltering = mavenResourcesFiltering; + this.config = config; } public void copy(File contractsDirectory, File outputDirectory) throws MojoExecutionException { - log.info("Copying Spring Cloud Contract Verifier contracts"); + log.info("Copying Spring Cloud Contract Verifier contracts. Only files matching " + + "[" + this.config.getIncludedContracts() + "] pattern will end up in " + + "the final JAR with stubs."); Resource resource = new Resource(); resource.setDirectory(contractsDirectory.getAbsolutePath()); MavenResourcesExecution execution = new MavenResourcesExecution(); diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginUnitTest.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginUnitTest.java index 31a9b2f906..19eb0d49e5 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginUnitTest.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginUnitTest.java @@ -19,8 +19,6 @@ package org.springframework.cloud.contract.maven.verifier; import java.io.File; import org.apache.commons.io.FileUtils; -import org.junit.Assume; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -148,6 +146,7 @@ public class PluginUnitTest { File basedir = this.resources.getBasedir("complex-remote-contracts"); this.maven.executeMojo(basedir, "convert", newParameter("contractsRepositoryUrl", "file://" + PluginUnitTest.class.getClassLoader().getResource("m2repo/repository").getFile().replace("/", File.separator))); assertFilesPresent(basedir, "target/stubs/mappings/com/example/server/client1/contracts/shouldMarkClientAsFraud.json"); + assertFilesNotPresent(basedir, "target/stubs/mappings/com/foo/bar/baz/shouldBeIgnoredByPlugin.json"); } @Test @@ -162,6 +161,7 @@ public class PluginUnitTest { File basedir = this.resources.getBasedir("complex-remote-contracts"); this.maven.executeMojo(basedir, "generateTests", newParameter("contractsRepositoryUrl", "file://" + PluginUnitTest.class.getClassLoader().getResource("m2repo/repository").getFile().replace("/", File.separator))); assertFilesPresent(basedir, "target/generated-test-sources/contracts/org/springframework/cloud/contract/verifier/tests/com/example/server/client1/ContractsTest.java"); + assertFilesNotPresent(basedir, "target/generated-test-sources/contracts/org/springframework/cloud/contract/verifier/tests/com/foo/bar/BazTest.java"); } @Test diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-remote-contracts/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-remote-contracts/pom.xml index c730b383ef..f38a4fe825 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-remote-contracts/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-remote-contracts/pom.xml @@ -21,7 +21,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.example + com.example.foo.bar.baz someartifact 0.1.BUILD-SNAPSHOT diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/resources/m2repo/repository/com/example/contracts/0.0.1-SNAPSHOT/contracts-0.0.1-SNAPSHOT.jar b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/resources/m2repo/repository/com/example/contracts/0.0.1-SNAPSHOT/contracts-0.0.1-SNAPSHOT.jar index 4e3d44862b05ee796bb29c1eb190286bafe12793..623f11fff4d76bceb2e0b65b27548734a652bb89 100644 GIT binary patch delta 508 zcmdlieoTHtBD*0o3l{?j9O)?c1T&xn2ZIbla(=FUT7JHMXb2|*bHP5-2oRp!%P7eV zR6X&as3=G>DX|Dsfg!qa0!YSzbR;EKq3L?VDCrNYT0SEK!xkn620bjgiZk*{ zb5fjAJ=62@i&9gZDg$y#(=+q*(u?x*%PLWvy7?jNKGw+woLt7}&f#E?fcjH_;eca2 zI|GtmSs{L%EYB$o^5Ce&hLcEU9FFJWXCtD<@*C8$h kh6F=Hqag>vg|Ofw6c8{Q`nbjU_!;;aRmzgc`kBKu}8E;|+xRyGD8;08iF76yiRb`TE$ceVts diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/TestGenerator.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/TestGenerator.groovy index c81afc29e8..60ad94a94a 100755 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/TestGenerator.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/TestGenerator.groovy @@ -58,7 +58,8 @@ class TestGenerator { this.saver = saver contractFileScanner = new ContractFileScanner(configProperties.contractsDslDir, configProperties.excludedFiles as Set, - configProperties.ignoredFiles as Set) + configProperties.ignoredFiles as Set, + this.configProperties.includedContracts) } int generate() {