From 4aab1da0f729802d15aafc5049b57748d396cb54 Mon Sep 17 00:00:00 2001 From: SvenBayer Date: Wed, 11 Jul 2018 20:40:17 +0200 Subject: [PATCH] Move YamlContractConverter after available contract converters for producers (#687) * Move YamlContractConverter list of available contract converters. * Move available contract converters before YamlContractConverter --- .../contract/stubrunner/StubRepository.java | 4 +- .../stubrunner/StubRepositoryTest.java | 30 +++++++++++++ .../TestCustomYamlContractConverter.java | 42 +++++++++++++++++++ .../test/resources/META-INF/spring.factories | 4 +- .../customYamlRepository/contracts/custom.yml | 16 +++++++ 5 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/StubRepositoryTest.java create mode 100644 spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/TestCustomYamlContractConverter.java create mode 100644 spring-cloud-contract-stub-runner/src/test/resources/customYamlRepository/contracts/custom.yml diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRepository.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRepository.java index fcb87ab830..2065033d15 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRepository.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRepository.java @@ -169,10 +169,10 @@ class StubRepository { if (isContractDescriptor(file)) { contractDescriptors .addAll(ContractVerifierDslConverter.convertAsCollection(file.getParentFile(), file)); + } else if (converter != null && converter.isAccepted(file)) { + contractDescriptors.addAll(converter.convertFrom(file)); } else if (YamlContractConverter.INSTANCE.isAccepted(file)) { contractDescriptors.addAll(YamlContractConverter.INSTANCE.convertFrom(file)); - } else if (converter != null) { - contractDescriptors.addAll(converter.convertFrom(file)); } } return super.visitFile(path, attrs); diff --git a/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/StubRepositoryTest.java b/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/StubRepositoryTest.java new file mode 100644 index 0000000000..a17916b10c --- /dev/null +++ b/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/StubRepositoryTest.java @@ -0,0 +1,30 @@ +package org.springframework.cloud.contract.stubrunner; + +import org.junit.Test; +import org.springframework.cloud.contract.spec.Contract; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; + +import static org.junit.Assert.assertEquals; + +/** + * @author Sven Bayer + */ +public class StubRepositoryTest { + private static final File YAML_REPOSITORY_LOCATION = new File("src/test/resources/customYamlRepository"); + + @Test + public void should_prefer_custom_yaml_converter_over_standard() { + //given: + StubRepository repository = new StubRepository(YAML_REPOSITORY_LOCATION, new ArrayList<>(), new StubRunnerOptionsBuilder().build()); + int expectedDescriptorsSize = 1; + + //when: + Collection descriptors = repository.getContracts(); + + //then: + assertEquals(expectedDescriptorsSize, descriptors.size()); + } +} diff --git a/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/TestCustomYamlContractConverter.java b/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/TestCustomYamlContractConverter.java new file mode 100644 index 0000000000..65ce6e4f38 --- /dev/null +++ b/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/TestCustomYamlContractConverter.java @@ -0,0 +1,42 @@ +package org.springframework.cloud.contract.stubrunner; + +import groovy.lang.Closure; +import org.springframework.cloud.contract.spec.Contract; +import org.springframework.cloud.contract.spec.ContractConverter; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.Collection; +import java.util.Collections; +import java.util.Optional; + +/** + * @author Sven Bayer + */ +public class TestCustomYamlContractConverter implements ContractConverter { + + @Override + public boolean isAccepted(File file) { + if (!file.getName().endsWith(".yml") && !file.getName().endsWith(".yaml")) { + return false; + } + Optional line; + try { + line = Files.lines(file.toPath()).findFirst(); + } catch (IOException e) { + throw new IllegalStateException(e); + } + return line.isPresent() && line.get().startsWith("custom_format: 1.0"); + } + + @Override + public Collection convertFrom(File file) { + return Collections.singleton(Contract.make(Closure.IDENTITY)); + } + + @Override + public Object convertTo(Collection contract) { + return new Object(); + } +} \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/src/test/resources/META-INF/spring.factories b/spring-cloud-contract-stub-runner/src/test/resources/META-INF/spring.factories index b149be0c5b..7b88e22c0b 100644 --- a/spring-cloud-contract-stub-runner/src/test/resources/META-INF/spring.factories +++ b/spring-cloud-contract-stub-runner/src/test/resources/META-INF/spring.factories @@ -1,2 +1,4 @@ org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions=\ -org.springframework.cloud.contract.stubrunner.provider.wiremock.TestWireMockExtensions \ No newline at end of file +org.springframework.cloud.contract.stubrunner.provider.wiremock.TestWireMockExtensions +org.springframework.cloud.contract.spec.ContractConverter=\ +org.springframework.cloud.contract.stubrunner.TestCustomYamlContractConverter \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/src/test/resources/customYamlRepository/contracts/custom.yml b/spring-cloud-contract-stub-runner/src/test/resources/customYamlRepository/contracts/custom.yml new file mode 100644 index 0000000000..fce56b04db --- /dev/null +++ b/spring-cloud-contract-stub-runner/src/test/resources/customYamlRepository/contracts/custom.yml @@ -0,0 +1,16 @@ +custom_format: 1.0 +outbound: + request: + url: /foo + method: PUT + headers: + foo: bar + body: + foo: bar +inbound: + response: + status: 200 + headers: + foo2: bar + body: + foo2: bar \ No newline at end of file