From 0a28d0848d34590dcc93f2431fbebb78c4487921 Mon Sep 17 00:00:00 2001 From: SvenBayer Date: Mon, 9 Jul 2018 08:52:19 +0200 Subject: [PATCH] Move YamlContractConverter list of available contract converters. (#684) Great pointer and great pull request. Thanks a lot! --- .../verifier/file/ContractFileScanner.groovy | 3 +- .../file/ContractFileScannerSpec.groovy | 38 +++++++++++++++++++ .../directory/with/custom/yml/custom.yml | 16 ++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 spring-cloud-contract-verifier/src/test/resources/directory/with/custom/yml/custom.yml diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScanner.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScanner.groovy index 8ca4be4e25..be2c4383ed 100755 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScanner.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScanner.groovy @@ -88,6 +88,7 @@ class ContractFileScanner { */ private void appendRecursively(File baseDir, ListMultimap result) { List converters = converters() + converters.add(YamlContractConverter.INSTANCE) if (log.isTraceEnabled()) { log.trace("Found the following contract converters ${converters}") } @@ -104,8 +105,6 @@ class ContractFileScanner { boolean included = includeMatcher ? file.absolutePath.matches(includeMatcher) : true if (contractFile && included) { addContractToTestGeneration(result, files, file, i, ContractVerifierDslConverter.convertAsCollection(baseDir, file)) - } else if (YamlContractConverter.INSTANCE.isAccepted(file) && included) { - addContractToTestGeneration(result, files, file, i, YamlContractConverter.INSTANCE.convertFrom(file)) } else if (!contractFile && included) { addContractToTestGeneration(converters, result, files, file, i) } else { diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScannerSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScannerSpec.groovy index d4ee0cdf48..08937ae415 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScannerSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/file/ContractFileScannerSpec.groovy @@ -108,4 +108,42 @@ class ContractFileScannerSpec extends Specification { result.entries().every { it.value.convertedContract } result.entries().find { it.value.convertedContract.any { it.request.method.clientValue == "PUT" } } } + + def "should prefer custom yaml converter over standard yaml converter"() { + given: + File baseDir = new File(this.getClass().getResource("/directory/with/custom/yml").toURI()) + ContractFileScanner scanner = new ContractFileScanner(baseDir, null, null) { + @Override + protected List converters() { + return [new ContractConverter() { + @Override + boolean isAccepted(File file) { + if (!file.name.endsWith(".yml") && !file.name.endsWith(".yaml")) { + return false + } + String line + file.withReader { + line = it.readLine() + } + return line != null && line.startsWith("custom_format: 1.0") + } + + @Override + Collection convertFrom(File file) { + return Collections.singleton(Contract.newInstance()) + } + + @Override + Object convertTo(Collection contract) { + return new Object() + } + }] + } + } + when: + ListMultimap result = scanner.findContracts() + then: + result.keySet().size() == 1 + result.entries().every { it.value.convertedContract } + } } diff --git a/spring-cloud-contract-verifier/src/test/resources/directory/with/custom/yml/custom.yml b/spring-cloud-contract-verifier/src/test/resources/directory/with/custom/yml/custom.yml new file mode 100644 index 0000000000..fce56b04db --- /dev/null +++ b/spring-cloud-contract-verifier/src/test/resources/directory/with/custom/yml/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