From 921b0e155b7d05315677ffb99f6ac313e8c01d95 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 24 Oct 2018 22:45:01 +0200 Subject: [PATCH] Added URL matchers for YAML; fixes gh-767 --- .../verifier/converter/YamlToContracts.groovy | 14 +++++++++++--- .../converter/YamlContractConverterSpec.groovy | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlToContracts.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlToContracts.groovy index 554ba0a2e3..802a50c637 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlToContracts.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlToContracts.groovy @@ -15,7 +15,6 @@ import org.yaml.snakeyaml.Yaml import java.nio.file.Files import java.util.regex.Pattern - /** * @author Marcin Grzejszczak */ @@ -63,7 +62,7 @@ class YamlToContracts { request { method(yamlContract.request?.method) if (yamlContract.request?.url) { - url(yamlContract.request?.url) { + url(urlValue(yamlContract.request?.url, yamlContract.request?.matchers?.url)) { if (yamlContract.request.queryParameters) { queryParameters { yamlContract.request.queryParameters.each { String key, Object value -> @@ -80,7 +79,7 @@ class YamlToContracts { } } if (yamlContract.request?.urlPath) { - urlPath(yamlContract.request?.urlPath) { + urlPath(urlValue(yamlContract.request?.urlPath, yamlContract.request?.matchers?.url)) { if (yamlContract.request.queryParameters) { queryParameters { yamlContract.request.queryParameters.each { String key, Object value -> @@ -408,6 +407,15 @@ class YamlToContracts { } } + protected DslProperty urlValue(String url, YamlContract.KeyValueMatcher urlMatcher) { + if (urlMatcher) { + return new DslProperty(urlMatcher.regex ? Pattern.compile(urlMatcher.regex) : + urlMatcher.command ? new ExecutionProperty(urlMatcher.command) : + urlMatcher.predefined ? predefinedToPattern(urlMatcher.predefined) : url, url) + } + return new DslProperty(url) + } + protected List convert(ObjectMapper mapper, Object o) { try { return Arrays.asList(mapper.convertValue(o, YamlContract[].class)) diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverterSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverterSpec.groovy index 84a11bef6c..f6936bbe82 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverterSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverterSpec.groovy @@ -189,6 +189,8 @@ class YamlContractConverterSpec extends Specification { RegexPatterns patterns = new RegexPatterns() contract.request.headers.entries.find { it.name == "Content-Type" && ((Pattern) it.clientValue).pattern == "application/json.*" && it.serverValue == "application/json" } + ((Pattern) contract.request.urlPath.clientValue).pattern() == "/get/[0-9]" + contract.request.urlPath.serverValue == "/get/1" contract.request.urlPath.queryParameters.parameters.size() == 8 QueryParameters queryParameters = contract.request.urlPath.queryParameters assertQueryParam(queryParameters, "limit", 10,