From 1c1fb6f23a2eb55f9c374f1c0b585dd35b39c0cc Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Thu, 10 Dec 2020 13:01:54 +0100 Subject: [PATCH] Makes in progress contract tests disabled without this change all tests from a package were not generated if at least one was in progress with this change all tests are generated but those in progress are disabled / ignored fixes gh-1449 --- .../contract/verifier/TestGenerator.groovy | 10 ++++-- .../InProgressContractMethodPreProcessor.java | 33 ------------------- .../verifier/builder/JUnit4IgnoreImports.java | 7 ++-- .../builder/JUnit4IgnoreMethodAnnotation.java | 3 +- .../verifier/builder/JUnit5IgnoreImports.java | 7 ++-- .../builder/JUnit5IgnoreMethodAnnotation.java | 3 +- .../verifier/builder/SingleMethodBuilder.java | 7 ++-- .../verifier/builder/SpockIgnoreImports.java | 7 ++-- .../builder/SpockIgnoreMethodAnnotation.java | 3 +- .../verifier/file/ContractMetadata.groovy | 3 +- .../contract/verifier/TestGeneratorTests.java | 2 +- .../SpringTestMethodBodyBuildersSpec.groovy | 6 ++-- .../wiremock/WireMockConfiguration.java | 2 +- 13 files changed, 32 insertions(+), 61 deletions(-) delete mode 100644 spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/InProgressContractMethodPreProcessor.java 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 46eb71c7ad..a498294493 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 @@ -131,7 +131,7 @@ class TestGenerator { if (!inProgress.isEmpty() && configProperties.failOnInProgress) { throw new IllegalStateException("In progress contracts found in paths [" + inProgress.collect { it.key.toString() }.join(",") + "] and the switch [failOnInProgress] is set to [true]. Either unmark those contracts as in progress, or set the switch to [false].") } - processAllNotInProgress(contracts,basePackageName) + processAll(contracts, basePackageName) } @CompileDynamic @@ -142,9 +142,8 @@ class TestGenerator { @PackageScope @CompileDynamic - Set>> processAllNotInProgress(MultiValueMap contracts, String basePackageName) { + Set>> processAll(MultiValueMap contracts, String basePackageName) { contracts.entrySet() - .findAll { Map.Entry> entry -> !entry.value.any { it.anyInProgress() }} .each { Map.Entry> entry -> processIncludedDirectory( @@ -170,6 +169,7 @@ class TestGenerator { if (contracts.size()) { def className = afterLast(includedDirectoryRelativePath.toString(), File.separator) + resolveNameSuffix() def convertedClassName = convertIllegalPackageChars(className) + convertedClassName = ensureNameDoesNotStartWithNumber(convertedClassName) def packageName = buildPackage(basePackageNameForClass, includedDirectoryRelativePath) Path dir = saver.generateTestBaseDir(basePackageNameForClass, @@ -184,6 +184,10 @@ class TestGenerator { } } + private String ensureNameDoesNotStartWithNumber(String convertedClassName) { + return convertedClassName.matches("[0-9]+.*") ? ("_" + convertedClassName) : convertedClassName + } + private String resolveNameSuffix() { return configProperties.nameSuffixForTests ?: configProperties.testFramework.classNameSuffix } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/InProgressContractMethodPreProcessor.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/InProgressContractMethodPreProcessor.java deleted file mode 100644 index a6068d88f1..0000000000 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/InProgressContractMethodPreProcessor.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2013-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.contract.verifier.builder; - -import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; - -class InProgressContractMethodPreProcessor implements MethodPreProcessor { - - @Override - public boolean shouldContinue() { - return false; - } - - @Override - public boolean accept(SingleContractMetadata metadata) { - return metadata.isInProgress(); - } - -} diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreImports.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreImports.java index 269740cf07..981ef56ef1 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreImports.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreImports.java @@ -17,7 +17,6 @@ package org.springframework.cloud.contract.verifier.builder; import org.springframework.cloud.contract.verifier.config.TestFramework; -import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; class JUnit4IgnoreImports implements Imports { @@ -42,9 +41,9 @@ class JUnit4IgnoreImports implements Imports { return this.generatedClassMetaData.configProperties .getTestFramework() == TestFramework.JUNIT && this.generatedClassMetaData.listOfFiles.stream() - .anyMatch(metadata -> metadata.isIgnored() - || metadata.getConvertedContractWithMetadata().stream() - .anyMatch(SingleContractMetadata::isIgnored)); + .anyMatch(metadata -> metadata.isIgnored() || metadata + .getConvertedContractWithMetadata().stream() + .anyMatch(m -> m.isIgnored() || m.isInProgress())); } } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreMethodAnnotation.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreMethodAnnotation.java index 5c6075bfbc..4537aa7294 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreMethodAnnotation.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreMethodAnnotation.java @@ -47,7 +47,8 @@ class JUnit4IgnoreMethodAnnotation implements MethodAnnotations { return this.generatedClassMetaData.configProperties .getTestFramework() == TestFramework.JUNIT && (singleContractMetadata.getContractMetadata().isIgnored() - || singleContractMetadata.getContract().isIgnored()); + || singleContractMetadata.getContract().isIgnored() + || singleContractMetadata.getContract().isInProgress()); } } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreImports.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreImports.java index 42b603f8bc..d64e4275bd 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreImports.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreImports.java @@ -17,7 +17,6 @@ package org.springframework.cloud.contract.verifier.builder; import org.springframework.cloud.contract.verifier.config.TestFramework; -import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; class JUnit5IgnoreImports implements Imports { @@ -42,9 +41,9 @@ class JUnit5IgnoreImports implements Imports { return this.generatedClassMetaData.configProperties .getTestFramework() == TestFramework.JUNIT5 && this.generatedClassMetaData.listOfFiles.stream() - .anyMatch(metadata -> metadata.isIgnored() - || metadata.getConvertedContractWithMetadata().stream() - .anyMatch(SingleContractMetadata::isIgnored)); + .anyMatch(metadata -> metadata.isIgnored() || metadata + .getConvertedContractWithMetadata().stream() + .anyMatch(m -> m.isIgnored() || m.isInProgress())); } } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreMethodAnnotation.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreMethodAnnotation.java index fc08ce9b5f..e5da8e94b4 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreMethodAnnotation.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreMethodAnnotation.java @@ -47,7 +47,8 @@ class JUnit5IgnoreMethodAnnotation implements MethodAnnotations { return this.generatedClassMetaData.configProperties .getTestFramework() == TestFramework.JUNIT5 && (singleContractMetadata.getContractMetadata().isIgnored() - || singleContractMetadata.getContract().isIgnored()); + || singleContractMetadata.getContract().isIgnored() + || singleContractMetadata.getContract().isInProgress()); } } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java index 034d6f8c7f..6084995d94 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java @@ -93,7 +93,6 @@ class SingleMethodBuilder { SingleMethodBuilder restAssured() { return given( new JavaRestAssuredGiven(this.blockBuilder, this.generatedClassMetaData)) - .methodPreProcessor(new InProgressContractMethodPreProcessor()) .given(new SpockRestAssuredGiven(this.blockBuilder, this.generatedClassMetaData)) .when(new JavaRestAssuredWhen(this.blockBuilder, @@ -109,8 +108,7 @@ class SingleMethodBuilder { } SingleMethodBuilder jaxRs() { - return methodPreProcessor(new InProgressContractMethodPreProcessor()) - .given(new JaxRsGiven(this.generatedClassMetaData)) + return given(new JaxRsGiven(this.generatedClassMetaData)) .when(new JavaJaxRsWhen(this.blockBuilder, this.generatedClassMetaData)) .when(new SpockJaxRsWhen(this.blockBuilder, this.generatedClassMetaData)) .then(new JavaJaxRsThen(this.blockBuilder, this.generatedClassMetaData)) @@ -121,8 +119,7 @@ class SingleMethodBuilder { SingleMethodBuilder messaging() { // @formatter:off - return methodPreProcessor(new InProgressContractMethodPreProcessor()) - .given(new JavaMessagingGiven(this.blockBuilder, this.generatedClassMetaData)) + return given(new JavaMessagingGiven(this.blockBuilder, this.generatedClassMetaData)) .given(new SpockMessagingGiven(this.blockBuilder, this.generatedClassMetaData)) .when(new MessagingWhen(this.blockBuilder, this.generatedClassMetaData)) .then(new JavaMessagingWithBodyThen(this.blockBuilder, diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockIgnoreImports.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockIgnoreImports.java index 851e8b25f7..053973592e 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockIgnoreImports.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockIgnoreImports.java @@ -17,7 +17,6 @@ package org.springframework.cloud.contract.verifier.builder; import org.springframework.cloud.contract.verifier.config.TestFramework; -import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; class SpockIgnoreImports implements Imports { @@ -42,9 +41,9 @@ class SpockIgnoreImports implements Imports { return this.generatedClassMetaData.configProperties .getTestFramework() == TestFramework.SPOCK && this.generatedClassMetaData.listOfFiles.stream() - .anyMatch(metadata -> metadata.isIgnored() - || metadata.getConvertedContractWithMetadata().stream() - .anyMatch(SingleContractMetadata::isIgnored)); + .anyMatch(metadata -> metadata.isIgnored() || metadata + .getConvertedContractWithMetadata().stream() + .anyMatch(m -> m.isIgnored() || m.isInProgress())); } } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockIgnoreMethodAnnotation.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockIgnoreMethodAnnotation.java index bbd985dd5c..91d70b4cf3 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockIgnoreMethodAnnotation.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SpockIgnoreMethodAnnotation.java @@ -47,7 +47,8 @@ class SpockIgnoreMethodAnnotation implements MethodAnnotations { return this.generatedClassMetaData.configProperties .getTestFramework() == TestFramework.SPOCK && (singleContractMetadata.getContractMetadata().isIgnored() - || singleContractMetadata.getContract().isIgnored()); + || singleContractMetadata.getContract().isIgnored() + || singleContractMetadata.getContract().isInProgress()); } } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractMetadata.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractMetadata.groovy index 20eeb7a2c4..d0c69e8a5d 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractMetadata.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractMetadata.groovy @@ -40,6 +40,7 @@ import org.springframework.util.Assert * @since 1.0.0 */ @CompileStatic +@ToString(includes = ["path", "ignored", "order"]) class ContractMetadata { /** * Path to the file @@ -183,7 +184,7 @@ class SingleContractMetadata { } boolean isIgnored() { - return this.contract.ignored || this.contractMetadata.ignored + return this.contract.ignored || this.contract.inProgress || this.contractMetadata.ignored } boolean isXml() { diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/TestGeneratorTests.java b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/TestGeneratorTests.java index 38655e9ee1..9c5031dcac 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/TestGeneratorTests.java +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/TestGeneratorTests.java @@ -113,7 +113,7 @@ public class TestGeneratorTests { TestGenerator testGenerator = new TestGenerator(properties, singleTestGenerator, fileSaver, scanner) { @Override - Set>> processAllNotInProgress( + Set>> processAll( MultiValueMap contracts, String basePackageName) { return null; diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy index d9a1639071..316f19ebb9 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy @@ -3176,12 +3176,14 @@ DocumentContext parsedJson = JsonPath.parse(json); test.contains('''httpContractNotInProgress''') test.contains('''messagingContractNotInProgress''') and: - !test.contains('''httpContractInProgress''') - !test.contains('''messagingContractInProgress''') + test.contains('''httpContractInProgress''') + test.contains('''messagingContractInProgress''') + test.count("@Ignore") == 2 || test.count("@Disabled") == 2 || test.count("@Test(enabled = false)") == 2 where: methodBuilderName | methodBuilder "spock" | { properties.testFramework = TestFramework.SPOCK } "testng" | { properties.testFramework = TestFramework.TESTNG } + "junit5" | { properties.testFramework = TestFramework.JUNIT5 } "mockmvc" | { properties.testMode = TestMode.MOCKMVC } "jaxrs-spock" | { properties.testFramework = TestFramework.SPOCK; properties.testMode = TestMode.JAXRSCLIENT diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java index 6dec8a5220..a0e624df10 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java @@ -289,7 +289,7 @@ public class WireMockConfiguration implements SmartLifecycle { private int httpsPort() { return this.server.isRunning() && this.server.getOptions().httpsSettings().enabled() - ? this.server.httpsPort() : -1; + ? this.server.httpsPort() : -1; } @Override