diff --git a/docs/pom.xml b/docs/pom.xml
index 99972b5f3f..5eeb1fc5bb 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -35,6 +35,10 @@
docs
+
+ pl.project13.maven
+ git-commit-id-plugin
+
org.apache.maven.plugins
maven-dependency-plugin
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractsCopyTask.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractsCopyTask.groovy
index fdc4cfe6f8..373a8a3cd9 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractsCopyTask.groovy
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/ContractsCopyTask.groovy
@@ -19,8 +19,10 @@ package org.springframework.cloud.contract.verifier.plugin
import groovy.transform.CompileDynamic
import groovy.transform.CompileStatic
import groovy.transform.PackageScope
-import org.gradle.api.internal.ConventionTask
+import org.gradle.api.DefaultTask
import org.gradle.api.logging.Logger
+import org.gradle.api.tasks.InputDirectory
+import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.WorkResult
@@ -37,22 +39,30 @@ import org.springframework.cloud.contract.verifier.converter.ToYamlConverter
*/
@PackageScope
@CompileStatic
-class ContractsCopyTask extends ConventionTask {
+class ContractsCopyTask extends DefaultTask {
private static final String ORIGINAL_PATH = "original"
ContractVerifierExtension extension
GradleContractsDownloader downloader
+ @InputDirectory
+ File input
+
+ @OutputDirectory
+ File outputContractsFolder
+
@TaskAction
void copy() {
- ContractVerifierConfigProperties props = ExtensionToProperties.fromExtension(getExtension())
- File file = getDownloader().downloadAndUnpackContractsIfRequired(getExtension(), props)
- file = contractsSubDirIfPresent(logger, file)
+ ContractVerifierConfigProperties props = props()
+ if (logger.isDebugEnabled()) {
+ logger.debug("Config props [" + props + "]")
+ }
+ File file = getInput()
String antPattern = "${props.includedRootFolderAntPattern}*.*"
String slashSeparatedGroupId = project.group.toString().replace(".", File.separator)
String slashSeparatedAntPattern = antPattern.replace(slashSeparatedGroupId, project.group.toString())
- String root = root(props)
- File outputContractsFolder = outputContractsFolder(root)
+ String root = root()
+ File outputContractsFolder = getOutputContractsFolder()
project.logger.info("Downloading and unpacking files from [$file] to [$outputContractsFolder]. The inclusion ant patterns are [${antPattern}] and [${slashSeparatedAntPattern}]")
copy(file, antPattern, slashSeparatedAntPattern, props, outputContractsFolder)
if (getExtension().isConvertToYaml()) {
@@ -61,15 +71,26 @@ class ContractsCopyTask extends ConventionTask {
}
+ private File getInput() {
+ File file = getDownloader().downloadAndUnpackContractsIfRequired(getExtension(), props())
+ return contractsSubDirIfPresent(logger, file)
+ }
+
+ private ContractVerifierConfigProperties props() {
+ return ExtensionToProperties.fromExtension(getExtension())
+ }
+
@CompileDynamic
- private File outputContractsFolder(String root) {
+ private File getOutputContractsFolder() {
+ String root = root()
File outputContractsFolder = outputFolder(root, "contracts")
ext.contractsDslDir = outputContractsFolder
return outputContractsFolder
}
@CompileDynamic
- private String root(ContractVerifierConfigProperties props) {
+ private String root() {
+ ContractVerifierConfigProperties props = props()
String root = OutputFolderBuilder.buildRootPath(project)
ext.contractVerifierConfigProperties = props
return root
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateClientStubsFromDslTask.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateClientStubsFromDslTask.groovy
index 23f72dbc99..a9b64ded57 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateClientStubsFromDslTask.groovy
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateClientStubsFromDslTask.groovy
@@ -18,8 +18,10 @@ package org.springframework.cloud.contract.verifier.plugin
import groovy.transform.CompileDynamic
import groovy.transform.CompileStatic
+import org.gradle.api.DefaultTask
import org.gradle.api.Task
-import org.gradle.api.internal.ConventionTask
+import org.gradle.api.tasks.InputDirectory
+import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
@@ -33,8 +35,12 @@ import org.springframework.cloud.contract.verifier.converter.RecursiveFilesConve
* @since 2.0.0
*/
@CompileStatic
-class GenerateClientStubsFromDslTask extends ConventionTask {
+class GenerateClientStubsFromDslTask extends DefaultTask {
+ @InputDirectory
+ File contractsDslDir
+
+ @OutputDirectory
File stubsOutputDir
ContractVerifierExtension configProperties
@@ -45,9 +51,8 @@ class GenerateClientStubsFromDslTask extends ConventionTask {
logger.info("Stubs output dir [${getStubsOutputDir()}")
Task copyContractsTask = project.getTasksByName(SpringCloudContractVerifierGradlePlugin.COPY_CONTRACTS_TASK_NAME, false).first()
ContractVerifierConfigProperties props = props(copyContractsTask)
- File contractsDslDir = contractsDslDir(copyContractsTask, props)
logger.info("Spring Cloud Contract Verifier Plugin: Invoking DSL to client stubs conversion")
- props.contractsDslDir = contractsDslDir
+ props.contractsDslDir = getContractsDslDir()
props.includedContracts = ".*"
File outMappingsDir = OutputFolderBuilder.outputMappingsDir(project, getStubsOutputDir())
logger.info("Contracts dir is [${contractsDslDir}] output stubs dir is [${outMappingsDir}]")
@@ -55,6 +60,15 @@ class GenerateClientStubsFromDslTask extends ConventionTask {
converter.processFiles()
}
+ private File getContractsDslDir() {
+ Task copyContractsTask = project.getTasksByName(SpringCloudContractVerifierGradlePlugin.COPY_CONTRACTS_TASK_NAME, false).first()
+ ContractVerifierConfigProperties props = props(copyContractsTask)
+ if (logger.isDebugEnabled()) {
+ logger.debug("Config props [" + props + "]")
+ }
+ return contractsDslDir(copyContractsTask, props)
+ }
+
@CompileDynamic
private ContractVerifierConfigProperties props(Task task) {
try {
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateServerTestsTask.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateServerTestsTask.groovy
index ff0f13633b..c5af500337 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateServerTestsTask.groovy
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/GenerateServerTestsTask.groovy
@@ -18,16 +18,16 @@ package org.springframework.cloud.contract.verifier.plugin
import groovy.transform.CompileDynamic
import groovy.transform.CompileStatic
+import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.Task
-import org.gradle.api.internal.ConventionTask
+import org.gradle.api.tasks.InputDirectory
+import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
-import org.springframework.cloud.contract.spec.Contract
import org.springframework.cloud.contract.spec.ContractVerifierException
import org.springframework.cloud.contract.verifier.TestGenerator
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
-import org.springframework.cloud.contract.verifier.config.TestFramework
import static org.springframework.cloud.contract.verifier.plugin.SpringCloudContractVerifierGradlePlugin.COPY_CONTRACTS_TASK_NAME
@@ -37,20 +37,22 @@ import static org.springframework.cloud.contract.verifier.plugin.SpringCloudCont
* @since 1.0.0
*/
@CompileStatic
-class GenerateServerTestsTask extends ConventionTask {
+class GenerateServerTestsTask extends DefaultTask {
+ @InputDirectory
+ File contractsDslDir
+
+ @OutputDirectory
File generatedTestSourcesDir
- //TODO: How to deal with @Input*, @Output* and that domain object?
ContractVerifierExtension configProperties
GradleContractsDownloader downloader
@TaskAction
void generate() {
logger.info("Generated test sources dir [${getGeneratedTestSourcesDir()}]")
- Task copyContractsTask = project.getTasksByName(COPY_CONTRACTS_TASK_NAME, false).first()
- ContractVerifierConfigProperties props = props(copyContractsTask)
- File contractsDslDir = contractsDslDir(copyContractsTask, props)
+ ContractVerifierConfigProperties props = getProps()
+ File contractsDslDir = getContractsDslDir()
if (getConfigProperties().getContractDependency()) {
project.logger.debug("Updating the stubs locations for the case where we have a JAR with contracts")
props.contractsDslDir = contractsDslDir
@@ -59,9 +61,6 @@ class GenerateServerTestsTask extends ConventionTask {
project.logger.info("Spring Cloud Contract Verifier Plugin: Invoking test sources generation")
project.logger.info("Contracts are unpacked to [${contractsDslDir}]")
project.logger.info("Included contracts are [${props.includedContracts}]")
- def sourceSetType = getConfigProperties().getTestFramework() == TestFramework.SPOCK ?
- "groovy" : "java"
- applySourceSets(sourceSetType)
try {
props = props ?: ExtensionToProperties.fromExtension(getConfigProperties())
props.contractsDslDir = contractsDslDir
@@ -74,18 +73,9 @@ class GenerateServerTestsTask extends ConventionTask {
}
}
- @CompileDynamic
- private void applySourceSets(sourceSetType) {
- project.sourceSets.test."${sourceSetType}" {
- project.logger.
- info("Registering ${getConfigProperties().generatedTestSourcesDir} as test source directory")
- srcDir getConfigProperties().getGeneratedTestSourcesDir()
- }
- project.sourceSets.test.resources {
- project.logger.
- info("Registering ${getConfigProperties().generatedTestResourcesDir} as test resource directory")
- srcDir getConfigProperties().getGeneratedTestResourcesDir()
- }
+ private ContractVerifierConfigProperties getProps() {
+ Task copyContractsTask = project.getTasksByName(COPY_CONTRACTS_TASK_NAME, false).first()
+ return props(copyContractsTask)
}
@CompileDynamic
@@ -101,6 +91,12 @@ class GenerateServerTestsTask extends ConventionTask {
}
}
+ private File getContractsDslDir() {
+ Task copyContractsTask = project.getTasksByName(COPY_CONTRACTS_TASK_NAME, false).first()
+ ContractVerifierConfigProperties props = props(copyContractsTask)
+ return contractsDslDir(copyContractsTask, props)
+ }
+
@CompileDynamic
private File contractsDslDir(Task task, ContractVerifierConfigProperties props) {
try {
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/PublishStubsToScmTask.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/PublishStubsToScmTask.groovy
index 28d8308d41..f3b1abd8db 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/PublishStubsToScmTask.groovy
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/PublishStubsToScmTask.groovy
@@ -17,7 +17,8 @@
package org.springframework.cloud.contract.verifier.plugin
import groovy.transform.CompileStatic
-import org.gradle.api.internal.ConventionTask
+import org.gradle.api.DefaultTask
+import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.springframework.cloud.contract.stubrunner.ContractProjectUpdater
@@ -33,12 +34,17 @@ import org.springframework.cloud.contract.stubrunner.StubRunnerOptions
* @since 2.0.0
*/
@CompileStatic
-class PublishStubsToScmTask extends ConventionTask {
- File stubsOutputDir
- ContractVerifierExtension configProperties
- GradleContractsDownloader downloader
+class PublishStubsToScmTask extends DefaultTask {
+
private final ExtensionHolderSpec closureHolder = new ClosureHolder()
+ @OutputDirectory
+ File stubsOutputDir
+
+ ContractVerifierExtension configProperties
+
+ GradleContractsDownloader downloader
+
@TaskAction
void publishStubsToScm() {
ContractVerifierExtension clonedExtension = modifyExtension()
@@ -67,6 +73,12 @@ class PublishStubsToScmTask extends ConventionTask {
return true
}
+ /**
+ * This method can be used to perform additional customization of
+ * the {@link ContractVerifierExtension}.
+ *
+ * @param closure to customize the {@link ContractVerifierExtension}
+ */
void customize(@DelegatesTo(ContractVerifierExtension) Closure closure) {
project.logger.debug("Storing the extension closure")
this.closureHolder.extensionClosure = closure
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy
index 61c5e40d29..355f9309f5 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy
@@ -25,6 +25,9 @@ import org.gradle.api.plugins.GroovyPlugin
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin
import org.gradle.jvm.tasks.Jar
+
+import org.springframework.cloud.contract.verifier.config.TestFramework
+
/**
* Gradle plugin for Spring Cloud Contract Verifier that from the DSL contract can
*
@@ -63,9 +66,30 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin {
Task copyContracts = createAndConfigureCopyContractsTask(stubsJar, downloader, extension)
createAndConfigureMavenPublishPlugin(stubsJar, extension)
createGenerateTestsTask(extension, copyContracts, downloader)
- createAndConfigureGenerateClientStubs(extension, copyContracts)
+ createAndConfigureGenerateClientStubs(extension, copyContracts, downloader)
createAndConfigurePublishStubsToScmTask(extension, downloader)
addIdeaTestSources(project, extension)
+ applyDefaultSourceSets(extension)
+ }
+
+ private void applyDefaultSourceSets(ContractVerifierExtension extension) {
+ def sourceSetType = extension.getTestFramework() == TestFramework.SPOCK ?
+ "groovy" : "java"
+ applySourceSets(extension, sourceSetType)
+ }
+
+ @CompileDynamic
+ private void applySourceSets(ContractVerifierExtension extension, sourceSetType) {
+ project.sourceSets.test."${sourceSetType}" {
+ project.logger.
+ info("Registering ${extension.generatedTestSourcesDir} as test source directory")
+ srcDir extension.getGeneratedTestSourcesDir()
+ }
+ project.sourceSets.test.resources {
+ project.logger.
+ info("Registering ${extension.generatedTestResourcesDir} as test resource directory")
+ srcDir extension.getGeneratedTestResourcesDir()
+ }
}
@CompileDynamic
@@ -108,49 +132,46 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin {
@CompileDynamic
private void createGenerateTestsTask(ContractVerifierExtension extension, Task copyContracts,
GradleContractsDownloader gradleContractsDownloader) {
- Task task = project.tasks.create(GENERATE_SERVER_TESTS_TASK_NAME, GenerateServerTestsTask)
+ GenerateServerTestsTask task = project.tasks.create(GENERATE_SERVER_TESTS_TASK_NAME, GenerateServerTestsTask)
task.description = "Generate server tests from the contracts"
task.group = GROUP_NAME
- task.conventionMapping.with {
- downloader = { gradleContractsDownloader }
- generatedTestSourcesDir = { extension.generatedTestSourcesDir }
- configProperties = { extension }
+ task.with {
+ downloader = gradleContractsDownloader
+ generatedTestSourcesDir = extension.generatedTestSourcesDir
+ configProperties = extension
}
task.enabled = !project.gradle.startParameter.excludedTaskNames.contains("test")
task.dependsOn copyContracts
project.tasks.findByName("compileTestJava").dependsOn(task)
}
- @CompileDynamic
private void createAndConfigurePublishStubsToScmTask(ContractVerifierExtension extension,
GradleContractsDownloader gradleContractsDownloader) {
- Task task = project.tasks.create(PUBLISH_STUBS_TO_SCM_TASK_NAME, PublishStubsToScmTask)
+ PublishStubsToScmTask task = project.tasks.create(PUBLISH_STUBS_TO_SCM_TASK_NAME, PublishStubsToScmTask)
task.description = "The generated stubs get committed to the SCM repo and pushed to origin"
task.group = GROUP_NAME
- task.conventionMapping.with {
- downloader = { gradleContractsDownloader }
- configProperties = { extension }
- stubsOutputDir = { extension.stubsOutputDir }
+ task.with {
+ downloader = gradleContractsDownloader
+ configProperties = extension
+ stubsOutputDir = extension.stubsOutputDir
}
task.dependsOn DSL_TO_CLIENT_TASK_NAME
}
- @CompileDynamic
private Task createAndConfigureGenerateClientStubs(ContractVerifierExtension extension,
- Task copyContracts) {
- Task task = project.tasks.create(DSL_TO_CLIENT_TASK_NAME, GenerateClientStubsFromDslTask)
+ Task copyContracts, GradleContractsDownloader gradleContractsDownloader) {
+ GenerateClientStubsFromDslTask task = project.tasks.create(DSL_TO_CLIENT_TASK_NAME, GenerateClientStubsFromDslTask)
task.description = "Generate client stubs from the contracts"
task.group = GROUP_NAME
- task.conventionMapping.with {
- downloader = { gradleContractsDownloader }
- stubsOutputDir = { extension.stubsOutputDir }
- configProperties = { extension }
+ task.with {
+ downloader = gradleContractsDownloader
+ stubsOutputDir = extension.stubsOutputDir
+ configProperties = extension
}
task.dependsOn copyContracts
return task
}
- @CompileDynamic
private Task createAndConfigureStubsJarTasks(ContractVerifierExtension extension) {
Task task = stubsTask()
if (task) {
@@ -158,21 +179,31 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin {
return task
}
else {
- task = project.tasks.create(type: Jar, name: VERIFIER_STUBS_JAR_TASK_NAME,
- dependsOn: DSL_TO_CLIENT_TASK_NAME) {
- baseName = project.name
- classifier = extension.stubsSuffix
- from { extension.stubsOutputDir ?: project.file("${project.buildDir}/stubs") }
- }
+ task = createStubsJarTask(extension)
task.description = "Creates the stubs JAR task"
task.group = GROUP_NAME
- project.artifacts {
- archives task
- }
+ setArchives(task)
return task
}
}
+ @CompileDynamic
+ private Task createStubsJarTask(ContractVerifierExtension extension) {
+ return project.tasks.create(type: Jar, name: VERIFIER_STUBS_JAR_TASK_NAME,
+ dependsOn: DSL_TO_CLIENT_TASK_NAME) {
+ getArchiveBaseName().set(project.name)
+ getArchiveClassifier().set(extension.stubsSuffix)
+ from { extension.stubsOutputDir ?: project.file("${project.buildDir}/stubs") }
+ }
+ }
+
+ @CompileDynamic
+ private void setArchives(Task task) {
+ project.artifacts {
+ archives task
+ }
+ }
+
private Task stubsTask() {
try {
return project.tasks.getByName(VERIFIER_STUBS_JAR_TASK_NAME)
@@ -182,22 +213,20 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin {
}
}
- @CompileDynamic
private Task createAndConfigureCopyContractsTask(Task stubs,
GradleContractsDownloader gradleContractsDownloader,
ContractVerifierExtension contractVerifierExtension) {
- Task task = project.tasks.create(COPY_CONTRACTS_TASK_NAME, ContractsCopyTask)
+ ContractsCopyTask task = project.tasks.create(COPY_CONTRACTS_TASK_NAME, ContractsCopyTask)
task.description = "Copies contracts to the output folder"
task.group = GROUP_NAME
- task.conventionMapping.with {
- downloader = { gradleContractsDownloader }
- extension = { contractVerifierExtension }
+ task.with {
+ downloader = gradleContractsDownloader
+ extension = contractVerifierExtension
}
stubs.dependsOn task
return task
}
- @CompileDynamic
private void createAndConfigureMavenPublishPlugin(Task stubsTask, ContractVerifierExtension extension) {
if (!classIsOnClasspath("org.gradle.api.publish.maven.plugins.MavenPublishPlugin")) {
project.logger.debug("Maven Publish Plugin is not present - won't add default publication")
@@ -213,12 +242,7 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin {
def publishingExtension = project.extensions.findByName('publishing')
if (!hasPublication(publishingExtension)) {
project.logger.debug("Spring Cloud Contract Verifier Plugin: Stubs publication is not present - will create one")
- publishingExtension.publications {
- stubs(MavenPublication) {
- artifactId "${project.name}"
- artifact stubsTask
- }
- }
+ setPublications(publishingExtension, stubsTask)
}
else {
project.logger.info("Spring Cloud Contract Verifier Plugin: Stubs publication was present - won't create a new one. Remember about passing stubs as artifact")
@@ -227,6 +251,16 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin {
}
}
+ @CompileDynamic
+ private void setPublications(def publishingExtension, Task stubsTask) {
+ publishingExtension.publications {
+ stubs(MavenPublication) {
+ artifactId "${project.name}"
+ artifact stubsTask
+ }
+ }
+ }
+
@CompileDynamic
private boolean hasPublication(def publishingExtension) {
try {
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/SampleProjectSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/SampleProjectSpec.groovy
index 552fe5173f..d59cb7b6e8 100755
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/SampleProjectSpec.groovy
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/SampleProjectSpec.groovy
@@ -19,6 +19,8 @@ package org.springframework.cloud.contract.verifier.plugin
import org.junit.Ignore
import spock.lang.Stepwise
+import static org.gradle.testkit.runner.TaskOutcome.UP_TO_DATE
+
@Stepwise
@Ignore
class SampleProjectSpec extends ContractVerifierIntegrationSpec {
@@ -32,22 +34,33 @@ class SampleProjectSpec extends ContractVerifierIntegrationSpec {
def "should pass basic flow for Spock"() {
given:
assert fileExists('build.gradle')
- expect:
+ when:
String[] args = ["check", "publishToMavenLocal", "--debug"] as String[]
if (WORK_OFFLINE) {
args << "--offline"
}
runTasksSuccessfully(args)
+ then:
jarContainsContractVerifierContracts('fraudDetectionService/build/libs')
+ when: "running generation without change inputs"
+ def secondExecutionResult = runTasksSuccessfully()
+ then: "tasks should be up-to-date"
+ validateTasksOutcome(secondExecutionResult, UP_TO_DATE, 'generateClientStubs', 'generateContractTests', 'copyContracts')
+
}
def "should pass basic flow for JUnit"() {
given:
switchToJunitTestFramework()
assert fileExists('build.gradle')
- expect:
+ when:
runTasksSuccessfully(checkAndPublishToMavenLocal())
+ then:
jarContainsContractVerifierContracts('fraudDetectionService/build/libs')
+ when: "running generation without change inputs"
+ def secondExecutionResult = runTasksSuccessfully()
+ then: "tasks should be up-to-date"
+ validateTasksOutcome(secondExecutionResult, UP_TO_DATE, 'generateClientStubs', 'generateContractTests', 'copyContracts')
}
}
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle
index 0b1c78981f..9d6e180da1 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle
@@ -43,6 +43,7 @@ subprojects {
sourceCompatibility = 1.8
targetCompatibility = 1.8
+ version = "1.0.0"
repositories {
mavenCentral()
diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/config/ContractVerifierConfigProperties.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/config/ContractVerifierConfigProperties.java
index 3693d49a62..e05edd65be 100644
--- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/config/ContractVerifierConfigProperties.java
+++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/config/ContractVerifierConfigProperties.java
@@ -18,8 +18,10 @@ package org.springframework.cloud.contract.verifier.config;
import java.io.File;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import java.util.StringJoiner;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -366,4 +368,33 @@ public class ContractVerifierConfigProperties {
this.excludeBuildFolders = excludeBuildFolders;
}
+ @Override
+ public String toString() {
+ return new StringJoiner(", ",
+ ContractVerifierConfigProperties.class.getSimpleName() + "[", "]")
+ .add("targetFramework=" + targetFramework)
+ .add("testFramework=" + testFramework).add("testMode=" + testMode)
+ .add("basePackageForTests='" + basePackageForTests + "'")
+ .add("baseClassForTests='" + baseClassForTests + "'")
+ .add("nameSuffixForTests='" + nameSuffixForTests + "'")
+ .add("ruleClassForTests='" + ruleClassForTests + "'")
+ .add("excludedFiles=" + excludedFiles)
+ .add("includedFiles=" + includedFiles)
+ .add("ignoredFiles=" + ignoredFiles)
+ .add("imports=" + Arrays.toString(imports))
+ .add("staticImports=" + Arrays.toString(staticImports))
+ .add("contractsDslDir=" + contractsDslDir)
+ .add("generatedTestSourcesDir=" + generatedTestSourcesDir)
+ .add("generatedTestResourcesDir=" + generatedTestResourcesDir)
+ .add("stubsOutputDir=" + stubsOutputDir)
+ .add("stubsSuffix='" + stubsSuffix + "'")
+ .add("assertJsonSize=" + assertJsonSize)
+ .add("includedContracts='" + includedContracts + "'")
+ .add("includedRootFolderAntPattern='"
+ + includedRootFolderAntPattern + "'")
+ .add("packageWithBaseClasses='" + packageWithBaseClasses + "'")
+ .add("baseClassMappings=" + baseClassMappings)
+ .add("excludeBuildFolders=" + excludeBuildFolders).toString();
+ }
+
}