diff --git a/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/HttpMethods.java b/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/HttpMethods.java index 1f5ebbcc6b..de0821abca 100644 --- a/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/HttpMethods.java +++ b/specs/spring-cloud-contract-spec-java/src/main/java/org/springframework/cloud/contract/spec/internal/HttpMethods.java @@ -76,8 +76,8 @@ public final class HttpMethods { public enum HttpMethod { - GET(HttpMethods.GET), HEAD(HttpMethods.HEAD), POST(HttpMethods.POST), PUT(HttpMethods.PUT), PATCH( - HttpMethods.PATCH), DELETE(HttpMethods.DELETE), OPTIONS(HttpMethods.OPTIONS), TRACE(HttpMethods.TRACE),; + GET(HttpMethods.GET), HEAD(HttpMethods.HEAD), POST(HttpMethods.POST), PUT(HttpMethods.PUT), + PATCH(HttpMethods.PATCH), DELETE(HttpMethods.DELETE), OPTIONS(HttpMethods.OPTIONS), TRACE(HttpMethods.TRACE),; private final String methodName; diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/AetherStubDownloader.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/AetherStubDownloader.java index ab10485791..57887bb438 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/AetherStubDownloader.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/AetherStubDownloader.java @@ -92,19 +92,19 @@ public class AetherStubDownloader implements StubDownloader { this.remoteRepos = remoteRepositories(stubRunnerOptions); boolean remoteReposMissing = remoteReposMissing(); switch (stubRunnerOptions.stubsMode) { - case LOCAL: - log.info("Remote repos not passed but the switch to work offline was set. " - + "Stubs will be used from your local Maven repository."); - break; - case REMOTE: - if (remoteReposMissing) { - throw new IllegalStateException( - "Remote repositories for stubs are not specified and work offline flag wasn't passed"); - } - break; - case CLASSPATH: - throw new UnsupportedOperationException( - "You can't use Aether downloader when you use classpath to find stubs"); + case LOCAL: + log.info("Remote repos not passed but the switch to work offline was set. " + + "Stubs will be used from your local Maven repository."); + break; + case REMOTE: + if (remoteReposMissing) { + throw new IllegalStateException( + "Remote repositories for stubs are not specified and work offline flag wasn't passed"); + } + break; + case CLASSPATH: + throw new UnsupportedOperationException( + "You can't use Aether downloader when you use classpath to find stubs"); } this.repositorySystem = newRepositorySystem(); this.workOffline = stubRunnerOptions.stubsMode == StubRunnerProperties.StubsMode.LOCAL; diff --git a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverter.java b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverter.java index 23677a5817..8aeb142ec9 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverter.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-converters/src/main/java/org/springframework/cloud/contract/verifier/wiremock/WireMockToDslConverter.java @@ -184,13 +184,13 @@ public class WireMockToDslConverter { private String buildHeader(String method, String value) { switch (method) { - case "equalTo": - return "'" + value + "'"; - case "contains": - String regex = "^.*" + value + ".*$"; - return "c(regex('" + escapeJava(regex) + "'))"; - default: - return "c(regex('" + escapeJava(value) + "'))"; + case "equalTo": + return "'" + value + "'"; + case "contains": + String regex = "^.*" + value + ".*$"; + return "c(regex('" + escapeJava(regex) + "'))"; + default: + return "c(regex('" + escapeJava(value) + "'))"; } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/MatchingRulesConverter.java b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/MatchingRulesConverter.java index f655129f20..75aaec0a0c 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/MatchingRulesConverter.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/MatchingRulesConverter.java @@ -53,52 +53,52 @@ final class MatchingRulesConverter { String key = getMatcherKey(b.path()); MatchingType matchingType = b.matchingType(); switch (matchingType) { - case NULL: - category.addRule(key, NullMatcher.INSTANCE); - break; - case EQUALITY: - category.addRule(key, EqualsMatcher.INSTANCE); - break; - case TYPE: - if (b.minTypeOccurrence() != null && b.maxTypeOccurrence() != null) { - category.addRule(key, new MinMaxTypeMatcher(b.minTypeOccurrence(), b.maxTypeOccurrence())); - } - else if (b.minTypeOccurrence() != null) { - category.addRule(key, new MinTypeMatcher(b.minTypeOccurrence())); - } - else if (b.maxTypeOccurrence() != null) { - category.addRule(key, new MaxTypeMatcher(b.maxTypeOccurrence())); - } - else { - category.addRule(key, TypeMatcher.INSTANCE); - } - break; - case DATE: - category.addRule(key, new DateMatcher()); - break; - case TIME: - category.addRule(key, new TimeMatcher()); - break; - case TIMESTAMP: - category.addRule(key, new TimestampMatcher()); - break; - case REGEX: - String pattern = b.value().toString(); - if (pattern.equals(RegexPatterns.number().pattern())) { - category.addRule(key, new NumberTypeMatcher(NumberTypeMatcher.NumberType.NUMBER)); - } - else if (pattern.equals(RegexPatterns.anInteger().pattern())) { - category.addRule(key, new NumberTypeMatcher(NumberTypeMatcher.NumberType.INTEGER)); - } - else if (pattern.equals(RegexPatterns.aDouble().pattern())) { - category.addRule(key, new NumberTypeMatcher(NumberTypeMatcher.NumberType.DECIMAL)); - } - else { - category.addRule(key, new RegexMatcher(pattern)); - } - break; - default: - break; + case NULL: + category.addRule(key, NullMatcher.INSTANCE); + break; + case EQUALITY: + category.addRule(key, EqualsMatcher.INSTANCE); + break; + case TYPE: + if (b.minTypeOccurrence() != null && b.maxTypeOccurrence() != null) { + category.addRule(key, new MinMaxTypeMatcher(b.minTypeOccurrence(), b.maxTypeOccurrence())); + } + else if (b.minTypeOccurrence() != null) { + category.addRule(key, new MinTypeMatcher(b.minTypeOccurrence())); + } + else if (b.maxTypeOccurrence() != null) { + category.addRule(key, new MaxTypeMatcher(b.maxTypeOccurrence())); + } + else { + category.addRule(key, TypeMatcher.INSTANCE); + } + break; + case DATE: + category.addRule(key, new DateMatcher()); + break; + case TIME: + category.addRule(key, new TimeMatcher()); + break; + case TIMESTAMP: + category.addRule(key, new TimestampMatcher()); + break; + case REGEX: + String pattern = b.value().toString(); + if (pattern.equals(RegexPatterns.number().pattern())) { + category.addRule(key, new NumberTypeMatcher(NumberTypeMatcher.NumberType.NUMBER)); + } + else if (pattern.equals(RegexPatterns.anInteger().pattern())) { + category.addRule(key, new NumberTypeMatcher(NumberTypeMatcher.NumberType.INTEGER)); + } + else if (pattern.equals(RegexPatterns.aDouble().pattern())) { + category.addRule(key, new NumberTypeMatcher(NumberTypeMatcher.NumberType.DECIMAL)); + } + else { + category.addRule(key, new RegexMatcher(pattern)); + } + break; + default: + break; } }); return category; diff --git a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/MessagingSCContractCreator.java b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/MessagingSCContractCreator.java index 7ac77f2891..fedc9769cb 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/MessagingSCContractCreator.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/MessagingSCContractCreator.java @@ -168,17 +168,17 @@ class MessagingSCContractCreator { } else if (matchingRule instanceof NumberTypeMatcher) { switch (((NumberTypeMatcher) matchingRule).getNumberType()) { - case NUMBER: - responseBodyMatchers.jsonPath(key, responseBodyMatchers.byRegex(RegexPatterns.number())); - break; - case INTEGER: - responseBodyMatchers.jsonPath(key, responseBodyMatchers.byRegex(RegexPatterns.anInteger())); - break; - case DECIMAL: - responseBodyMatchers.jsonPath(key, responseBodyMatchers.byRegex(RegexPatterns.aDouble())); - break; - default: - throw new RuntimeException("Unsupported number type!"); + case NUMBER: + responseBodyMatchers.jsonPath(key, responseBodyMatchers.byRegex(RegexPatterns.number())); + break; + case INTEGER: + responseBodyMatchers.jsonPath(key, responseBodyMatchers.byRegex(RegexPatterns.anInteger())); + break; + case DECIMAL: + responseBodyMatchers.jsonPath(key, responseBodyMatchers.byRegex(RegexPatterns.aDouble())); + break; + default: + throw new RuntimeException("Unsupported number type!"); } } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/RequestResponseSCContractCreator.java b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/RequestResponseSCContractCreator.java index d642230c1e..b6bb93f7fe 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/RequestResponseSCContractCreator.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/RequestResponseSCContractCreator.java @@ -176,17 +176,17 @@ class RequestResponseSCContractCreator { } else if (matchingRule instanceof NumberTypeMatcher) { switch (((NumberTypeMatcher) matchingRule).getNumberType()) { - case NUMBER: - bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.number())); - break; - case INTEGER: - bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.anInteger())); - break; - case DECIMAL: - bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.aDouble())); - break; - default: - throw new UnsupportedOperationException("Unsupported number type!"); + case NUMBER: + bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.number())); + break; + case INTEGER: + bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.anInteger())); + break; + case DECIMAL: + bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.aDouble())); + break; + default: + throw new UnsupportedOperationException("Unsupported number type!"); } } }); @@ -233,17 +233,17 @@ class RequestResponseSCContractCreator { } else if (matchingRule instanceof NumberTypeMatcher) { switch (((NumberTypeMatcher) matchingRule).getNumberType()) { - case NUMBER: - bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.number())); - break; - case INTEGER: - bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.anInteger())); - break; - case DECIMAL: - bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.aDouble())); - break; - default: - throw new RuntimeException("Unsupported number type!"); + case NUMBER: + bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.number())); + break; + case INTEGER: + bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.anInteger())); + break; + case DECIMAL: + bodyMatchers.jsonPath(key, bodyMatchers.byRegex(RegexPatterns.aDouble())); + break; + default: + throw new RuntimeException("Unsupported number type!"); } } }); diff --git a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/ValueGeneratorConverter.java b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/ValueGeneratorConverter.java index 302969ad4f..273a3ae4de 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/ValueGeneratorConverter.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/java/org/springframework/cloud/contract/verifier/spec/pact/ValueGeneratorConverter.java @@ -178,36 +178,36 @@ final class ValueGeneratorConverter { else if (v instanceof RegexProperty || v instanceof Pattern) { RegexProperty regexProperty = new RegexProperty(v); switch (regexProperty.pattern()) { - case INTEGER_PATTERN: - generators.addGenerator(category, path, new RandomIntGenerator(0, Integer.MAX_VALUE)); - break; - case DECIMAL_PATTERN: - generators.addGenerator(category, path, new RandomDecimalGenerator(10)); - break; - case HEX_PATTERN: - generators.addGenerator(category, path, new RandomHexadecimalGenerator(10)); - break; - case ALPHA_NUMERIC_PATTERN: - generators.addGenerator(category, path, new RandomStringGenerator(10)); - break; - case UUID_PATTERN: - generators.addGenerator(category, path, new UuidGenerator()); - break; - case ANY_DATE_PATTERN: - generators.addGenerator(category, path, new DateGenerator()); - break; - case ANY_TIME_PATTERN: - generators.addGenerator(category, path, new TimeGenerator()); - break; - case ANY_DATE_TIME_PATTERN: - generators.addGenerator(category, path, new DateTimeGenerator()); - break; - case TRUE_OR_FALSE_PATTERN: - generators.addGenerator(category, path, RandomBooleanGenerator.INSTANCE); - break; - default: - generators.addGenerator(category, path, new RegexGenerator(regexProperty.pattern())); - break; + case INTEGER_PATTERN: + generators.addGenerator(category, path, new RandomIntGenerator(0, Integer.MAX_VALUE)); + break; + case DECIMAL_PATTERN: + generators.addGenerator(category, path, new RandomDecimalGenerator(10)); + break; + case HEX_PATTERN: + generators.addGenerator(category, path, new RandomHexadecimalGenerator(10)); + break; + case ALPHA_NUMERIC_PATTERN: + generators.addGenerator(category, path, new RandomStringGenerator(10)); + break; + case UUID_PATTERN: + generators.addGenerator(category, path, new UuidGenerator()); + break; + case ANY_DATE_PATTERN: + generators.addGenerator(category, path, new DateGenerator()); + break; + case ANY_TIME_PATTERN: + generators.addGenerator(category, path, new TimeGenerator()); + break; + case ANY_DATE_TIME_PATTERN: + generators.addGenerator(category, path, new DateTimeGenerator()); + break; + case TRUE_OR_FALSE_PATTERN: + generators.addGenerator(category, path, RandomBooleanGenerator.INSTANCE); + break; + default: + generators.addGenerator(category, path, new RegexGenerator(regexProperty.pattern())); + break; } } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/converter/YamlContract.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/converter/YamlContract.java index bfaaf83f4f..40acbdb76b 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/converter/YamlContract.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/converter/YamlContract.java @@ -628,7 +628,8 @@ public class YamlContract { public enum PredefinedRegex { - only_alpha_unicode, number, any_double, any_boolean, ip_address, hostname, email, url, uuid, iso_date, iso_date_time, iso_time, iso_8601_with_offset, non_empty, non_blank; + only_alpha_unicode, number, any_double, any_boolean, ip_address, hostname, email, url, uuid, iso_date, + iso_date_time, iso_time, iso_8601_with_offset, non_empty, non_blank; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/converter/YamlToContracts.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/converter/YamlToContracts.java index e76a61c855..bb6c8577f6 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/converter/YamlToContracts.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/converter/YamlToContracts.java @@ -330,41 +330,41 @@ class YamlToContracts { Optional.ofNullable(yamlContractRequest.body).orElse(null)); MatchingTypeValue value = null; switch (stubMatcher.type) { - case by_date: - value = bodyMatchers.byDate(); - break; - case by_time: - value = bodyMatchers.byTime(); - break; - case by_timestamp: - value = bodyMatchers.byTimestamp(); - break; - case by_regex: - String regex = stubMatcher.value; - if (stubMatcher.predefined != null) { - regex = predefinedToPattern(stubMatcher.predefined).pattern(); - } - value = bodyMatchers.byRegex(regex); - break; - case by_equality: - value = bodyMatchers.byEquality(); - break; - case by_type: - value = bodyMatchers.byType(matchingTypeValueHolder -> { - if (stubMatcher.minOccurrence != null) { - matchingTypeValueHolder.minOccurrence(stubMatcher.minOccurrence); + case by_date: + value = bodyMatchers.byDate(); + break; + case by_time: + value = bodyMatchers.byTime(); + break; + case by_timestamp: + value = bodyMatchers.byTimestamp(); + break; + case by_regex: + String regex = stubMatcher.value; + if (stubMatcher.predefined != null) { + regex = predefinedToPattern(stubMatcher.predefined).pattern(); } - if (stubMatcher.maxOccurrence != null) { - matchingTypeValueHolder.maxOccurrence(stubMatcher.maxOccurrence); - } - }); - break; - case by_null: - // do nothing - break; - default: - throw new UnsupportedOperationException("The type [" + stubMatcher.type + "] is" - + " unsupported.Hint:If you 're using remember to pass "); + value = bodyMatchers.byRegex(regex); + break; + case by_equality: + value = bodyMatchers.byEquality(); + break; + case by_type: + value = bodyMatchers.byType(matchingTypeValueHolder -> { + if (stubMatcher.minOccurrence != null) { + matchingTypeValueHolder.minOccurrence(stubMatcher.minOccurrence); + } + if (stubMatcher.maxOccurrence != null) { + matchingTypeValueHolder.maxOccurrence(stubMatcher.maxOccurrence); + } + }); + break; + case by_null: + // do nothing + break; + default: + throw new UnsupportedOperationException("The type [" + stubMatcher.type + "] is" + + " unsupported.Hint:If you 're using remember to pass "); } if (value != null) { if (XML == contentType) { @@ -479,45 +479,45 @@ class YamlToContracts { yamlContractResponse.body); MatchingTypeValue value; switch (yamlContractBodyTestMatcher.type) { - case by_date: - value = bodyMatchers.byDate(); - break; - case by_time: - value = bodyMatchers.byTime(); - break; - case by_timestamp: - value = bodyMatchers.byTimestamp(); - break; - case by_regex: - String regex = yamlContractBodyTestMatcher.value; - if (yamlContractBodyTestMatcher.predefined != null) { - regex = predefinedToPattern(yamlContractBodyTestMatcher.predefined).pattern(); - } - value = bodyMatchers.byRegex(regex); - break; - case by_equality: - value = bodyMatchers.byEquality(); - break; - case by_type: - value = bodyMatchers.byType(v -> { - if (yamlContractBodyTestMatcher.minOccurrence != null) { - v.minOccurrence(yamlContractBodyTestMatcher.minOccurrence); + case by_date: + value = bodyMatchers.byDate(); + break; + case by_time: + value = bodyMatchers.byTime(); + break; + case by_timestamp: + value = bodyMatchers.byTimestamp(); + break; + case by_regex: + String regex = yamlContractBodyTestMatcher.value; + if (yamlContractBodyTestMatcher.predefined != null) { + regex = predefinedToPattern(yamlContractBodyTestMatcher.predefined).pattern(); } - if (yamlContractBodyTestMatcher.maxOccurrence != null) { - v.maxOccurrence(yamlContractBodyTestMatcher.maxOccurrence); - } - }); - break; - case by_command: - value = bodyMatchers.byCommand(yamlContractBodyTestMatcher.value); - break; - case by_null: - value = bodyMatchers.byNull(); - break; - default: - throw new UnsupportedOperationException("The type [" + yamlContractBodyTestMatcher.type - + "] is unsupported. " - + "Hint: If you're using remember to pass < type:by_regex > "); + value = bodyMatchers.byRegex(regex); + break; + case by_equality: + value = bodyMatchers.byEquality(); + break; + case by_type: + value = bodyMatchers.byType(v -> { + if (yamlContractBodyTestMatcher.minOccurrence != null) { + v.minOccurrence(yamlContractBodyTestMatcher.minOccurrence); + } + if (yamlContractBodyTestMatcher.maxOccurrence != null) { + v.maxOccurrence(yamlContractBodyTestMatcher.maxOccurrence); + } + }); + break; + case by_command: + value = bodyMatchers.byCommand(yamlContractBodyTestMatcher.value); + break; + case by_null: + value = bodyMatchers.byNull(); + break; + default: + throw new UnsupportedOperationException("The type [" + + yamlContractBodyTestMatcher.type + "] is unsupported. " + + "Hint: If you're using remember to pass < type:by_regex > "); } if (yamlContractBodyTestMatcher.path != null) { if (XML == contentType) { @@ -555,47 +555,48 @@ class YamlToContracts { yamlContractOutputMessage.body); MatchingTypeValue value; switch (yamlContractBodyTestMatcher.type) { - case by_date: - value = dslContractOutputMessageBodyMatchers.byDate(); - break; - case by_time: - value = dslContractOutputMessageBodyMatchers.byTime(); - break; - case by_timestamp: - value = dslContractOutputMessageBodyMatchers.byTimestamp(); - break; - case by_regex: - String regex = yamlContractBodyTestMatcher.value; - if (yamlContractBodyTestMatcher.predefined != null) { - regex = predefinedToPattern(yamlContractBodyTestMatcher.predefined) - .pattern(); - } - value = dslContractOutputMessageBodyMatchers.byRegex(regex); - break; - case by_equality: - value = dslContractOutputMessageBodyMatchers.byEquality(); - break; - case by_type: - value = dslContractOutputMessageBodyMatchers.byType(v -> { - if (yamlContractBodyTestMatcher.minOccurrence != null) { - v.minOccurrence(yamlContractBodyTestMatcher.minOccurrence); + case by_date: + value = dslContractOutputMessageBodyMatchers.byDate(); + break; + case by_time: + value = dslContractOutputMessageBodyMatchers.byTime(); + break; + case by_timestamp: + value = dslContractOutputMessageBodyMatchers.byTimestamp(); + break; + case by_regex: + String regex = yamlContractBodyTestMatcher.value; + if (yamlContractBodyTestMatcher.predefined != null) { + regex = predefinedToPattern(yamlContractBodyTestMatcher.predefined) + .pattern(); } - if (yamlContractBodyTestMatcher.maxOccurrence != null) { - v.maxOccurrence(yamlContractBodyTestMatcher.maxOccurrence); - } - }); - break; - case by_command: - value = dslContractOutputMessageBodyMatchers - .byCommand(yamlContractBodyTestMatcher.value); - break; - case by_null: - value = dslContractOutputMessageBodyMatchers.byNull(); - break; - default: - throw new UnsupportedOperationException("The type " + "[" - + yamlContractBodyTestMatcher.type + "] is unsupported. Hint: If " - + "you're using remember to pass < type:by_regex > "); + value = dslContractOutputMessageBodyMatchers.byRegex(regex); + break; + case by_equality: + value = dslContractOutputMessageBodyMatchers.byEquality(); + break; + case by_type: + value = dslContractOutputMessageBodyMatchers.byType(v -> { + if (yamlContractBodyTestMatcher.minOccurrence != null) { + v.minOccurrence(yamlContractBodyTestMatcher.minOccurrence); + } + if (yamlContractBodyTestMatcher.maxOccurrence != null) { + v.maxOccurrence(yamlContractBodyTestMatcher.maxOccurrence); + } + }); + break; + case by_command: + value = dslContractOutputMessageBodyMatchers + .byCommand(yamlContractBodyTestMatcher.value); + break; + case by_null: + value = dslContractOutputMessageBodyMatchers.byNull(); + break; + default: + throw new UnsupportedOperationException("The type " + "[" + + yamlContractBodyTestMatcher.type + + "] is unsupported. Hint: If " + + "you're using remember to pass < type:by_regex > "); } if (XML == contentType) { dslContractOutputMessageBodyMatchers.xPath(yamlContractBodyTestMatcher.path, @@ -729,30 +730,30 @@ class YamlToContracts { Optional.ofNullable(yamlContractInput.messageBody).orElse(null)); MatchingTypeValue value; switch (yamlContractBodyStubMatcher.type) { - case by_date: - value = dslContractInputBodyMatchers.byDate(); - break; - case by_time: - value = dslContractInputBodyMatchers.byTime(); - break; - case by_timestamp: - value = dslContractInputBodyMatchers.byTimestamp(); - break; - case by_regex: - String regex = yamlContractBodyStubMatcher.value; - if (yamlContractBodyStubMatcher.predefined != null) { - regex = predefinedToPattern(yamlContractBodyStubMatcher.predefined) - .pattern(); - } - value = dslContractInputBodyMatchers.byRegex(regex); - break; - case by_equality: - value = dslContractInputBodyMatchers.byEquality(); - break; - default: - throw new UnsupportedOperationException("The type " + "[" - + yamlContractBodyStubMatcher.type + "] is unsupported. " - + "Hint: If you're using remember to pass < type:by_regex > "); + case by_date: + value = dslContractInputBodyMatchers.byDate(); + break; + case by_time: + value = dslContractInputBodyMatchers.byTime(); + break; + case by_timestamp: + value = dslContractInputBodyMatchers.byTimestamp(); + break; + case by_regex: + String regex = yamlContractBodyStubMatcher.value; + if (yamlContractBodyStubMatcher.predefined != null) { + regex = predefinedToPattern(yamlContractBodyStubMatcher.predefined) + .pattern(); + } + value = dslContractInputBodyMatchers.byRegex(regex); + break; + case by_equality: + value = dslContractInputBodyMatchers.byEquality(); + break; + default: + throw new UnsupportedOperationException("The type " + "[" + + yamlContractBodyStubMatcher.type + "] is unsupported. " + + "Hint: If you're using remember to pass < type:by_regex > "); } if (XML == contentType) { dslContractInputBodyMatchers.xPath(yamlContractBodyStubMatcher.path, value); @@ -853,23 +854,23 @@ class YamlToContracts { return value; } switch (matcher.type) { - case equal_to: - return new DslProperty<>(request.equalTo(matcher.value), value); - case containing: - return new DslProperty<>(request.containing(matcher.value), value); - case matching: - return new DslProperty<>(request.matching(matcher.value), value); - case not_matching: - return new DslProperty<>(request.notMatching(matcher.value), value); - case equal_to_json: - return new DslProperty<>(request.equalToJson(matcher.value), value); - case equal_to_xml: - return new DslProperty<>(request.equalToXml(matcher.value), value); - case absent: - return new DslProperty(request.absent(), null); - default: - throw new UnsupportedOperationException("The provided matching type [" + matcher - + "] is unsupported. Use on of " + Arrays.toString(YamlContract.MatchingType.values())); + case equal_to: + return new DslProperty<>(request.equalTo(matcher.value), value); + case containing: + return new DslProperty<>(request.containing(matcher.value), value); + case matching: + return new DslProperty<>(request.matching(matcher.value), value); + case not_matching: + return new DslProperty<>(request.notMatching(matcher.value), value); + case equal_to_json: + return new DslProperty<>(request.equalToJson(matcher.value), value); + case equal_to_xml: + return new DslProperty<>(request.equalToXml(matcher.value), value); + case absent: + return new DslProperty(request.absent(), null); + default: + throw new UnsupportedOperationException("The provided matching type [" + matcher + + "] is unsupported. Use on of " + Arrays.toString(YamlContract.MatchingType.values())); } } @@ -890,39 +891,39 @@ class YamlToContracts { protected Pattern predefinedToPattern(YamlContract.PredefinedRegex predefinedRegex) { switch (predefinedRegex) { - case only_alpha_unicode: - return RegexPatterns.onlyAlphaUnicode().getPattern(); - case number: - return RegexPatterns.number().getPattern(); - case any_double: - return RegexPatterns.aDouble().getPattern(); - case any_boolean: - return RegexPatterns.anyBoolean().getPattern(); - case ip_address: - return RegexPatterns.ipAddress().getPattern(); - case hostname: - return RegexPatterns.hostname().getPattern(); - case email: - return RegexPatterns.email().getPattern(); - case url: - return RegexPatterns.url().getPattern(); - case uuid: - return RegexPatterns.uuid().getPattern(); - case iso_date: - return RegexPatterns.isoDate().getPattern(); - case iso_date_time: - return RegexPatterns.isoDateTime().getPattern(); - case iso_time: - return RegexPatterns.isoTime().getPattern(); - case iso_8601_with_offset: - return RegexPatterns.iso8601WithOffset().getPattern(); - case non_empty: - return RegexPatterns.nonEmpty().getPattern(); - case non_blank: - return RegexPatterns.nonBlank().getPattern(); - default: - throw new UnsupportedOperationException("The predefined regex [" + predefinedRegex - + "] is unsupported. Use one of " + Arrays.toString(YamlContract.PredefinedRegex.values())); + case only_alpha_unicode: + return RegexPatterns.onlyAlphaUnicode().getPattern(); + case number: + return RegexPatterns.number().getPattern(); + case any_double: + return RegexPatterns.aDouble().getPattern(); + case any_boolean: + return RegexPatterns.anyBoolean().getPattern(); + case ip_address: + return RegexPatterns.ipAddress().getPattern(); + case hostname: + return RegexPatterns.hostname().getPattern(); + case email: + return RegexPatterns.email().getPattern(); + case url: + return RegexPatterns.url().getPattern(); + case uuid: + return RegexPatterns.uuid().getPattern(); + case iso_date: + return RegexPatterns.isoDate().getPattern(); + case iso_date_time: + return RegexPatterns.isoDateTime().getPattern(); + case iso_time: + return RegexPatterns.isoTime().getPattern(); + case iso_8601_with_offset: + return RegexPatterns.iso8601WithOffset().getPattern(); + case non_empty: + return RegexPatterns.nonEmpty().getPattern(); + case non_blank: + return RegexPatterns.nonBlank().getPattern(); + default: + throw new UnsupportedOperationException("The predefined regex [" + predefinedRegex + + "] is unsupported. Use one of " + Arrays.toString(YamlContract.PredefinedRegex.values())); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.java index 40ebb8e541..a8f3f9ea5a 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/dsl/wiremock/WireMockRequestStubStrategy.java @@ -383,24 +383,24 @@ class WireMockRequestStubStrategy extends BaseWireMockStubStrategy { else if (object instanceof MatchingStrategy) { MatchingStrategy value = (MatchingStrategy) object; switch (value.getType()) { - case NOT_MATCHING: - return WireMock.notMatching(value.getClientValue().toString()); - case ABSENT: - return WireMock.absent(); - case EQUAL_TO: - return WireMock.equalTo(clientBody(value.getClientValue(), contentType).toString()); - case CONTAINS: - return WireMock.containing(clientBody(value.getClientValue(), contentType).toString()); - case MATCHING: - return WireMock.matching(clientBody(value.getClientValue(), contentType).toString()); - case EQUAL_TO_JSON: - return WireMock.equalToJson(clientBody(value.getClientValue(), contentType).toString()); - case EQUAL_TO_XML: - return WireMock.equalToXml(clientBody(value.getClientValue(), contentType).toString()); - case BINARY_EQUAL_TO: - return WireMock.binaryEqualTo((byte[]) clientBody(value.getClientValue(), contentType)); - default: - throw new UnsupportedOperationException("Unknown matching strategy " + value.getType()); + case NOT_MATCHING: + return WireMock.notMatching(value.getClientValue().toString()); + case ABSENT: + return WireMock.absent(); + case EQUAL_TO: + return WireMock.equalTo(clientBody(value.getClientValue(), contentType).toString()); + case CONTAINS: + return WireMock.containing(clientBody(value.getClientValue(), contentType).toString()); + case MATCHING: + return WireMock.matching(clientBody(value.getClientValue(), contentType).toString()); + case EQUAL_TO_JSON: + return WireMock.equalToJson(clientBody(value.getClientValue(), contentType).toString()); + case EQUAL_TO_XML: + return WireMock.equalToXml(clientBody(value.getClientValue(), contentType).toString()); + case BINARY_EQUAL_TO: + return WireMock.binaryEqualTo((byte[]) clientBody(value.getClientValue(), contentType)); + default: + throw new UnsupportedOperationException("Unknown matching strategy " + value.getType()); } } else { @@ -509,12 +509,12 @@ class WireMockRequestStubStrategy extends BaseWireMockStubStrategy { private MatchingStrategy appendBodyRegexpMatchPattern(Object value, ContentType contentType) { Object clientValue = MapConverter.transformToClientValues(value); switch (contentType) { - case JSON: - return new MatchingStrategy(buildJSONRegexpMatch(clientValue), MatchingStrategy.Type.MATCHING); - case UNKNOWN: - return new MatchingStrategy(buildGStringRegexpForStubSide(clientValue), MatchingStrategy.Type.MATCHING); - default: - throw new IllegalStateException(contentType.name() + " pattern matching is not implemented yet"); + case JSON: + return new MatchingStrategy(buildJSONRegexpMatch(clientValue), MatchingStrategy.Type.MATCHING); + case UNKNOWN: + return new MatchingStrategy(buildGStringRegexpForStubSide(clientValue), MatchingStrategy.Type.MATCHING); + default: + throw new IllegalStateException(contentType.name() + " pattern matching is not implemented yet"); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/OkHttpHttpVerifier.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/OkHttpHttpVerifier.java index 8cffb4fac1..bea1c0ca64 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/OkHttpHttpVerifier.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/OkHttpHttpVerifier.java @@ -86,14 +86,14 @@ public class OkHttpHttpVerifier implements HttpVerifier { try { Protocol protocol = Protocol.get(string); switch (protocol) { - case HTTP_1_0: - case HTTP_2: - case QUIC: - return Arrays.asList(protocol, Protocol.HTTP_1_1); - case HTTP_1_1: - return Collections.singletonList(Protocol.HTTP_1_1); - case H2_PRIOR_KNOWLEDGE: - return Collections.singletonList(Protocol.H2_PRIOR_KNOWLEDGE); + case HTTP_1_0: + case HTTP_2: + case QUIC: + return Arrays.asList(protocol, Protocol.HTTP_1_1); + case HTTP_1_1: + return Collections.singletonList(Protocol.HTTP_1_1); + case H2_PRIOR_KNOWLEDGE: + return Collections.singletonList(Protocol.H2_PRIOR_KNOWLEDGE); } return Collections.emptyList(); }