diff --git a/README.adoc b/README.adoc index 075d26c24f..270a5767a7 100644 --- a/README.adoc +++ b/README.adoc @@ -1109,7 +1109,7 @@ Example of a `pom.xml` inside the `server` folder. org.springframework.boot spring-boot-starter-parent - 1.5.4.BUILD-SNAPSHOT + 1.5.4.RELEASE diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunner.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunner.java index 7cf08453e8..4c590de9ee 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunner.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunner.java @@ -40,12 +40,6 @@ public class StubRunner implements StubRunning { private final StubRunnerOptions stubRunnerOptions; private final StubRunnerExecutor localStubRunner; - @Deprecated - StubRunner(Arguments arguments) { - this(arguments.getStubRunnerOptions(), arguments.getRepositoryPath(), - arguments.getStub()); - } - public StubRunner(StubRunnerOptions stubRunnerOptions, String repositoryPath, StubConfiguration stubsConfiguration) { this(stubRunnerOptions, repositoryPath, stubsConfiguration, diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerOptionsBuilder.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerOptionsBuilder.java index 53fc990c5e..c7b6c8b6b3 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerOptionsBuilder.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerOptionsBuilder.java @@ -100,14 +100,6 @@ public class StubRunnerOptionsBuilder { return this; } - /** - * @deprecated there is no context path for the stub server - */ - @Deprecated - public StubRunnerOptionsBuilder withContextPath(String contextPath) { - return this; - } - public StubRunnerOptionsBuilder withOptions(StubRunnerOptions options) { this.minPortValue = options.minPortValue; this.maxPortValue = options.maxPortValue; diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/StubRunnerSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/StubRunnerSpec.groovy index 35b77372d3..7d2a238a0f 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/StubRunnerSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/StubRunnerSpec.groovy @@ -26,7 +26,9 @@ class StubRunnerSpec extends Specification { def 'should provide stub URL for provided groupid and artifactId'() { given: - StubRunner runner = new StubRunner(argumentsWithProjectDefinition()) + Arguments args = argumentsWithProjectDefinition() + StubRunner runner = new StubRunner(args.stubRunnerOptions, + args.repositoryPath, args.stub) when: runner.runStubs() then: @@ -37,7 +39,9 @@ class StubRunnerSpec extends Specification { def 'should provide stub URL if only artifactId was passed'() { given: - StubRunner runner = new StubRunner(argumentsWithProjectDefinition()) + Arguments args = argumentsWithProjectDefinition() + StubRunner runner = new StubRunner(args.stubRunnerOptions, + args.repositoryPath, args.stub) when: runner.runStubs() then: diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/converter/SingleFileConverter.groovy b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/converter/SingleFileConverter.groovy deleted file mode 100644 index c63cfd9018..0000000000 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/converter/SingleFileConverter.groovy +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2013-2017 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 - * - * http://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.converter - -import groovy.transform.CompileStatic -import org.springframework.cloud.contract.spec.Contract -import org.springframework.cloud.contract.verifier.file.ContractMetadata - -/** - * Converts contracts into their stub representation. - * - * @since 1.0.0 - * @deprecated use {@link StubGenerator} - */ -@CompileStatic -@Deprecated -interface SingleFileConverter { - - /** - * Returns {@code true} if the converter can handle the file to convert it into a stub. - */ - boolean canHandleFileName(String fileName) - - /** - * Returns the content of the converted file. The content will be a single stub. - */ - @Deprecated - String convertContent(String rootName, ContractMetadata content) - - /** - * Returns the collection of converted contracts into stubs. One contract can - * result in multiple stubs. - */ - Map convertContents(String rootName, ContractMetadata content) - - /** - * Returns the name of the converted stub file. If you have multiple contracts - * in a single file then a prefix will be added to the generated file. If you - * provide the {@link Contract#name} field then that field will override the - * generated file name. - * - * Example: name of file with 2 contracts is {@code foo.groovy}, it will be - * converted by the implementation to {@code foo.json}. The recursive file - * converter will create two files {@code 0_foo.json} and {@code 1_foo.json} - */ - String generateOutputFileNameForInput(String inputFileName) -} \ No newline at end of file diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverter.groovy b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverter.groovy index 6f46113bbb..474c3cc3e4 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverter.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverter.groovy @@ -32,12 +32,6 @@ import java.nio.charset.StandardCharsets @CompileStatic class DslToWireMockClientConverter extends DslToWireMockConverter { - @Deprecated - String convertContent(String rootName, ContractMetadata contract) { - return convertASingleContract(rootName, contract, contract.convertedContract.first() ?: createGroovyDSLFromStringContent( - contract.path.getText(StandardCharsets.UTF_8.toString())).first()) - } - private String convertASingleContract(String rootName, ContractMetadata contract, Contract dsl) { return new WireMockStubStrategy(rootName, contract, dsl).toWireMockClientStub() } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/RecursiveFilesConverter.groovy b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/RecursiveFilesConverter.groovy deleted file mode 100644 index 1974030fa7..0000000000 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/groovy/org/springframework/cloud/contract/verifier/wiremock/RecursiveFilesConverter.groovy +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright 2013-2017 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 - * - * http://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.wiremock - -import com.google.common.collect.ListMultimap -import groovy.transform.CompileStatic -import groovy.util.logging.Slf4j -import org.springframework.cloud.contract.spec.Contract -import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties -import org.springframework.cloud.contract.verifier.converter.ConversionContractVerifierException -import org.springframework.cloud.contract.verifier.converter.SingleFileConverter -import org.springframework.cloud.contract.verifier.converter.StubGenerator -import org.springframework.cloud.contract.verifier.converter.StubGeneratorProvider -import org.springframework.cloud.contract.verifier.file.ContractFileScanner -import org.springframework.cloud.contract.verifier.file.ContractMetadata -import org.springframework.cloud.contract.verifier.util.NamesUtil - -import java.nio.charset.StandardCharsets -import java.nio.file.Files -import java.nio.file.Path -import java.nio.file.Paths - -/** - * Recursively converts contracts into their stub representations - * - * @since 1.0.0 - * @deprecated use {@link org.springframework.cloud.contract.verifier.converter.RecursiveFilesConverter} - */ -@Slf4j -@CompileStatic -@Deprecated -class RecursiveFilesConverter { - - private final StubGeneratorProvider holder - private final ContractVerifierConfigProperties properties - private final File outMappingsDir - - RecursiveFilesConverter(ContractVerifierConfigProperties properties, StubGeneratorProvider holder = null) { - this.properties = properties - this.outMappingsDir = properties.stubsOutputDir - this.holder = holder ?: new StubGeneratorProvider() - } - - RecursiveFilesConverter(ContractVerifierConfigProperties properties, File outMappingsDir, StubGeneratorProvider holder = null) { - this.properties = properties - this.outMappingsDir = outMappingsDir - this.holder = holder ?: new StubGeneratorProvider() - } - - @Deprecated - RecursiveFilesConverter(SingleFileConverter singleFileConverter, ContractVerifierConfigProperties properties) { - this.properties = properties - this.outMappingsDir = properties.stubsOutputDir - this.holder = new StubGeneratorProvider() - } - - @Deprecated - RecursiveFilesConverter(SingleFileConverter singleFileConverter, ContractVerifierConfigProperties properties, File outMappingsDir) { - this.properties = properties - this.outMappingsDir = outMappingsDir - this.holder = new StubGeneratorProvider() - } - - void processFiles() { - ContractFileScanner scanner = new ContractFileScanner(properties.contractsDslDir, - properties.excludedFiles as Set, [] as Set, properties.includedContracts) - ListMultimap contracts = scanner.findContracts() - if (log.isDebugEnabled()) { - log.debug("Found the following contracts ${contracts}") - log.debug("Exclude build folder: [${properties.isExcludeBuildFolders()}]") - } - contracts.asMap().entrySet().each { entry -> - entry.value.each { ContractMetadata contract -> - File sourceFile = contract.path.toFile() - StubGenerator stubGenerator = holder.converterForName(sourceFile.name).first() - try { - String path = sourceFile.path - if (properties.isExcludeBuildFolders() && (matchesPath(path, "target") || matchesPath(path, "build"))) { - if (log.isDebugEnabled()) { - log.debug("Exclude build folder is set. Path [${path}] contains [target] or [build] in its path") - } - return - } - if (!contract.convertedContract && !stubGenerator) { - return - } - int contractsSize = contract.convertedContract.size() - Map convertedContent = stubGenerator.convertContents(entry.key.last().toString(), contract) - if (!convertedContent) { - return - } - convertedContent.entrySet().eachWithIndex { Map.Entry content, int index -> - Contract dsl = content.key - String converted = content.value - Path absoluteTargetPath = createAndReturnTargetDirectory(sourceFile) - File newJsonFile = createTargetFileWithProperName(stubGenerator, absoluteTargetPath, - sourceFile, contractsSize, index, dsl) - newJsonFile.setText(converted, StandardCharsets.UTF_8.toString()) - } - } catch (Exception e) { - throw new ConversionContractVerifierException("Unable to make conversion of ${sourceFile.name}", e) - } - } - } - } - - private boolean matchesPath(String path, String folder) { - return path.matches("^.*${File.separator}${folder}${File.separator}.*\$") - } - - private Path createAndReturnTargetDirectory(File sourceFile) { - Path relativePath = Paths.get(properties.contractsDslDir.toURI()).relativize(sourceFile.parentFile.toPath()) - Path absoluteTargetPath = outMappingsDir.toPath().resolve(relativePath) - Files.createDirectories(absoluteTargetPath) - return absoluteTargetPath - } - - private File createTargetFileWithProperName(StubGenerator stubGenerator, Path absoluteTargetPath, - File sourceFile, int contractsSize, int index, Contract dsl) { - String name = generateName(dsl, contractsSize, stubGenerator, sourceFile, index) - File newJsonFile = new File(absoluteTargetPath.toFile(), name) - log.info("Creating new stub [$newJsonFile.path]") - return newJsonFile - } - - private String generateName(Contract dsl, int contractsSize, StubGenerator converter, - File sourceFile, int index) { - String generatedName = converter.generateOutputFileNameForInput(sourceFile.name) - String extension = NamesUtil.afterLastDot(generatedName) - if (dsl.name) { - return "${dsl.name}.${extension}" - } else if (contractsSize == 1) { - return generatedName - } - return "${index}_${generatedName}" - } -} diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverterSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverterSpec.groovy index 46e94b222f..f848ad78bd 100755 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverterSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverterSpec.groovy @@ -27,6 +27,7 @@ import org.springframework.boot.test.web.client.TestRestTemplate import org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockStubMapping import org.springframework.cloud.contract.spec.Contract import org.springframework.cloud.contract.verifier.file.ContractMetadata +import org.springframework.cloud.contract.verifier.util.ContractVerifierDslConverter import org.springframework.http.RequestEntity import org.springframework.util.SocketUtils import spock.lang.Issue @@ -63,7 +64,8 @@ class DslToWireMockClientConverterSpec extends Specification { } """) when: - String json = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null)).values().first() + String json = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))).values().first() then: JSONAssert.assertEquals(''' {"request":{"method":"PUT","urlPattern":"/[0-9]{2}"},"response":{"status":200}} @@ -98,7 +100,8 @@ class DslToWireMockClientConverterSpec extends Specification { } ''') when: - Map convertedContents = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null)) + Map convertedContents = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))) then: convertedContents.size() == 2 JSONAssert.assertEquals(jsonResponse(1), convertedContents.values().first(), false) @@ -137,7 +140,9 @@ class DslToWireMockClientConverterSpec extends Specification { } ''') when: - Map convertedContents = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null)) + Map convertedContents = converter.convertContents("Test", + new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))) then: convertedContents.isEmpty() } @@ -161,7 +166,8 @@ class DslToWireMockClientConverterSpec extends Specification { } """) when: - String json = converter.convertContents("test", new ContractMetadata(file.toPath(), false, 0, null)).values().first() + String json = converter.convertContents("test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))).values().first() then: JSONAssert.assertEquals(''' {"request":{ @@ -229,7 +235,8 @@ class DslToWireMockClientConverterSpec extends Specification { } """) when: - String json = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null)).values().first() + String json = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))).values().first() then: JSONAssert.assertEquals(''' { @@ -346,7 +353,8 @@ class DslToWireMockClientConverterSpec extends Specification { } """) when: - String json = converter.convertContents("test", new ContractMetadata(file.toPath(), false, 0, null)).values().first() + String json = converter.convertContents("test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))).values().first() then: JSONAssert.assertEquals(''' {"request":{"urlPath":"/foos","method":"GET"},"response":{"body":"[{\\"id\\":\\"123\\"},{\\"id\\":\\"567\\"}]"}} @@ -384,7 +392,8 @@ class DslToWireMockClientConverterSpec extends Specification { } """) when: - String json = converter.convertContents("test", new ContractMetadata(file.toPath(), false, 0, null)).values().first() + String json = converter.convertContents("test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))).values().first() then: noExceptionThrown() and: @@ -430,7 +439,8 @@ class DslToWireMockClientConverterSpec extends Specification { } ''') when: - String json = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null)).values().first() + String json = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))).values().first() then: JSONAssert.assertEquals( // tag::wiremock[] ''' @@ -584,7 +594,8 @@ class DslToWireMockClientConverterSpec extends Specification { } ''') when: - String json = converter.convertContent("Test", new ContractMetadata(file.toPath(), false, 0, null)) + String json = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))).values().first() then: JSONAssert.assertEquals(//tag::matchers[] ''' @@ -737,7 +748,8 @@ class DslToWireMockClientConverterSpec extends Specification { } ''') when: - String json = converter.convertContent("Test", new ContractMetadata(file.toPath(), false, 0, null)) + String json = converter.convertContents("Test", new ContractMetadata(file.toPath(), false, 0, null, + ContractVerifierDslConverter.convertAsCollection(file))).values().first() then: JSONAssert.assertEquals( ''' diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverterSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverterSpec.groovy index 5371016d6f..0c6d6f3c2c 100755 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverterSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverterSpec.groovy @@ -88,12 +88,12 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - def a = ContractVerifierDslConverter.convert( + def a = ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl }""") def b = expectedGroovyDsl - a == b + a.first() == b } @@ -143,12 +143,12 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - def a = ContractVerifierDslConverter.convert( + def a = ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl }""") def b = expectedGroovyDsl - (a.request.url.clientValue as Pattern).pattern() == (b.request.url.clientValue as Pattern).pattern() + (a.first().request.url.clientValue as Pattern).pattern() == (b.request.url.clientValue as Pattern).pattern() } def 'should convert WireMock stub with response body containing integer'() { @@ -196,10 +196,10 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - ContractVerifierDslConverter.convert( + ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl - }""") == expectedGroovyDsl + }""").first() == expectedGroovyDsl } def 'should convert WireMock stub with response body as a list'() { @@ -253,10 +253,10 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - ContractVerifierDslConverter.convert( + ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl - }""") == expectedGroovyDsl + }""").first() == expectedGroovyDsl } def 'should convert WireMock stub with response body containing a nested list'() { @@ -318,10 +318,10 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - ContractVerifierDslConverter.convert( + ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl - }""") == expectedGroovyDsl + }""").first() == expectedGroovyDsl } def 'should convert WireMock stub with request body checking equality to Json'() { @@ -356,10 +356,10 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convert( + Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl - }""") + }""").first() and: evaluatedGroovyDsl == expectedGroovyDsl } @@ -396,10 +396,10 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convert( + Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl - }""") + }""").first() and: (evaluatedGroovyDsl.request.body.clientValue as Pattern).pattern() == (expectedGroovyDsl.request.body.clientValue as Pattern).pattern() } @@ -437,10 +437,10 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convert( + Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl - }""") + }""").first() and: evaluatedGroovyDsl == expectedGroovyDsl } @@ -477,10 +477,10 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convert( + Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl - }""") + }""").first() and: evaluatedGroovyDsl == expectedGroovyDsl } @@ -517,10 +517,10 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convert( + Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl - }""") + }""").first() and: (evaluatedGroovyDsl.request.body.clientValue as Pattern).pattern() == (expectedGroovyDsl.request.body.clientValue as Pattern).pattern() } @@ -555,10 +555,10 @@ class WireMockToDslConverterSpec extends Specification { when: String groovyDsl = WireMockToDslConverter.fromWireMockStub(wireMockStub) then: - Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convert( + Contract evaluatedGroovyDsl = ContractVerifierDslConverter.convertAsCollection( """org.springframework.cloud.contract.spec.Contract.make { $groovyDsl - }""") + }""").first() and: evaluatedGroovyDsl == expectedGroovyDsl } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/WiremockScenarioConverterSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/WiremockScenarioConverterSpec.groovy index 9b0ebef7fa..40636a5adb 100755 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/WiremockScenarioConverterSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/WiremockScenarioConverterSpec.groovy @@ -17,6 +17,7 @@ package org.springframework.cloud.contract.verifier.wiremock import org.springframework.cloud.contract.verifier.file.ContractMetadata +import org.springframework.cloud.contract.verifier.util.ContractVerifierDslConverter import spock.lang.Specification import java.nio.file.Path @@ -29,7 +30,8 @@ class WiremockScenarioConverterSpec extends Specification { DslToWireMockClientConverter converter = new DslToWireMockClientConverter() Path dsl = Paths.get(this.getClass().getResource("/converter/scenario/main_scenario/01_login.groovy").toURI()) when: - String content = converter.convertContents("Test", new ContractMetadata(dsl, false, 3, 0)).values().first() + String content = converter.convertContents("Test", new ContractMetadata(dsl, false, 3, 0, + ContractVerifierDslConverter.convertAsCollection(dsl.toFile()))).values().first() then: content.contains('"requiredScenarioState" : "Started"') content.contains('"newScenarioState" : "Step1"') @@ -41,7 +43,8 @@ class WiremockScenarioConverterSpec extends Specification { DslToWireMockClientConverter converter = new DslToWireMockClientConverter() Path dsl = Paths.get(this.getClass().getResource("/converter/scenario/main_scenario/02_showCart.groovy").toURI()) when: - String content = converter.convertContents("Test", new ContractMetadata(dsl, false, 3, 1)).values().first() + String content = converter.convertContents("Test", new ContractMetadata(dsl, false, 3, 1, + ContractVerifierDslConverter.convertAsCollection(dsl.toFile()))).values().first() then: content.contains('"requiredScenarioState" : "Step1"') content.contains('"newScenarioState" : "Step2"') @@ -53,7 +56,8 @@ class WiremockScenarioConverterSpec extends Specification { DslToWireMockClientConverter converter = new DslToWireMockClientConverter() Path dsl = Paths.get(this.getClass().getResource("/converter/scenario/main_scenario/03_logout.groovy").toURI()) when: - String content = converter.convertContents("Test", new ContractMetadata(dsl, false, 3, 2)).values().first() + String content = converter.convertContents("Test", new ContractMetadata(dsl, false, 3, 2, + ContractVerifierDslConverter.convertAsCollection(dsl.toFile()))).values().first() then: content.contains('"requiredScenarioState" : "Step2"') !content.contains('"newScenarioState"') diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/pom.xml index defb32fa49..7c8d1ac407 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/pom.xml @@ -142,6 +142,11 @@ asciidoctor-maven-plugin 1.5.3 + + commons-lang + commons-lang + 2.6 + diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy index 9d31fcff7c..d812f14f4f 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilder.groovy @@ -302,16 +302,6 @@ abstract class MethodBodyBuilder { bb.unindent() } - /** - * Builds the response body verification part. The code will differ depending on the - * ContentType, type of response etc. The result will be appended to {@link BlockBuilder} - * @deprecated - use {@link MethodBodyBuilder#validateResponseBodyBlock(org.springframework.cloud.contract.verifier.builder.BlockBuilder, org.springframework.cloud.contract.spec.internal.BodyMatchers, java.lang.Object)} - */ - @Deprecated - protected void validateResponseBodyBlock(BlockBuilder bb, Object responseBody) { - validateResponseBodyBlock(bb, null, responseBody) - } - /** * Builds the response body verification part. The code will differ depending on the * ContentType, type of response etc. The result will be appended to {@link BlockBuilder} 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 11bcc55b86..d666ccdd93 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 @@ -55,11 +55,6 @@ class ContractMetadata { */ final Collection convertedContract = [] - @Deprecated - ContractMetadata(Path path, boolean ignored, int groupSize, Integer order) { - this(path, ignored, groupSize, order, ContractVerifierDslConverter.convertAsCollection(path.toFile())) - } - ContractMetadata(Path path, boolean ignored, int groupSize, Integer order, Contract convertedContract) { this(path, ignored, groupSize, order, [convertedContract]) } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverter.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverter.groovy index e0300241f1..c1de53f32f 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverter.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverter.groovy @@ -32,26 +32,6 @@ import org.springframework.cloud.contract.spec.Contract @Slf4j class ContractVerifierDslConverter { - @Deprecated - static Contract convert(String dsl) { - try { - return groovyShell().evaluate(dsl) as Contract - } catch (Exception e) { - log.error("Exception occurred while trying to evaluate the contract", e) - throw new DslParseException(e) - } - } - - @Deprecated - static Contract convert(File dsl) { - try { - return groovyShell().evaluate(dsl) as Contract - } catch (Exception e) { - log.error("Exception occurred while trying to evaluate the contract", e) - throw new DslParseException(e) - } - } - static Collection convertAsCollection(String dsl) { try { Object object = groovyShell().evaluate(dsl) diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGeneratorSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGeneratorSpec.groovy index a93bbe6cc6..9d69643b11 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGeneratorSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGeneratorSpec.groovy @@ -22,6 +22,7 @@ import org.springframework.cloud.contract.verifier.TestGenerator import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties import org.springframework.cloud.contract.verifier.config.TestMode import org.springframework.cloud.contract.verifier.file.ContractMetadata +import org.springframework.cloud.contract.verifier.util.ContractVerifierDslConverter import org.springframework.cloud.contract.verifier.util.SyntaxChecker import org.springframework.util.StringUtils import spock.lang.Issue @@ -186,7 +187,8 @@ class SingleTestGeneratorSpec extends Specification { ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties() properties.targetFramework = testFramework properties.testMode = mode - ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, 2) + ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, 2, + ContractVerifierDslConverter.convertAsCollection(file) ) contract.ignored >> true contract.order >> 2 JavaTestGenerator testGenerator = new JavaTestGenerator(checker: new ClassPresenceChecker() { @@ -255,10 +257,12 @@ class SingleTestGeneratorSpec extends Specification { and: ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties() properties.targetFramework = testFramework - ContractMetadata contract = new ContractMetadata(file.toPath(), false, 1, null) + ContractMetadata contract = new ContractMetadata(file.toPath(), false, 1, null, + ContractVerifierDslConverter.convertAsCollection(file) ) contract.ignored >> false and: - ContractMetadata contract2 = new ContractMetadata(file2.toPath(), false, 1, null) + ContractMetadata contract2 = new ContractMetadata(file2.toPath(), false, 1, null, + ContractVerifierDslConverter.convertAsCollection(file2) ) contract2.ignored >> false and: JavaTestGenerator testGenerator = new JavaTestGenerator() @@ -440,7 +444,8 @@ class SingleTestGeneratorSpec extends Specification { properties.testMode = TestMode.EXPLICIT properties.baseClassForTests = "test.ContextPathTestingBaseClass" and: - ContractMetadata contract = new ContractMetadata(file.toPath(), false, 1, null) + ContractMetadata contract = new ContractMetadata(file.toPath(), false, 1, + null, ContractVerifierDslConverter.convertAsCollection(file)) and: SingleTestGenerator testGenerator = new JavaTestGenerator() when: diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverterSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverterSpec.groovy index f7980b63d9..371cd656e1 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverterSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/util/ContractVerifierDslConverterSpec.groovy @@ -69,20 +69,6 @@ class ContractVerifierDslConverterSpec extends Specification { } } - def "should convert file to a Contract"() { - when: - Contract contract = ContractVerifierDslConverter.convert(singleContract) - then: - contract == expectedSingleContract - } - - def "should throw exception when invalid file is parsed"() { - when: - ContractVerifierDslConverter.convert(invalidContract) - then: - thrown(DslParseException) - } - def "should convert file to a list of Contracts"() { when: List contract = ContractVerifierDslConverter.convertAsCollection(multipleContracts) @@ -90,20 +76,6 @@ class ContractVerifierDslConverterSpec extends Specification { contract == expectedMultipleContracts } - def "should throw exception when invalid text is parsed"() { - when: - ContractVerifierDslConverter.convert(invalidContract.text) - then: - thrown(DslParseException) - } - - def "should convert text to a Contract"() { - when: - Contract contract = ContractVerifierDslConverter.convert(singleContract.text) - then: - contract == expectedSingleContract - } - def "should convert text to a list of Contracts"() { when: Collection contract = ContractVerifierDslConverter.convertAsCollection(multipleContracts.text) diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/SpringBootHttpServerFactory.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/SpringBootHttpServerFactory.java index 03d655b972..8629c7daa2 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/SpringBootHttpServerFactory.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/SpringBootHttpServerFactory.java @@ -44,10 +44,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.Banner.Mode; -import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration; +import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration; import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration.BeanPostProcessorsRegistrar; diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippetTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippetTests.java index 0006f6c5b5..f60ddc9510 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippetTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippetTests.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -81,9 +82,8 @@ public class ContractDslSnippetTests { then(file("/contracts/index.groovy")).exists(); then(file("/index/dsl-contract.adoc")).exists(); - String contract = readFromFile(file("/contracts/index.groovy")); - // try to parse the contract - Contract parsedContract = ContractVerifierDslConverter.convert(contract); + Collection parsedContracts = ContractVerifierDslConverter.convertAsCollection(file("/contracts/index.groovy")); + Contract parsedContract = parsedContracts.iterator().next(); then(parsedContract.getRequest().getHeaders().getEntries()).isNotNull(); then(headerNames(parsedContract.getRequest().getHeaders().getEntries())).doesNotContain (HttpHeaders.HOST, HttpHeaders.CONTENT_LENGTH); @@ -105,9 +105,8 @@ public class ContractDslSnippetTests { then(file("/contracts/empty.groovy")).exists(); then(file("/empty/dsl-contract.adoc")).exists(); - String contract = readFromFile(file("/contracts/empty.groovy")); - // try to parse the contract - Contract parsedContract = ContractVerifierDslConverter.convert(contract); + Collection parsedContracts = ContractVerifierDslConverter.convertAsCollection(file("/contracts/empty.groovy")); + Contract parsedContract = parsedContracts.iterator().next(); then(parsedContract.getRequest().getHeaders()).isNull(); then(parsedContract.getRequest().getMethod().getClientValue()).isNotNull(); then(parsedContract.getRequest().getUrl().getClientValue()).isNotNull(); @@ -131,11 +130,6 @@ public class ContractDslSnippetTests { return new File(OUTPUT, name); } - private String readFromFile(File f) throws IOException { - byte[] encoded = Files.readAllBytes(f.toPath()); - return new String(encoded, StandardCharsets.UTF_8); - } - @Configuration @EnableAutoConfiguration @RestController