From 6e951e60fdda57f5e7eec22178415a282390aa4c Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 18 Sep 2020 12:29:48 +0200 Subject: [PATCH] Editing and listing fix Edited the new content that came in with the fix for issue 1511. Also fixed a code listing for JAX-RS. (The tags were misplaced, and the additional characters broke the listing. I also had to replace the tab characters with tabs.) --- .../asciidoc/_project-features-flows.adoc | 14 +- .../verifier/builder/CustomModeBodyGiven.java | 16 +- .../builder/CustomModeCookiesGiven.java | 8 +- .../builder/CustomModeCookiesThen.java | 3 +- .../verifier/builder/CustomModeFields.java | 3 +- .../verifier/builder/CustomModeGiven.java | 26 +- .../builder/CustomModeHeadersGiven.java | 10 +- .../builder/CustomModeHeadersThen.java | 21 +- .../verifier/builder/CustomModeImports.java | 6 +- .../builder/CustomModeMethodWithUrlGiven.java | 3 +- .../builder/CustomModeQueryParamsGiven.java | 17 +- .../builder/CustomModeResponseWhen.java | 4 +- .../CustomModeSchemeProtocolGiven.java | 10 +- .../builder/CustomModeStaticImports.java | 9 +- .../builder/CustomModeStatusCodeThen.java | 8 +- .../verifier/builder/CustomModeThen.java | 9 +- .../verifier/builder/CustomModeWhen.java | 12 +- .../builder/CustomMultipartGiven.java | 3 +- .../verifier/builder/JavaMultipartGiven.java | 35 +- .../verifier/builder/RestAssuredAcceptor.java | 3 +- .../builder/RestAssuredCookiesThen.java | 3 +- .../verifier/builder/RestAssuredGiven.java | 23 +- .../verifier/builder/RestAssuredThen.java | 9 +- .../verifier/builder/RestAssuredWhen.java | 23 +- .../verifier/builder/SingleMethodBuilder.java | 17 +- .../builder/SpockMockMvcMultipartGiven.java | 38 +- .../verifier/builder/UserImports.java | 3 +- .../verifier/builder/UserStaticImports.java | 6 +- .../http/ContractVerifierHttpMetaData.java | 13 +- .../verifier/http/OkHttpHttpVerifier.java | 46 +- .../cloud/contract/verifier/http/Request.java | 28 +- .../contract/verifier/http/Response.java | 17 +- .../builder/ContractHttpDocsSpec.groovy | 12 +- .../JaxRsClientMethodBuilderSpec.groovy | 59 +- .../MessagingMethodBodyBuilderSpec.groovy | 886 +++++++++--------- ...pringCloudContractRequestMatcherTests.java | 41 +- .../contract/verifier/http/RequestTests.java | 30 +- .../contract/verifier/http/ResponseTests.java | 20 +- 38 files changed, 688 insertions(+), 806 deletions(-) diff --git a/docs/src/main/asciidoc/_project-features-flows.adoc b/docs/src/main/asciidoc/_project-features-flows.adoc index 2efcdaa620..4ad2a98097 100644 --- a/docs/src/main/asciidoc/_project-features-flows.adoc +++ b/docs/src/main/asciidoc/_project-features-flows.adoc @@ -10,7 +10,7 @@ to define `protected WebTarget webTarget` and server initialization. The only op testing JAX-RS API is to start a web server. Also, a request with a body needs to have a content type be set. Otherwise, the default of `application/octet-stream` gets used. -In order to use JAX-RS mode, use the following settings: +To use JAX-RS mode, use the following setting: ==== [source,groovy,indent=0] @@ -130,10 +130,12 @@ include::{samples_url}/producer_webflux/src/test/java/com/example/BeerRestBase.j [[features-custom-mode]] === Custom Mode -IMPORTANT: This mode is experimental and can change in the future! +IMPORTANT: This mode is experimental and can change in the future. -The Spring Cloud Contract allows you to provide your own, custom implementation of the -`org.springframework.cloud.contract.verifier.http.HttpVerifier`. That way you can use any client you want to send and receive a request. The default implementation in Spring Cloud Contract is `OkHttpHttpVerifier` and it leverages OkHttp3 http client. +The Spring Cloud Contract lets you provide your own, custom, implementation of the +`org.springframework.cloud.contract.verifier.http.HttpVerifier`. That way, you can use any client you want to send and receive a request. The default implementation in Spring Cloud Contract is `OkHttpHttpVerifier` and it uses OkHttp3 http client. + +To get started, set `testMode` to `CUSTOM`: ==== [source,groovy,indent=0] @@ -196,7 +198,7 @@ public class RestTest extends BeerRestBase { ---- ==== -Corresponding base class could look like this: +The following example shows a corresponding base class: ==== [source,java,indent=0] @@ -1003,4 +1005,4 @@ public class GrpcTests { } ---- -==== \ No newline at end of file +==== diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeBodyGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeBodyGiven.java index af1b53a628..0d2b38eb10 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeBodyGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeBodyGiven.java @@ -30,8 +30,8 @@ class CustomModeBodyGiven implements Given { private final BodyParser bodyParser; - CustomModeBodyGiven(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) { + CustomModeBodyGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, + BodyParser bodyParser) { this.blockBuilder = blockBuilder; this.bodyReader = new BodyReader(generatedClassMetaData); this.bodyParser = bodyParser; @@ -47,8 +47,7 @@ class CustomModeBodyGiven implements Given { Object body; Request request = metadata.getContract().getRequest(); Object serverValue = request.getBody().getServerValue(); - if (serverValue instanceof ExecutionProperty - || serverValue instanceof FromFileProperty) { + if (serverValue instanceof ExecutionProperty || serverValue instanceof FromFileProperty) { body = request.getBody().getServerValue(); } else { @@ -65,10 +64,8 @@ class CustomModeBodyGiven implements Given { else if (body instanceof FromFileProperty) { FromFileProperty fileProperty = (FromFileProperty) body; value = fileProperty.isByte() - ? this.bodyReader.readBytesFromFileString(metadata, fileProperty, - CommunicationType.REQUEST) - : this.bodyReader.readStringFromFileString(metadata, fileProperty, - CommunicationType.REQUEST); + ? this.bodyReader.readBytesFromFileString(metadata, fileProperty, CommunicationType.REQUEST) + : this.bodyReader.readStringFromFileString(metadata, fileProperty, CommunicationType.REQUEST); } else { String escaped = escapeRequestSpecialChars(metadata, body.toString()); @@ -77,8 +74,7 @@ class CustomModeBodyGiven implements Given { return ".body(" + value + ")"; } - private String escapeRequestSpecialChars(SingleContractMetadata metadata, - String string) { + private String escapeRequestSpecialChars(SingleContractMetadata metadata, String string) { if (metadata.getInputTestContentType() == ContentType.JSON) { return string.replaceAll("\\\\n", "\\\\\\\\n"); } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeCookiesGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeCookiesGiven.java index 12ef6734ec..c7f0d2afb9 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeCookiesGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeCookiesGiven.java @@ -54,15 +54,13 @@ class CustomModeCookiesGiven implements Given { } private String string(Cookie cookie) { - return ".cookie(" + ContentHelper.getTestSideForNonBodyValue(cookie.getKey()) - + ", " + ContentHelper.getTestSideForNonBodyValue(cookie.getServerValue()) - + ")"; + return ".cookie(" + ContentHelper.getTestSideForNonBodyValue(cookie.getKey()) + ", " + + ContentHelper.getTestSideForNonBodyValue(cookie.getServerValue()) + ")"; } private boolean ofAbsentType(Cookie cookie) { return cookie.getServerValue() instanceof MatchingStrategy - && MatchingStrategy.Type.ABSENT - .equals(((MatchingStrategy) cookie.getServerValue()).getType()); + && MatchingStrategy.Type.ABSENT.equals(((MatchingStrategy) cookie.getServerValue()).getType()); } @Override diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeCookiesThen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeCookiesThen.java index e6c4a47ba0..fe3bf35a67 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeCookiesThen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeCookiesThen.java @@ -25,8 +25,7 @@ class CustomModeCookiesThen implements Then, CustomModeAcceptor, CookieElementPr private final ComparisonBuilder comparisonBuilder; - CustomModeCookiesThen(BlockBuilder blockBuilder, - ComparisonBuilder comparisonBuilder) { + CustomModeCookiesThen(BlockBuilder blockBuilder, ComparisonBuilder comparisonBuilder) { this.blockBuilder = blockBuilder; this.comparisonBuilder = comparisonBuilder; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeFields.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeFields.java index cd16ebb3e3..685d0aeb2c 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeFields.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeFields.java @@ -26,8 +26,7 @@ class CustomModeFields implements Field, CustomModeAcceptor { private static final String[] FIELDS = { "@Inject HttpVerifier httpVerifier" }; - CustomModeFields(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData) { + CustomModeFields(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeGiven.java index 2fb0ae93f3..da720b7748 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeGiven.java @@ -33,22 +33,17 @@ class CustomModeGiven implements Given, BodyMethodVisitor, CustomModeAcceptor { private final List bodyGivens = new LinkedList<>(); - CustomModeGiven(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) { + CustomModeGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; - this.requestGivens.addAll(Collections.singletonList( - new CustomModeRequestGiven(blockBuilder, generatedClassMetaData))); - this.bodyGivens.addAll( - Arrays.asList(new CustomModeMethodWithUrlGiven(blockBuilder, bodyParser), - new CustomModeQueryParamsGiven(blockBuilder, bodyParser), - new CustomModeSchemeProtocolGiven(blockBuilder), - new CustomModeHeadersGiven(blockBuilder), - new CustomModeCookiesGiven(blockBuilder), - new CustomModeBodyGiven(blockBuilder, generatedClassMetaData, - bodyParser), - new CustomMultipartGiven(generatedClassMetaData), - new CustomModeRequestBuildGiven(blockBuilder))); + this.requestGivens + .addAll(Collections.singletonList(new CustomModeRequestGiven(blockBuilder, generatedClassMetaData))); + this.bodyGivens.addAll(Arrays.asList(new CustomModeMethodWithUrlGiven(blockBuilder, bodyParser), + new CustomModeQueryParamsGiven(blockBuilder, bodyParser), + new CustomModeSchemeProtocolGiven(blockBuilder), new CustomModeHeadersGiven(blockBuilder), + new CustomModeCookiesGiven(blockBuilder), + new CustomModeBodyGiven(blockBuilder, generatedClassMetaData, bodyParser), + new CustomMultipartGiven(generatedClassMetaData), new CustomModeRequestBuildGiven(blockBuilder))); } @Override @@ -61,8 +56,7 @@ class CustomModeGiven implements Given, BodyMethodVisitor, CustomModeAcceptor { } private void addRequestGivenLine(SingleContractMetadata singleContractMetadata) { - this.requestGivens.stream().filter(given -> given.accept(singleContractMetadata)) - .findFirst() + this.requestGivens.stream().filter(given -> given.accept(singleContractMetadata)).findFirst() .orElseThrow(() -> new IllegalStateException( "No matching request building Given implementation for a custom test mode")) .apply(singleContractMetadata); diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeHeadersGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeHeadersGiven.java index 2e3f40841f..85095daf34 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeHeadersGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeHeadersGiven.java @@ -56,17 +56,15 @@ class CustomModeHeadersGiven implements Given { } private String string(Header header) { - return ".header(" + ContentHelper.getTestSideForNonBodyValue(header.getName()) - + ", " - + ContentHelper.getTestSideForNonBodyValue( - MapConverter.getTestSideValuesForNonBody(header.getServerValue())) + return ".header(" + + ContentHelper.getTestSideForNonBodyValue(header.getName()) + ", " + ContentHelper + .getTestSideForNonBodyValue(MapConverter.getTestSideValuesForNonBody(header.getServerValue())) + ")"; } private boolean ofAbsentType(Header header) { return header.getServerValue() instanceof MatchingStrategy - && MatchingStrategy.Type.ABSENT - .equals(((MatchingStrategy) header.getServerValue()).getType()); + && MatchingStrategy.Type.ABSENT.equals(((MatchingStrategy) header.getServerValue()).getType()); } @Override diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeHeadersThen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeHeadersThen.java index 8785876388..61cc5bc59d 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeHeadersThen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeHeadersThen.java @@ -32,8 +32,7 @@ class CustomModeHeadersThen implements Then, CustomModeAcceptor { private final ComparisonBuilder comparisonBuilder; - CustomModeHeadersThen(BlockBuilder blockBuilder, - ComparisonBuilder comparisonBuilder) { + CustomModeHeadersThen(BlockBuilder blockBuilder, ComparisonBuilder comparisonBuilder) { this.blockBuilder = blockBuilder; this.comparisonBuilder = comparisonBuilder; } @@ -45,10 +44,8 @@ class CustomModeHeadersThen implements Then, CustomModeAcceptor { Iterator
iterator = headers.getEntries().iterator(); while (iterator.hasNext()) { Header header = iterator.next(); - String text = processHeaderElement(header.getName(), - header.getServerValue() instanceof NotToEscapePattern - ? header.getServerValue() - : MapConverter.getTestSideValues(header.getServerValue())); + String text = processHeaderElement(header.getName(), header.getServerValue() instanceof NotToEscapePattern + ? header.getServerValue() : MapConverter.getTestSideValues(header.getServerValue())); if (iterator.hasNext()) { this.blockBuilder.addLineWithEnding(text); } @@ -62,22 +59,18 @@ class CustomModeHeadersThen implements Then, CustomModeAcceptor { private String processHeaderElement(String property, Object value) { if (value instanceof NotToEscapePattern) { - return this.comparisonBuilder - .assertThat("response.header(\"" + property + "\")") + return this.comparisonBuilder.assertThat("response.header(\"" + property + "\")") + matchesManuallyEscapedPattern((NotToEscapePattern) value); } else if (value instanceof ExecutionProperty) { - return ((ExecutionProperty) value) - .insertValue("response.header(\"" + property + "\")"); + return ((ExecutionProperty) value).insertValue("response.header(\"" + property + "\")"); } - return this.comparisonBuilder.assertThat("response.header(\"" + property + "\")", - value); + return this.comparisonBuilder.assertThat("response.header(\"" + property + "\")", value); } private String matchesManuallyEscapedPattern(NotToEscapePattern value) { - return this.comparisonBuilder - .matchesEscaped(value.getServerValue().pattern().replace("\\", "\\\\")); + return this.comparisonBuilder.matchesEscaped(value.getServerValue().pattern().replace("\\", "\\\\")); } @Override diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeImports.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeImports.java index f61f9d4bb4..523d5da445 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeImports.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeImports.java @@ -29,16 +29,14 @@ class CustomModeImports implements Imports, CustomModeAcceptor { "org.springframework.cloud.contract.verifier.http.Request", "org.springframework.cloud.contract.verifier.http.Response;" }; - CustomModeImports(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData) { + CustomModeImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; } @Override public Imports call() { - Arrays.stream(IMPORTS) - .forEach(s -> this.blockBuilder.addLineWithEnding("import " + s)); + Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import " + s)); return this; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeMethodWithUrlGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeMethodWithUrlGiven.java index 0a02fbafef..ca91eaab39 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeMethodWithUrlGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeMethodWithUrlGiven.java @@ -35,8 +35,7 @@ class CustomModeMethodWithUrlGiven implements Given { @Override public MethodVisitor apply(SingleContractMetadata metadata) { - addUrl(getUrl(metadata.getContract().getRequest()), - metadata.getContract().getRequest()); + addUrl(getUrl(metadata.getContract().getRequest()), metadata.getContract().getRequest()); return this; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeQueryParamsGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeQueryParamsGiven.java index bda3a939f5..f86210fb49 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeQueryParamsGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeQueryParamsGiven.java @@ -27,8 +27,7 @@ import org.springframework.cloud.contract.spec.internal.Url; import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; import org.springframework.cloud.contract.verifier.util.MapConverter; -class CustomModeQueryParamsGiven - implements Given, CustomModeAcceptor, QueryParamsResolver { +class CustomModeQueryParamsGiven implements Given, CustomModeAcceptor, QueryParamsResolver { private final BlockBuilder blockBuilder; @@ -58,9 +57,8 @@ class CustomModeQueryParamsGiven } private void addQueryParameters(Url buildUrl) { - List queryParameters = buildUrl.getQueryParameters() - .getParameters().stream().filter(this::allowedQueryParameter) - .collect(Collectors.toList()); + List queryParameters = buildUrl.getQueryParameters().getParameters().stream() + .filter(this::allowedQueryParameter).collect(Collectors.toList()); Iterator iterator = queryParameters.iterator(); while (iterator.hasNext()) { QueryParameter parameter = iterator.next(); @@ -85,17 +83,14 @@ class CustomModeQueryParamsGiven } private String addQueryParameter(QueryParameter queryParam) { - return "." + "queryParam(" + this.bodyParser.quotedLongText(queryParam.getName()) - + "," + this.bodyParser.quotedLongText(resolveParamValue( - MapConverter.getTestSideValuesForNonBody(queryParam))) - + ")"; + return "." + "queryParam(" + this.bodyParser.quotedLongText(queryParam.getName()) + "," + this.bodyParser + .quotedLongText(resolveParamValue(MapConverter.getTestSideValuesForNonBody(queryParam))) + ")"; } @Override public boolean accept(SingleContractMetadata metadata) { return acceptType(metadata) && metadata.getContract().getRequest() != null - && getUrl(metadata.getContract().getRequest()) - .getQueryParameters() != null; + && getUrl(metadata.getContract().getRequest()).getQueryParameters() != null; } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeResponseWhen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeResponseWhen.java index 533ba64b22..91a32886d8 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeResponseWhen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeResponseWhen.java @@ -31,9 +31,7 @@ class CustomModeResponseWhen implements When, CustomModeAcceptor { @Override public MethodVisitor apply(SingleContractMetadata metadata) { - this.blockBuilder - .addLineWithEnding("Response response = httpVerifier.exchange(request)") - .endBlock(); + this.blockBuilder.addLineWithEnding("Response response = httpVerifier.exchange(request)").endBlock(); return this; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeSchemeProtocolGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeSchemeProtocolGiven.java index ec07bbf3f7..d247298fab 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeSchemeProtocolGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeSchemeProtocolGiven.java @@ -32,13 +32,9 @@ class CustomModeSchemeProtocolGiven implements Given { @Override public MethodVisitor apply(SingleContractMetadata metadata) { Contract contract = metadata.getContract(); - ContractVerifierHttpMetaData httpMetadata = ContractVerifierHttpMetaData - .fromMetadata(contract.getMetadata()); - this.blockBuilder - .addIndented(".scheme(\"" + httpMetadata.getScheme().name() + "\")") - .addEmptyLine(); - this.blockBuilder.addIndented( - ".protocol(\"" + httpMetadata.getProtocol().toString() + "\")"); + ContractVerifierHttpMetaData httpMetadata = ContractVerifierHttpMetaData.fromMetadata(contract.getMetadata()); + this.blockBuilder.addIndented(".scheme(\"" + httpMetadata.getScheme().name() + "\")").addEmptyLine(); + this.blockBuilder.addIndented(".protocol(\"" + httpMetadata.getProtocol().toString() + "\")"); return this; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeStaticImports.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeStaticImports.java index d1621006b6..2b646efb83 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeStaticImports.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeStaticImports.java @@ -24,19 +24,16 @@ class CustomModeStaticImports implements Imports, CustomModeAcceptor { private final GeneratedClassMetaData generatedClassMetaData; - private static final String[] IMPORTS = { - "org.springframework.cloud.contract.verifier.http.Request.given" }; + private static final String[] IMPORTS = { "org.springframework.cloud.contract.verifier.http.Request.given" }; - CustomModeStaticImports(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData) { + CustomModeStaticImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; } @Override public Imports call() { - Arrays.stream(IMPORTS) - .forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s)); + Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s)); return this; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeStatusCodeThen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeStatusCodeThen.java index 01100378ee..b71189da76 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeStatusCodeThen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeStatusCodeThen.java @@ -25,8 +25,7 @@ class CustomModeStatusCodeThen implements Then { private final ComparisonBuilder comparisonBuilder; - CustomModeStatusCodeThen(BlockBuilder blockBuilder, - ComparisonBuilder comparisonBuilder) { + CustomModeStatusCodeThen(BlockBuilder blockBuilder, ComparisonBuilder comparisonBuilder) { this.blockBuilder = blockBuilder; this.comparisonBuilder = comparisonBuilder; } @@ -34,9 +33,8 @@ class CustomModeStatusCodeThen implements Then { @Override public MethodVisitor apply(SingleContractMetadata metadata) { Response response = metadata.getContract().getResponse(); - this.blockBuilder - .addIndented(this.comparisonBuilder.assertThat("response.statusCode()", - response.getStatus().getServerValue())) + this.blockBuilder.addIndented( + this.comparisonBuilder.assertThat("response.statusCode()", response.getStatus().getServerValue())) .addEndingIfNotPresent(); return this; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeThen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeThen.java index 5270e54355..3272c3bab5 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeThen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeThen.java @@ -30,17 +30,14 @@ class CustomModeThen implements Then, BodyMethodVisitor, CustomModeAcceptor { private final List thens = new LinkedList<>(); - CustomModeThen(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser, + CustomModeThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser, ComparisonBuilder comparisonBuilder) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; - this.thens.addAll(Arrays.asList( - new CustomModeStatusCodeThen(this.blockBuilder, comparisonBuilder), + this.thens.addAll(Arrays.asList(new CustomModeStatusCodeThen(this.blockBuilder, comparisonBuilder), new CustomModeHeadersThen(this.blockBuilder, comparisonBuilder), new CustomModeCookiesThen(this.blockBuilder, comparisonBuilder), - new GenericHttpBodyThen(this.blockBuilder, generatedClassMetaData, - bodyParser, comparisonBuilder))); + new GenericHttpBodyThen(this.blockBuilder, generatedClassMetaData, bodyParser, comparisonBuilder))); } @Override diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeWhen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeWhen.java index 4ffa7670ca..910ce758b3 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeWhen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomModeWhen.java @@ -30,12 +30,10 @@ class CustomModeWhen implements When, BodyMethodVisitor, CustomModeAcceptor { private final List responseWhens = new LinkedList<>(); - CustomModeWhen(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData) { + CustomModeWhen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; - this.responseWhens.addAll(Arrays.asList( - new CustomModeResponseWhen(blockBuilder, this.generatedClassMetaData))); + this.responseWhens.addAll(Arrays.asList(new CustomModeResponseWhen(blockBuilder, this.generatedClassMetaData))); } @Override @@ -47,10 +45,8 @@ class CustomModeWhen implements When, BodyMethodVisitor, CustomModeAcceptor { } private void addResponseWhenLine(SingleContractMetadata singleContractMetadata) { - this.responseWhens.stream().filter(when -> when.accept(singleContractMetadata)) - .findFirst() - .orElseThrow(() -> new IllegalStateException( - "No matching request building When implementation for Rest Assured")) + this.responseWhens.stream().filter(when -> when.accept(singleContractMetadata)).findFirst().orElseThrow( + () -> new IllegalStateException("No matching request building When implementation for Rest Assured")) .apply(singleContractMetadata); } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomMultipartGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomMultipartGiven.java index 79289da7ca..34e5acb6b0 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomMultipartGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/CustomMultipartGiven.java @@ -35,8 +35,7 @@ class CustomMultipartGiven implements Given, CustomModeAcceptor { @Override public boolean accept(SingleContractMetadata metadata) { Request request = metadata.getContract().getRequest(); - return request != null && request.getMultipart() != null - && acceptType(this.generatedClassMetaData, metadata); + return request != null && request.getMultipart() != null && acceptType(this.generatedClassMetaData, metadata); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JavaMultipartGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JavaMultipartGiven.java index 95ebeebd67..9595ccb61d 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JavaMultipartGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JavaMultipartGiven.java @@ -36,8 +36,8 @@ class JavaMultipartGiven implements Given, RestAssuredAcceptor { private final BodyParser bodyParser; - JavaMultipartGiven(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) { + JavaMultipartGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, + BodyParser bodyParser) { this.blockBuilder = blockBuilder; this.bodyReader = new BodyReader(generatedClassMetaData); this.bodyParser = bodyParser; @@ -46,47 +46,40 @@ class JavaMultipartGiven implements Given, RestAssuredAcceptor { @Override public MethodVisitor apply(SingleContractMetadata metadata) { - getMultipartParameters(metadata).entrySet().forEach(entry -> this.blockBuilder - .addLine(getMultipartParameterLine(metadata, entry))); + getMultipartParameters(metadata).entrySet() + .forEach(entry -> this.blockBuilder.addLine(getMultipartParameterLine(metadata, entry))); return this; } - private String getMultipartParameterLine(SingleContractMetadata metadata, - Map.Entry parameter) { + private String getMultipartParameterLine(SingleContractMetadata metadata, Map.Entry parameter) { if (parameter.getValue() instanceof NamedProperty) { - return ".multiPart(" + getMultipartFileParameterContent(metadata, - parameter.getKey(), (NamedProperty) parameter.getValue()) + ")"; + return ".multiPart(" + getMultipartFileParameterContent(metadata, parameter.getKey(), + (NamedProperty) parameter.getValue()) + ")"; } return getParameterString(parameter); } @SuppressWarnings("unchecked") private Map getMultipartParameters(SingleContractMetadata metadata) { - return (Map) metadata.getContract().getRequest().getMultipart() - .getServerValue(); + return (Map) metadata.getContract().getRequest().getMultipart().getServerValue(); } - private String getMultipartFileParameterContent(SingleContractMetadata metadata, - String propertyName, NamedProperty propertyValue) { + private String getMultipartFileParameterContent(SingleContractMetadata metadata, String propertyName, + NamedProperty propertyValue) { return getJavaMultipartFileParameterContent(propertyName, propertyValue, - fileProp -> this.bodyReader.readBytesFromFileString(metadata, fileProp, - CommunicationType.REQUEST)); + fileProp -> this.bodyReader.readBytesFromFileString(metadata, fileProp, CommunicationType.REQUEST)); } private String getParameterString(Map.Entry parameter) { return ".param(" + this.bodyParser.quotedShortText(parameter.getKey()) + ", " - + this.bodyParser.quotedShortText( - MapConverter.getTestSideValuesForNonBody(parameter.getValue())) - + ")"; + + this.bodyParser.quotedShortText(MapConverter.getTestSideValuesForNonBody(parameter.getValue())) + ")"; } @Override public boolean accept(SingleContractMetadata metadata) { Request request = metadata.getContract().getRequest(); - return request != null && request.getMultipart() != null - && acceptType(this.generatedClassMetaData, metadata) - && this.generatedClassMetaData.configProperties - .getTestFramework() != TestFramework.SPOCK; + return request != null && request.getMultipart() != null && acceptType(this.generatedClassMetaData, metadata) + && this.generatedClassMetaData.configProperties.getTestFramework() != TestFramework.SPOCK; } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredAcceptor.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredAcceptor.java index c2b822fdcf..1386beb465 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredAcceptor.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredAcceptor.java @@ -24,8 +24,7 @@ interface RestAssuredAcceptor { default boolean acceptType(GeneratedClassMetaData generatedClassMetaData, SingleContractMetadata singleContractMetadata) { return generatedClassMetaData.configProperties.getTestMode() != TestMode.CUSTOM - && generatedClassMetaData.configProperties - .getTestMode() != TestMode.JAXRSCLIENT + && generatedClassMetaData.configProperties.getTestMode() != TestMode.JAXRSCLIENT && singleContractMetadata.isHttp(); } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredCookiesThen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredCookiesThen.java index 8c38aba630..8153908b97 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredCookiesThen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredCookiesThen.java @@ -19,8 +19,7 @@ package org.springframework.cloud.contract.verifier.builder; import org.springframework.cloud.contract.spec.internal.Response; import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; -class RestAssuredCookiesThen - implements Then, RestAssuredAcceptor, CookieElementProcessor { +class RestAssuredCookiesThen implements Then, RestAssuredAcceptor, CookieElementProcessor { private final BlockBuilder blockBuilder; diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredGiven.java index ef9982909b..2caa8e0c79 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredGiven.java @@ -32,21 +32,18 @@ class RestAssuredGiven implements Given, BodyMethodVisitor, RestAssuredAcceptor private final List bodyGivens = new LinkedList<>(); - RestAssuredGiven(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) { + RestAssuredGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; - this.requestGivens.addAll(Arrays.asList( - new MockMvcRequestGiven(blockBuilder, generatedClassMetaData), + this.requestGivens.addAll(Arrays.asList(new MockMvcRequestGiven(blockBuilder, generatedClassMetaData), new SpockMockMvcRequestGiven(blockBuilder, generatedClassMetaData), new ExplicitRequestGiven(blockBuilder, generatedClassMetaData), new WebTestClientRequestGiven(blockBuilder, generatedClassMetaData))); - this.bodyGivens.addAll(Arrays.asList(new MockMvcHeadersGiven(blockBuilder), - new MockMvcCookiesGiven(blockBuilder), - new MockMvcBodyGiven(blockBuilder, generatedClassMetaData, bodyParser), - new JavaMultipartGiven(blockBuilder, generatedClassMetaData, bodyParser), - new SpockMockMvcMultipartGiven(blockBuilder, generatedClassMetaData, - bodyParser))); + this.bodyGivens + .addAll(Arrays.asList(new MockMvcHeadersGiven(blockBuilder), new MockMvcCookiesGiven(blockBuilder), + new MockMvcBodyGiven(blockBuilder, generatedClassMetaData, bodyParser), + new JavaMultipartGiven(blockBuilder, generatedClassMetaData, bodyParser), + new SpockMockMvcMultipartGiven(blockBuilder, generatedClassMetaData, bodyParser))); } @Override @@ -59,10 +56,8 @@ class RestAssuredGiven implements Given, BodyMethodVisitor, RestAssuredAcceptor } private void addRequestGivenLine(SingleContractMetadata singleContractMetadata) { - this.requestGivens.stream().filter(given -> given.accept(singleContractMetadata)) - .findFirst() - .orElseThrow(() -> new IllegalStateException( - "No matching request building Given implementation for Rest Assured")) + this.requestGivens.stream().filter(given -> given.accept(singleContractMetadata)).findFirst().orElseThrow( + () -> new IllegalStateException("No matching request building Given implementation for Rest Assured")) .apply(singleContractMetadata); } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredThen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredThen.java index f51095f98f..b4c05c85fc 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredThen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredThen.java @@ -30,17 +30,14 @@ class RestAssuredThen implements Then, BodyMethodVisitor, RestAssuredAcceptor { private final List thens = new LinkedList<>(); - RestAssuredThen(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser, + RestAssuredThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser, ComparisonBuilder comparisonBuilder) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; - this.thens.addAll(Arrays.asList( - new RestAssuredStatusCodeThen(this.blockBuilder, comparisonBuilder), + this.thens.addAll(Arrays.asList(new RestAssuredStatusCodeThen(this.blockBuilder, comparisonBuilder), new RestAssuredHeadersThen(this.blockBuilder, comparisonBuilder), new RestAssuredCookiesThen(this.blockBuilder, comparisonBuilder), - new GenericHttpBodyThen(this.blockBuilder, generatedClassMetaData, - bodyParser, comparisonBuilder))); + new GenericHttpBodyThen(this.blockBuilder, generatedClassMetaData, bodyParser, comparisonBuilder))); } @Override diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredWhen.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredWhen.java index 77b19ec439..84dc095783 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredWhen.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/RestAssuredWhen.java @@ -32,21 +32,16 @@ class RestAssuredWhen implements When, BodyMethodVisitor, RestAssuredAcceptor { private final List whens = new LinkedList<>(); - RestAssuredWhen(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) { + RestAssuredWhen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; - this.responseWhens.addAll(Arrays.asList( - new MockMvcResponseWhen(blockBuilder, this.generatedClassMetaData), + this.responseWhens.addAll(Arrays.asList(new MockMvcResponseWhen(blockBuilder, this.generatedClassMetaData), new SpockMockMvcResponseWhen(blockBuilder, this.generatedClassMetaData), new ExplicitResponseWhen(blockBuilder, this.generatedClassMetaData), - new WebTestClientResponseWhen(blockBuilder, - this.generatedClassMetaData))); - this.whens.addAll( - Arrays.asList(new MockMvcQueryParamsWhen(this.blockBuilder, bodyParser), - new MockMvcAsyncWhen(this.blockBuilder, - this.generatedClassMetaData), - new MockMvcUrlWhen(this.blockBuilder, bodyParser))); + new WebTestClientResponseWhen(blockBuilder, this.generatedClassMetaData))); + this.whens.addAll(Arrays.asList(new MockMvcQueryParamsWhen(this.blockBuilder, bodyParser), + new MockMvcAsyncWhen(this.blockBuilder, this.generatedClassMetaData), + new MockMvcUrlWhen(this.blockBuilder, bodyParser))); } @Override @@ -59,10 +54,8 @@ class RestAssuredWhen implements When, BodyMethodVisitor, RestAssuredAcceptor { } private void addResponseWhenLine(SingleContractMetadata singleContractMetadata) { - this.responseWhens.stream().filter(when -> when.accept(singleContractMetadata)) - .findFirst() - .orElseThrow(() -> new IllegalStateException( - "No matching request building When implementation for Rest Assured")) + this.responseWhens.stream().filter(when -> when.accept(singleContractMetadata)).findFirst().orElseThrow( + () -> new IllegalStateException("No matching request building When implementation for Rest Assured")) .apply(singleContractMetadata); } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java index c9321feb89..511d950480 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java @@ -100,17 +100,12 @@ class SingleMethodBuilder { } SingleMethodBuilder customMode() { - return given(new CustomModeGiven(this.blockBuilder, this.generatedClassMetaData, - CustomModeBodyParser.INSTANCE)) - .methodPreProcessor(new InProgressContractMethodPreProcessor()) - .when(new CustomModeWhen(this.blockBuilder, - this.generatedClassMetaData)) - .then(new CustomModeThen(this.blockBuilder, - this.generatedClassMetaData, - CustomModeBodyParser.INSTANCE, - ComparisonBuilder.JAVA_HTTP_INSTANCE)) - .methodPostProcessor(new TemplateUpdatingMethodPostProcessor( - this.blockBuilder)); + return given(new CustomModeGiven(this.blockBuilder, this.generatedClassMetaData, CustomModeBodyParser.INSTANCE)) + .methodPreProcessor(new InProgressContractMethodPreProcessor()) + .when(new CustomModeWhen(this.blockBuilder, this.generatedClassMetaData)) + .then(new CustomModeThen(this.blockBuilder, this.generatedClassMetaData, CustomModeBodyParser.INSTANCE, + ComparisonBuilder.JAVA_HTTP_INSTANCE)) + .methodPostProcessor(new TemplateUpdatingMethodPostProcessor(this.blockBuilder)); } SingleMethodBuilder jaxRs() { diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockMockMvcMultipartGiven.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockMockMvcMultipartGiven.java index 42a40ca4cf..68effa8986 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockMockMvcMultipartGiven.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockMockMvcMultipartGiven.java @@ -35,8 +35,8 @@ class SpockMockMvcMultipartGiven implements Given, MockMvcAcceptor { private final BodyParser bodyParser; - SpockMockMvcMultipartGiven(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) { + SpockMockMvcMultipartGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, + BodyParser bodyParser) { this.blockBuilder = blockBuilder; this.bodyReader = new BodyReader(generatedClassMetaData); this.bodyParser = bodyParser; @@ -45,48 +45,40 @@ class SpockMockMvcMultipartGiven implements Given, MockMvcAcceptor { @Override public MethodVisitor apply(SingleContractMetadata metadata) { - getMultipartParameters(metadata).entrySet().forEach(entry -> this.blockBuilder - .addLine(getMultipartParameterLine(metadata, entry))); + getMultipartParameters(metadata).entrySet() + .forEach(entry -> this.blockBuilder.addLine(getMultipartParameterLine(metadata, entry))); return this; } - private String getMultipartParameterLine(SingleContractMetadata metadata, - Map.Entry parameter) { + private String getMultipartParameterLine(SingleContractMetadata metadata, Map.Entry parameter) { if (parameter.getValue() instanceof NamedProperty) { - return ".multiPart(" + getMultipartFileParameterContent(metadata, - parameter.getKey(), (NamedProperty) parameter.getValue()) + ")"; + return ".multiPart(" + getMultipartFileParameterContent(metadata, parameter.getKey(), + (NamedProperty) parameter.getValue()) + ")"; } return getParameterString(parameter); } @SuppressWarnings("unchecked") private Map getMultipartParameters(SingleContractMetadata metadata) { - return (Map) metadata.getContract().getRequest().getMultipart() - .getServerValue(); + return (Map) metadata.getContract().getRequest().getMultipart().getServerValue(); } - private String getMultipartFileParameterContent(SingleContractMetadata metadata, - String propertyName, NamedProperty propertyValue) { - return ContentUtils.getGroovyMultipartFileParameterContent(propertyName, - propertyValue, - fileProp -> this.bodyReader.readBytesFromFileString(metadata, fileProp, - CommunicationType.REQUEST)); + private String getMultipartFileParameterContent(SingleContractMetadata metadata, String propertyName, + NamedProperty propertyValue) { + return ContentUtils.getGroovyMultipartFileParameterContent(propertyName, propertyValue, + fileProp -> this.bodyReader.readBytesFromFileString(metadata, fileProp, CommunicationType.REQUEST)); } private String getParameterString(Map.Entry parameter) { return ".param(" + this.bodyParser.quotedShortText(parameter.getKey()) + ", " - + this.bodyParser.quotedShortText( - MapConverter.getTestSideValuesForNonBody(parameter.getValue())) - + ")"; + + this.bodyParser.quotedShortText(MapConverter.getTestSideValuesForNonBody(parameter.getValue())) + ")"; } @Override public boolean accept(SingleContractMetadata metadata) { Request request = metadata.getContract().getRequest(); - return request != null && request.getMultipart() != null - && acceptType(this.generatedClassMetaData, metadata) - && this.generatedClassMetaData.configProperties - .getTestFramework() == TestFramework.SPOCK; + return request != null && request.getMultipart() != null && acceptType(this.generatedClassMetaData, metadata) + && this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.SPOCK; } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/UserImports.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/UserImports.java index 4ecea6f427..476ba9ef9a 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/UserImports.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/UserImports.java @@ -24,8 +24,7 @@ class UserImports implements Imports { private final GeneratedClassMetaData generatedClassMetaData; - UserImports(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData) { + UserImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/UserStaticImports.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/UserStaticImports.java index be09b2fd11..964ffd2b31 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/UserStaticImports.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/UserStaticImports.java @@ -24,8 +24,7 @@ class UserStaticImports implements Imports { private final GeneratedClassMetaData generatedClassMetaData; - UserStaticImports(BlockBuilder blockBuilder, - GeneratedClassMetaData generatedClassMetaData) { + UserStaticImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) { this.blockBuilder = blockBuilder; this.generatedClassMetaData = generatedClassMetaData; } @@ -40,8 +39,7 @@ class UserStaticImports implements Imports { @Override public boolean accept() { return this.generatedClassMetaData.configProperties.getStaticImports() != null - && this.generatedClassMetaData.configProperties - .getStaticImports().length > 0; + && this.generatedClassMetaData.configProperties.getStaticImports().length > 0; } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/ContractVerifierHttpMetaData.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/ContractVerifierHttpMetaData.java index 0fcd42a102..1d245557a0 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/ContractVerifierHttpMetaData.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/ContractVerifierHttpMetaData.java @@ -50,10 +50,8 @@ public class ContractVerifierHttpMetaData implements SpringCloudContractMetadata private Protocol protocol = Protocol.HTTP_1_1; @NonNull - public static ContractVerifierHttpMetaData fromMetadata( - Map metadata) { - return MetadataUtil.fromMetadata(metadata, METADATA_KEY, - new ContractVerifierHttpMetaData()); + public static ContractVerifierHttpMetaData fromMetadata(Map metadata) { + return MetadataUtil.fromMetadata(metadata, METADATA_KEY, new ContractVerifierHttpMetaData()); } @Override @@ -110,8 +108,7 @@ public class ContractVerifierHttpMetaData implements SpringCloudContractMetadata */ @Nullable public static Scheme fromString(String scheme) { - return Arrays.stream(values()).filter(p -> p.name().equalsIgnoreCase(scheme)) - .findFirst().orElse(null); + return Arrays.stream(values()).filter(p -> p.name().equalsIgnoreCase(scheme)).findFirst().orElse(null); } } @@ -184,9 +181,7 @@ public class ContractVerifierHttpMetaData implements SpringCloudContractMetadata */ @Nullable public static Protocol fromString(String protocol) { - return Arrays.stream(values()) - .filter(p -> p.protocol.equalsIgnoreCase(protocol)).findFirst() - .orElse(null); + return Arrays.stream(values()).filter(p -> p.protocol.equalsIgnoreCase(protocol)).findFirst().orElse(null); } } 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 38f8be1fc7..4396e0dde3 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 @@ -56,18 +56,15 @@ public class OkHttpHttpVerifier implements HttpVerifier { @Override public Response exchange(Request request) { String requestContentType = request.contentType(); - OkHttpClient client = new OkHttpClient.Builder() - .protocols(toProtocol(request.protocol().toString())).build(); + OkHttpClient client = new OkHttpClient.Builder().protocols(toProtocol(request.protocol().toString())).build(); Map headers = stringTyped(request.headers()); if (!request.cookies().isEmpty()) { - headers.put("Set-Cookie", - request.cookies().entrySet().stream() - .map(e -> e.getKey() + "=" + e.getValue().toString()) - .collect(Collectors.joining(";"))); + headers.put("Set-Cookie", request.cookies().entrySet().stream() + .map(e -> e.getKey() + "=" + e.getValue().toString()).collect(Collectors.joining(";"))); } okhttp3.Request req = new okhttp3.Request.Builder().url(url(request)) - .method(request.method().name(), requestBody(request, requestContentType)) - .headers(Headers.of(headers)).build(); + .method(request.method().name(), requestBody(request, requestContentType)).headers(Headers.of(headers)) + .build(); try (okhttp3.Response res = client.newCall(req).execute()) { return response(res); } @@ -78,13 +75,10 @@ public class OkHttpHttpVerifier implements HttpVerifier { private String url(Request request) { String url = request.scheme().name().toLowerCase() + ":" + this.hostAndPort - + (request.path().startsWith("/") ? request.path() - : "/" + request.path()); + + (request.path().startsWith("/") ? request.path() : "/" + request.path()); if (!request.queryParams().isEmpty()) { - return url + "?" - + request.queryParams().stream() - .map(e -> e.getKey() + "=" + e.getValue()) - .collect(Collectors.joining("&")); + return url + "?" + request.queryParams().stream().map(e -> e.getKey() + "=" + e.getValue()) + .collect(Collectors.joining("&")); } return url; } @@ -111,16 +105,13 @@ public class OkHttpHttpVerifier implements HttpVerifier { private Response response(okhttp3.Response res) throws IOException { byte[] responseBody = responseBody(res); - return Response.builder().body(responseBody).statusCode(res.code()) - .headers(withSingleHeader(res)).cookies(res.headers().values("Set-Cookie") - .stream().flatMap(s -> Arrays.stream(s.split(";"))).map(s -> { - String[] singleCookie = s.split("="); - return new AbstractMap.SimpleEntry<>(singleCookie[0], - singleCookie.length > 1 ? singleCookie[1] : ""); - }) - .collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, - AbstractMap.SimpleEntry::getValue, (a, b) -> a, - HashMap::new))) + return Response.builder().body(responseBody).statusCode(res.code()).headers(withSingleHeader(res)).cookies( + res.headers().values("Set-Cookie").stream().flatMap(s -> Arrays.stream(s.split(";"))).map(s -> { + String[] singleCookie = s.split("="); + return new AbstractMap.SimpleEntry<>(singleCookie[0], + singleCookie.length > 1 ? singleCookie[1] : ""); + }).collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue, + (a, b) -> a, HashMap::new))) .build(); } @@ -138,13 +129,12 @@ public class OkHttpHttpVerifier implements HttpVerifier { } private Map withSingleHeader(okhttp3.Response res) { - return res.headers().toMultimap().entrySet().stream().collect(Collectors.toMap( - Map.Entry::getKey, e -> e.getValue().get(0), (a, b) -> a, HashMap::new)); + return res.headers().toMultimap().entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0), (a, b) -> a, HashMap::new)); } private Map stringTyped(Map headers) { - return headers.entrySet().stream().collect( - Collectors.toMap(Map.Entry::getKey, e -> e.getValue().toString())); + return headers.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().toString())); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Request.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Request.java index 2e079830c1..b193869e05 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Request.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Request.java @@ -50,16 +50,14 @@ public class Request { private final Map cookies; - Request(ContractVerifierHttpMetaData.Protocol protocol, - ContractVerifierHttpMetaData.Scheme scheme, HttpMethods.HttpMethod method, - String path, List> queryParameters, + Request(ContractVerifierHttpMetaData.Protocol protocol, ContractVerifierHttpMetaData.Scheme scheme, + HttpMethods.HttpMethod method, String path, List> queryParameters, Body body, Map headers, Map cookies) { this.protocol = protocol; this.scheme = scheme; this.method = method; this.path = path; - this.queryParameters = queryParameters == null ? new LinkedList<>() - : queryParameters; + this.queryParameters = queryParameters == null ? new LinkedList<>() : queryParameters; this.body = body; this.headers = headers == null ? new HashMap<>() : headers; this.cookies = cookies == null ? new HashMap<>() : cookies; @@ -69,9 +67,8 @@ public class Request { * @return content type from headers */ public String contentType() { - Object value = this.headers.entrySet().stream() - .filter(e -> e.getKey().toLowerCase().equals("content-type")).findFirst() - .orElse(new AbstractMap.SimpleEntry<>("", null)).getValue(); + Object value = this.headers.entrySet().stream().filter(e -> e.getKey().toLowerCase().equals("content-type")) + .findFirst().orElse(new AbstractMap.SimpleEntry<>("", null)).getValue(); if (value == null) { return null; } @@ -147,14 +144,9 @@ public class Request { * @return a builder with request data filled in */ public static Request.Builder from(Request request) { - return new MethodBuilder() - .method(request.method.getMethodName(), request.path) - .scheme(request.scheme) - .protocol(request.protocol) - .queryParams(request.queryParameters) - .headers(request.headers) - .cookies(request.cookies) - .body(request.body); + return new MethodBuilder().method(request.method.getMethodName(), request.path).scheme(request.scheme) + .protocol(request.protocol).queryParams(request.queryParameters).headers(request.headers) + .cookies(request.cookies).body(request.body); } /** @@ -396,8 +388,8 @@ public class Request { * @return built {@link Request} */ public Request build() { - return new Request(this.protocol, this.scheme, this.method, this.path, - this.queryParameters, this.body, this.headers, this.cookies); + return new Request(this.protocol, this.scheme, this.method, this.path, this.queryParameters, this.body, + this.headers, this.cookies); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Response.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Response.java index 2f291b505b..923ee853f7 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Response.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/http/Response.java @@ -37,8 +37,7 @@ public class Response { private final Map cookies; - Response(int statusCode, Body body, Map headers, - Map cookies) { + Response(int statusCode, Body body, Map headers, Map cookies) { this.statusCode = statusCode; this.body = body; this.headers = headers; @@ -57,8 +56,7 @@ public class Response { * @return header value or null if not present */ public String header(String key) { - return this.headers.entrySet().stream() - .filter(e -> e.getKey().equalsIgnoreCase(key)).findFirst() + return this.headers.entrySet().stream().filter(e -> e.getKey().equalsIgnoreCase(key)).findFirst() .map(e -> e.getValue().toString()).orElse(null); } @@ -67,8 +65,7 @@ public class Response { * @return header value or null if not present */ public String cookie(String key) { - return this.cookies.entrySet().stream() - .filter(e -> e.getKey().equalsIgnoreCase(key)).findFirst() + return this.cookies.entrySet().stream().filter(e -> e.getKey().equalsIgnoreCase(key)).findFirst() .map(e -> e.getValue().toString()).orElse(null); } @@ -100,17 +97,13 @@ public class Response { return this.cookies; } - /** * @param response template of a response * @return builder filled with response data */ public static Builder from(Response response) { - return new Builder() - .headers(response.headers) - .statusCode(response.statusCode) - .cookies(response.cookies) - .body(response.body); + return new Builder().headers(response.headers).statusCode(response.statusCode).cookies(response.cookies) + .body(response.body); } /** diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/ContractHttpDocsSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/ContractHttpDocsSpec.groovy index 215162577b..954e58e51f 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/ContractHttpDocsSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/ContractHttpDocsSpec.groovy @@ -368,8 +368,8 @@ class ContractHttpDocsSpec extends Specification { String test = singleTestGenerator(optionals) expect: String expectedTest = -// tag::optionals_test[] """\ +// tag::optionals_test[] package com.example import com.jayway.jsonpath.DocumentContext @@ -406,9 +406,15 @@ class FooSpec extends Specification { \t} } -""" // end::optionals_test[] - test.trim() == expectedTest.trim() +""" + + test.trim() + .replace("\\\t", "\t") == expectedTest.trim() + .replace(" ", "\t") + .replace("\\\t", "\t") + .replace("// tag::optionals_test[]\n", "") + .replace("\n// end::optionals_test[]", "") and: SyntaxChecker.tryToCompile("spock", test) } diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientMethodBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientMethodBuilderSpec.groovy index 6a40910e59..de55bc0349 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientMethodBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/JaxRsClientMethodBuilderSpec.groovy @@ -914,8 +914,8 @@ class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStub String test = singleTestGenerator(contractDsl) then: String expectedResponse = -// tag::jaxrs[] """\ +// tag::jaxrs[] package com.example; import com.jayway.jsonpath.DocumentContext; @@ -932,40 +932,45 @@ import static javax.ws.rs.client.Entity.*; @SuppressWarnings("rawtypes") public class FooTest { -\tWebTarget webTarget; + WebTarget webTarget; -\t@Test -\tpublic void validate_() throws Exception { + @Test + public void validate_() throws Exception { -\t\t// when: -\t\t\tResponse response = webTarget -\t\t\t\t\t\t\t.path("/users") -\t\t\t\t\t\t\t.queryParam("limit", "10") -\t\t\t\t\t\t\t.queryParam("offset", "20") -\t\t\t\t\t\t\t.queryParam("filter", "email") -\t\t\t\t\t\t\t.queryParam("sort", "name") -\t\t\t\t\t\t\t.queryParam("search", "55") -\t\t\t\t\t\t\t.queryParam("age", "99") -\t\t\t\t\t\t\t.queryParam("name", "Denis.Stepanov") -\t\t\t\t\t\t\t.queryParam("email", "bob@email.com") -\t\t\t\t\t\t\t.request() -\t\t\t\t\t\t\t.build("GET") -\t\t\t\t\t\t\t.invoke(); -\t\t\tString responseAsString = response.readEntity(String.class); + // when: + Response response = webTarget + .path("/users") + .queryParam("limit", "10") + .queryParam("offset", "20") + .queryParam("filter", "email") + .queryParam("sort", "name") + .queryParam("search", "55") + .queryParam("age", "99") + .queryParam("name", "Denis.Stepanov") + .queryParam("email", "bob@email.com") + .request() + .build("GET") + .invoke(); + String responseAsString = response.readEntity(String.class); -\t\t// then: -\t\t\tassertThat(response.getStatus()).isEqualTo(200); + // then: + assertThat(response.getStatus()).isEqualTo(200); -\t\t// and: -\t\t\tDocumentContext parsedJson = JsonPath.parse(responseAsString); -\t\t\tassertThatJson(parsedJson).field("['property1']").isEqualTo("a"); -\t} + // and: + DocumentContext parsedJson = JsonPath.parse(responseAsString); + assertThatJson(parsedJson).field("['property1']").isEqualTo("a"); + } } -""" // end::jaxrs[] - test.trim() == expectedResponse.trim() +""" + test.trim() + .replace("\\\t", "\t") == expectedResponse.trim() + .replace(" ", "\t") + .replace("\\\t", "\t") + .replace("// tag::jaxrs[]\n", "") + .replace("\n\n// end::jaxrs[]", "") and: stubMappingIsValidWireMockStub(contractDsl) and: diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy index 5958ba39d0..5927d5ae5d 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MessagingMethodBodyBuilderSpec.groovy @@ -98,8 +98,8 @@ class MessagingMethodBodyBuilderSpec extends Specification { String test = singleTestGenerator(contractDsl) then: String expectedMessage = -// tag::trigger_method_test[] '''\ +// tag::trigger_method_test[] package com.example import com.jayway.jsonpath.DocumentContext @@ -118,34 +118,46 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\twhen: -\t\t\tbookReturnedTriggered() + def validate_foo() throws Exception { + when: + bookReturnedTriggered() -\t\tthen: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("activemq:output", -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tresponse != null + then: + ContractVerifierMessage response = contractVerifierMessaging.receive("activemq:output", + contract(this, "foo.yml")) + response != null -\t\tand: -\t\t\tresponse.getHeader("BOOK-NAME") != null -\t\t\tresponse.getHeader("BOOK-NAME").toString() == 'foo' -\t\t\tresponse.getHeader("contentType") != null -\t\t\tresponse.getHeader("contentType").toString() == 'application/json' + and: + response.getHeader("BOOK-NAME") != null + response.getHeader("BOOK-NAME").toString() == 'foo' + response.getHeader("contentType") != null + response.getHeader("contentType").toString() == 'application/json' -\t\tand: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) -\t\t\tassertThatJson(parsedJson).field("['bookName']").isEqualTo("foo") -\t} + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) + assertThatJson(parsedJson).field("['bookName']").isEqualTo("foo") + } } - -''' // end::trigger_method_test[] - test.trim() == expectedMessage.trim() +''' + test.trim() == messageWithoutTags(expectedMessage, "trigger_method_test") + } + + + String messageWithoutTags(String message) { + return messageWithoutTags(message, "invalidTag") + } + + String messageWithoutTags(String message, String tagName) { + return message.trim() + .replace(" ", " ") + .replace("\\ ", " ") + .replace("// tag::${tagName}[]\n", "") + .replace("\n// end::${tagName}[]", "") } def "should work for triggered based messaging with JUnit"() { @@ -171,8 +183,8 @@ class FooSpec extends Specification { String test = singleTestGenerator(contractDsl) then: String expectedMessage = -// tag::trigger_method_junit_test[] '''\ +// tag::trigger_method_junit_test[] package com.example; import com.jayway.jsonpath.DocumentContext; @@ -192,35 +204,34 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// when: -\t\t\tbookReturnedTriggered(); + @Test + public void validate_foo() throws Exception { + // when: + bookReturnedTriggered(); -\t\t// then: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("activemq:output", -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tassertThat(response).isNotNull(); + // then: + ContractVerifierMessage response = contractVerifierMessaging.receive("activemq:output", + contract(this, "foo.yml")); + assertThat(response).isNotNull(); -\t\t// and: -\t\t\tassertThat(response.getHeader("BOOK-NAME")).isNotNull(); -\t\t\tassertThat(response.getHeader("BOOK-NAME").toString()).isEqualTo("foo"); -\t\t\tassertThat(response.getHeader("contentType")).isNotNull(); -\t\t\tassertThat(response.getHeader("contentType").toString()).isEqualTo("application/json"); + // and: + assertThat(response.getHeader("BOOK-NAME")).isNotNull(); + assertThat(response.getHeader("BOOK-NAME").toString()).isEqualTo("foo"); + assertThat(response.getHeader("contentType")).isNotNull(); + assertThat(response.getHeader("contentType").toString()).isEqualTo("application/json"); -\t\t// and: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); -\t\t\tassertThatJson(parsedJson).field("['bookName']").isEqualTo("foo"); -\t} + // and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); + assertThatJson(parsedJson).field("['bookName']").isEqualTo("foo"); + } } - -''' // end::trigger_method_junit_test[] - test.trim() == expectedMessage.trim() +''' + test.trim() == messageWithoutTags(expectedMessage, "trigger_method_junit_test") } def "should generate tests triggered by a message for Spock"() { @@ -254,8 +265,8 @@ public class FooTest { String test = singleTestGenerator(contractDsl) then: String expectedMessage = -// tag::trigger_message_spock[] """\ +// tag::trigger_message_spock[] package com.example import com.jayway.jsonpath.DocumentContext @@ -274,40 +285,39 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\tgiven: -\t\t\tContractVerifierMessage inputMessage = contractVerifierMessaging.create( -\t\t\t\t\t'''{"bookName":"foo"}''' -\t\t\t\t\t\t, headers() -\t\t\t\t\t\t\t.header("sample", "header") -\t\t\t) + def validate_foo() throws Exception { + given: + ContractVerifierMessage inputMessage = contractVerifierMessaging.create( + '''{"bookName":"foo"}''' + , headers() + .header("sample", "header") + ) -\t\twhen: -\t\t\tcontractVerifierMessaging.send(inputMessage, "jms:input", -\t\t\t\t\tcontract(this, "foo.yml")) + when: + contractVerifierMessaging.send(inputMessage, "jms:input", + contract(this, "foo.yml")) -\t\tthen: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tresponse != null + then: + ContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", + contract(this, "foo.yml")) + response != null -\t\tand: -\t\t\tresponse.getHeader("BOOK-NAME") != null -\t\t\tresponse.getHeader("BOOK-NAME").toString() == 'foo' + and: + response.getHeader("BOOK-NAME") != null + response.getHeader("BOOK-NAME").toString() == 'foo' -\t\tand: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) -\t\t\tassertThatJson(parsedJson).field("['bookName']").isEqualTo("foo") -\t} + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) + assertThatJson(parsedJson).field("['bookName']").isEqualTo("foo") + } } - -""" // end::trigger_message_spock[] - test.trim() == expectedMessage.trim() +""" + test.trim() == messageWithoutTags(expectedMessage, "trigger_message_spock") } def "should generate tests triggered by a message for JUnit"() { @@ -340,8 +350,8 @@ class FooSpec extends Specification { String test = singleTestGenerator(contractDsl) then: String expectedMessage = -// tag::trigger_message_junit[] '''\ +// tag::trigger_message_junit[] package com.example; import com.jayway.jsonpath.DocumentContext; @@ -361,41 +371,40 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// given: -\t\t\tContractVerifierMessage inputMessage = contractVerifierMessaging.create( -\t\t\t\t\t"{\\"bookName\\":\\"foo\\"}" -\t\t\t\t\t\t, headers() -\t\t\t\t\t\t\t.header("sample", "header") -\t\t\t); + @Test + public void validate_foo() throws Exception { + // given: + ContractVerifierMessage inputMessage = contractVerifierMessaging.create( + "{\\"bookName\\":\\"foo\\"}" + , headers() + .header("sample", "header") + ); -\t\t// when: -\t\t\tcontractVerifierMessaging.send(inputMessage, "jms:input", -\t\t\t\t\tcontract(this, "foo.yml")); + // when: + contractVerifierMessaging.send(inputMessage, "jms:input", + contract(this, "foo.yml")); -\t\t// then: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tassertThat(response).isNotNull(); + // then: + ContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", + contract(this, "foo.yml")); + assertThat(response).isNotNull(); -\t\t// and: -\t\t\tassertThat(response.getHeader("BOOK-NAME")).isNotNull(); -\t\t\tassertThat(response.getHeader("BOOK-NAME").toString()).isEqualTo("foo"); + // and: + assertThat(response.getHeader("BOOK-NAME")).isNotNull(); + assertThat(response.getHeader("BOOK-NAME").toString()).isEqualTo("foo"); -\t\t// and: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); -\t\t\tassertThatJson(parsedJson).field("['bookName']").isEqualTo("foo"); -\t} + // and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); + assertThatJson(parsedJson).field("['bookName']").isEqualTo("foo"); + } } - -''' // end::trigger_message_junit[] - test.trim() == expectedMessage.trim() +''' + test.trim() == messageWithoutTags(expectedMessage, "trigger_message_junit") } def "should generate tests without destination, triggered by a message"() { @@ -420,9 +429,9 @@ public class FooTest { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = -// tag::trigger_no_output_spock[] + String expectedMessage = """\ +// tag::trigger_no_output_spock[] package com.example import com.jayway.jsonpath.DocumentContext @@ -441,30 +450,30 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\tgiven: -\t\t\tContractVerifierMessage inputMessage = contractVerifierMessaging.create( -\t\t\t\t\t'''{"bookName":"foo"}''' -\t\t\t\t\t\t, headers() -\t\t\t\t\t\t\t.header("sample", "header") -\t\t\t) + def validate_foo() throws Exception { + given: + ContractVerifierMessage inputMessage = contractVerifierMessaging.create( + '''{"bookName":"foo"}''' + , headers() + .header("sample", "header") + ) -\t\twhen: -\t\t\tcontractVerifierMessaging.send(inputMessage, "jms:delete", -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tbookWasDeleted() + when: + contractVerifierMessaging.send(inputMessage, "jms:delete", + contract(this, "foo.yml")) + bookWasDeleted() -\t\tthen: -\t\t\tnoExceptionThrown() -\t} + then: + noExceptionThrown() + } } -""" // end::trigger_no_output_spock[] - test.trim() == expectedMsg.trim() +""" + test.trim() == messageWithoutTags(expectedMessage, "trigger_no_output_spock") } def "should generate tests without destination, triggered by a message for JUnit"() { @@ -488,9 +497,9 @@ class FooSpec extends Specification { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = -// tag::trigger_no_output_junit[] + String expectedMessage = """\ +// tag::trigger_no_output_junit[] package com.example; import com.jayway.jsonpath.DocumentContext; @@ -510,30 +519,29 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// given: -\t\t\tContractVerifierMessage inputMessage = contractVerifierMessaging.create( -\t\t\t\t\t"{\\"bookName\\":\\"foo\\"}" -\t\t\t\t\t\t, headers() -\t\t\t\t\t\t\t.header("sample", "header") -\t\t\t); + @Test + public void validate_foo() throws Exception { + // given: + ContractVerifierMessage inputMessage = contractVerifierMessaging.create( + "{\\"bookName\\":\\"foo\\"}" + , headers() + .header("sample", "header") + ); -\t\t// when: -\t\t\tcontractVerifierMessaging.send(inputMessage, "jms:delete", -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tbookWasDeleted(); + // when: + contractVerifierMessaging.send(inputMessage, "jms:delete", + contract(this, "foo.yml")); + bookWasDeleted(); -\t} + } } - -""" // end::trigger_no_output_junit[] - test.trim() == expectedMsg.trim() +""" + test.trim() == messageWithoutTags(expectedMessage, "trigger_no_output_junit") } def "should generate tests without headers for JUnit"() { @@ -561,7 +569,7 @@ public class FooTest { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = + String expectedMessage = """\ package com.example; @@ -582,35 +590,35 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// given: -\t\t\tContractVerifierMessage inputMessage = contractVerifierMessaging.create( -\t\t\t\t\t"{\\"bookName\\":\\"foo\\"}" -\t\t\t\t\t\t, headers() -\t\t\t\t\t\t\t.header("sample", "header") -\t\t\t); + @Test + public void validate_foo() throws Exception { + // given: + ContractVerifierMessage inputMessage = contractVerifierMessaging.create( + "{\\"bookName\\":\\"foo\\"}" + , headers() + .header("sample", "header") + ); -\t\t// when: -\t\t\tcontractVerifierMessaging.send(inputMessage, "jms:input", -\t\t\t\t\tcontract(this, "foo.yml")); + // when: + contractVerifierMessaging.send(inputMessage, "jms:input", + contract(this, "foo.yml")); -\t\t// then: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tassertThat(response).isNotNull(); + // then: + ContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", + contract(this, "foo.yml")); + assertThat(response).isNotNull(); -\t\t// and: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); -\t\t\tassertThatJson(parsedJson).field("['bookName']").isEqualTo("foo"); -\t} + // and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); + assertThatJson(parsedJson).field("['bookName']").isEqualTo("foo"); + } } """ - test.trim() == expectedMsg.trim() + test.trim() == messageWithoutTags(expectedMessage, "expectedMsg") } def "should generate tests without headers for Spock"() { @@ -638,7 +646,7 @@ public class FooTest { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = + String expectedMessage = """\ package com.example @@ -658,39 +666,35 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\tgiven: -\t\t\tContractVerifierMessage inputMessage = contractVerifierMessaging.create( -\t\t\t\t\t'''{"bookName":"foo"}''' -\t\t\t\t\t\t, headers() -\t\t\t\t\t\t\t.header("sample", "header") -\t\t\t) + def validate_foo() throws Exception { + given: + ContractVerifierMessage inputMessage = contractVerifierMessaging.create( + '''{"bookName":"foo"}''' + , headers() + .header("sample", "header") + ) -\t\twhen: -\t\t\tcontractVerifierMessaging.send(inputMessage, "jms:input", -\t\t\t\t\tcontract(this, "foo.yml")) + when: + contractVerifierMessaging.send(inputMessage, "jms:input", + contract(this, "foo.yml")) -\t\tthen: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tresponse != null + then: + ContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", + contract(this, "foo.yml")) + response != null -\t\tand: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) -\t\t\tassertThatJson(parsedJson).field("['bookName']").isEqualTo("foo") -\t} + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) + assertThatJson(parsedJson).field("['bookName']").isEqualTo("foo") + } } """ - test.trim() == expectedMsg.trim() - } - - private String stripped(String text) { - return text.stripIndent().stripMargin().replace(' ', '').replace('\n', '').replace('\t', '').replaceAll("\\W", "") + test.trim() == messageWithoutTags(expectedMessage, "expectedMsg") } def "should generate tests without headers for JUnit with consumer / producer notation"() { @@ -722,7 +726,7 @@ class FooSpec extends Specification { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = + String expectedMessage = ''' package com.example; @@ -743,35 +747,35 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// given: -\t\t\tContractVerifierMessage inputMessage = contractVerifierMessaging.create( -\t\t\t\t\t"{\\"bookName\\":\\"foo\\"}" -\t\t\t\t\t\t, headers() -\t\t\t\t\t\t\t.header("sample", "header") -\t\t\t); + @Test + public void validate_foo() throws Exception { + // given: + ContractVerifierMessage inputMessage = contractVerifierMessaging.create( + "{\\"bookName\\":\\"foo\\"}" + , headers() + .header("sample", "header") + ); -\t\t// when: -\t\t\tcontractVerifierMessaging.send(inputMessage, "jms:input", -\t\t\t\t\tcontract(this, "foo.yml")); + // when: + contractVerifierMessaging.send(inputMessage, "jms:input", + contract(this, "foo.yml")); -\t\t// then: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tassertThat(response).isNotNull(); + // then: + ContractVerifierMessage response = contractVerifierMessaging.receive("jms:output", + contract(this, "foo.yml")); + assertThat(response).isNotNull(); -\t\t// and: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); -\t\t\tassertThatJson(parsedJson).field("['bookName']").isEqualTo("foo"); -\t} + // and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); + assertThatJson(parsedJson).field("['bookName']").isEqualTo("foo"); + } } ''' - test.trim() == expectedMsg.trim() + test.trim() == messageWithoutTags(expectedMessage, "expectedMsg") } @Issue("336") @@ -801,7 +805,7 @@ public class FooTest { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = + String expectedMessage = """\ package com.example; @@ -822,32 +826,32 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// when: -\t\t\trequestIsCalled(); + @Test + public void validate_foo() throws Exception { + // when: + requestIsCalled(); -\t\t// then: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("topic.rateablequote", -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tassertThat(response).isNotNull(); + // then: + ContractVerifierMessage response = contractVerifierMessaging.receive("topic.rateablequote", + contract(this, "foo.yml")); + assertThat(response).isNotNull(); -\t\t// and: -\t\t\tassertThat(response.getHeader("processId")).isNotNull(); -\t\t\tassertThat(response.getHeader("processId").toString()).matches("[0-9]+"); + // and: + assertThat(response.getHeader("processId")).isNotNull(); + assertThat(response.getHeader("processId").toString()).matches("[0-9]+"); -\t\t// and: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); -\t\t\tassertThatJson(parsedJson).field("['eventId']").matches("[0-9]+"); -\t} + // and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); + assertThatJson(parsedJson).field("['eventId']").matches("[0-9]+"); + } } """ - test.trim() == expectedMsg.trim() + test.trim() == messageWithoutTags(expectedMessage, "expectedMsg") } @Issue("567") @@ -1012,7 +1016,7 @@ public class FooTest { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = + String expectedMessage = """\ package com.example @@ -1032,30 +1036,30 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\twhen: -\t\t\trequestIsCalled() + def validate_foo() throws Exception { + when: + requestIsCalled() -\t\tthen: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("topic.rateablequote", -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tresponse != null + then: + ContractVerifierMessage response = contractVerifierMessaging.receive("topic.rateablequote", + contract(this, "foo.yml")) + response != null -\t\tand: -\t\t\tresponse.getHeader("processId") != null -\t\t\tresponse.getHeader("processId").toString() ==~ java.util.regex.Pattern.compile('[0-9]+') + and: + response.getHeader("processId") != null + response.getHeader("processId").toString() ==~ java.util.regex.Pattern.compile('[0-9]+') -\t\tand: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) -\t\t\tassertThatJson(parsedJson).field("['eventId']").matches("[0-9]+") -\t} + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) + assertThatJson(parsedJson).field("['eventId']").matches("[0-9]+") + } } """ - test.trim() == expectedMsg.trim() + test.trim() == messageWithoutTags(expectedMessage, "expectedMsg") } @Issue("587") @@ -1084,7 +1088,7 @@ class FooSpec extends Specification { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = + String expectedMessage = """\ package com.example @@ -1104,30 +1108,30 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\twhen: -\t\t\trequestIsCalled() + def validate_foo() throws Exception { + when: + requestIsCalled() -\t\tthen: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("topic.rateablequote", -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tresponse != null + then: + ContractVerifierMessage response = contractVerifierMessaging.receive("topic.rateablequote", + contract(this, "foo.yml")) + response != null -\t\tand: -\t\t\tresponse.getHeader("processId") != null -\t\t\tresponse.getHeader("processId").toString() ==~ java.util.regex.Pattern.compile('[\\\\S\\\\s]+') + and: + response.getHeader("processId") != null + response.getHeader("processId").toString() ==~ java.util.regex.Pattern.compile('[\\\\S\\\\s]+') -\t\tand: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) -\t\t\tassertThatJson(parsedJson).field("['eventId']").matches("[\\\\S\\\\s]+") -\t} + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) + assertThatJson(parsedJson).field("['eventId']").matches("[\\\\S\\\\s]+") + } } """ - test.trim() == expectedMsg.trim() + test.trim() == messageWithoutTags(expectedMessage, "expectedMsg") } @Issue("440") @@ -1156,7 +1160,7 @@ class FooSpec extends Specification { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = + String expectedMessage = """\ package com.example @@ -1176,30 +1180,30 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\twhen: -\t\t\trequestIsCalled() + def validate_foo() throws Exception { + when: + requestIsCalled() -\t\tthen: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive(toString(), -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tresponse != null + then: + ContractVerifierMessage response = contractVerifierMessaging.receive(toString(), + contract(this, "foo.yml")) + response != null -\t\tand: -\t\t\tresponse.getHeader("processId") != null -\t\t\tresponse.getHeader("processId").toString() ==~ java.util.regex.Pattern.compile('[0-9]+') + and: + response.getHeader("processId") != null + response.getHeader("processId").toString() ==~ java.util.regex.Pattern.compile('[0-9]+') -\t\tand: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) -\t\t\tassertThatJson(parsedJson).field("['eventId']").matches("[0-9]+") -\t} + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) + assertThatJson(parsedJson).field("['eventId']").matches("[0-9]+") + } } """ - test.trim() == expectedMsg.trim() + test.trim() == messageWithoutTags(expectedMessage, "expectedMsg") } @Issue("440") @@ -1229,7 +1233,7 @@ class FooSpec extends Specification { when: String test = singleTestGenerator(contractDsl) then: - String expectedMsg = + String expectedMessage = """\ package com.example; @@ -1250,31 +1254,31 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// when: -\t\t\trequestIsCalled(); + @Test + public void validate_foo() throws Exception { + // when: + requestIsCalled(); -\t\t// then: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive(toString(), -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tassertThat(response).isNotNull(); + // then: + ContractVerifierMessage response = contractVerifierMessaging.receive(toString(), + contract(this, "foo.yml")); + assertThat(response).isNotNull(); -\t\t// and: -\t\t\tassertThat(response.getHeader("processId")).isNotNull(); -\t\t\tassertThat(response.getHeader("processId").toString()).matches("[0-9]+"); + // and: + assertThat(response.getHeader("processId")).isNotNull(); + assertThat(response.getHeader("processId").toString()).matches("[0-9]+"); -\t\t// and: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); -\t\t\tassertThatJson(parsedJson).field("['eventId']").matches("[0-9]+"); -\t} + // and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); + assertThatJson(parsedJson).field("['eventId']").matches("[0-9]+"); + } } """ - test.trim() == expectedMsg.trim() + test.trim() == messageWithoutTags(expectedMessage, "expectedMsg") } @Issue('#620') @@ -1329,26 +1333,26 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\twhen: -\t\t\tfoo() + def validate_foo() throws Exception { + when: + foo() -\t\tthen: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("messageExchange", -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tresponse != null + then: + ContractVerifierMessage response = contractVerifierMessaging.receive("messageExchange", + contract(this, "foo.yml")) + response != null -\t\tand: -\t\t\tresponse.getHeader("Authorization") != null -\t\t\tresponse.getHeader("Authorization").toString() ==~ java.util.regex.Pattern.compile('Bearer [A-Za-z0-9\\\\-\\\\._~\\\\+\\\\/]+=*') + and: + response.getHeader("Authorization") != null + response.getHeader("Authorization").toString() ==~ java.util.regex.Pattern.compile('Bearer [A-Za-z0-9\\\\-\\\\._~\\\\+\\\\/]+=*') -\t\tand: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) -\t\t\tassertThatJson(parsedJson).field("['field']").isEqualTo("value") -\t} + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) + assertThatJson(parsedJson).field("['field']").isEqualTo("value") + } } """ @@ -1372,27 +1376,27 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// when: -\t\t\tfoo(); + @Test + public void validate_foo() throws Exception { + // when: + foo(); -\t\t// then: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("messageExchange", -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tassertThat(response).isNotNull(); + // then: + ContractVerifierMessage response = contractVerifierMessaging.receive("messageExchange", + contract(this, "foo.yml")); + assertThat(response).isNotNull(); -\t\t// and: -\t\t\tassertThat(response.getHeader("Authorization")).isNotNull(); -\t\t\tassertThat(response.getHeader("Authorization").toString()).matches("Bearer [A-Za-z0-9\\\\-\\\\._~\\\\+\\\\/]+=*"); + // and: + assertThat(response.getHeader("Authorization")).isNotNull(); + assertThat(response.getHeader("Authorization").toString()).matches("Bearer [A-Za-z0-9\\\\-\\\\._~\\\\+\\\\/]+=*"); -\t\t// and: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); -\t\t\tassertThatJson(parsedJson).field("['field']").isEqualTo("value"); -\t} + // and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); + assertThatJson(parsedJson).field("['field']").isEqualTo("value"); + } } """ @@ -1444,33 +1448,33 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\tgiven: -\t\t\tContractVerifierMessage inputMessage = contractVerifierMessaging.create( -\t\t\t\t\tfileToBytes(this, "foo_request_request.pdf") -\t\t\t\t\t\t, headers() -\t\t\t\t\t\t\t.header("contentType", "application/octet-stream") -\t\t\t) + def validate_foo() throws Exception { + given: + ContractVerifierMessage inputMessage = contractVerifierMessaging.create( + fileToBytes(this, "foo_request_request.pdf") + , headers() + .header("contentType", "application/octet-stream") + ) -\t\twhen: -\t\t\tcontractVerifierMessaging.send(inputMessage, "foo", -\t\t\t\t\tcontract(this, "foo.yml")) + when: + contractVerifierMessaging.send(inputMessage, "foo", + contract(this, "foo.yml")) -\t\tthen: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("messageExchange", -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tresponse != null + then: + ContractVerifierMessage response = contractVerifierMessaging.receive("messageExchange", + contract(this, "foo.yml")) + response != null -\t\tand: -\t\t\tresponse.getHeader("contentType") != null -\t\t\tresponse.getHeader("contentType").toString() == 'application/octet-stream' + and: + response.getHeader("contentType") != null + response.getHeader("contentType").toString() == 'application/octet-stream' -\t\tand: -\t\t\tresponse.getPayloadAsByteArray() == fileToBytes(this, "foo_response_response.pdf") -\t} + and: + response.getPayloadAsByteArray() == fileToBytes(this, "foo_response_response.pdf") + } } """ @@ -1491,34 +1495,34 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// given: -\t\t\tContractVerifierMessage inputMessage = contractVerifierMessaging.create( -\t\t\t\t\tfileToBytes(this, "foo_request_request.pdf") -\t\t\t\t\t\t, headers() -\t\t\t\t\t\t\t.header("contentType", "application/octet-stream") -\t\t\t); + @Test + public void validate_foo() throws Exception { + // given: + ContractVerifierMessage inputMessage = contractVerifierMessaging.create( + fileToBytes(this, "foo_request_request.pdf") + , headers() + .header("contentType", "application/octet-stream") + ); -\t\t// when: -\t\t\tcontractVerifierMessaging.send(inputMessage, "foo", -\t\t\t\t\tcontract(this, "foo.yml")); + // when: + contractVerifierMessaging.send(inputMessage, "foo", + contract(this, "foo.yml")); -\t\t// then: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("messageExchange", -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tassertThat(response).isNotNull(); + // then: + ContractVerifierMessage response = contractVerifierMessaging.receive("messageExchange", + contract(this, "foo.yml")); + assertThat(response).isNotNull(); -\t\t// and: -\t\t\tassertThat(response.getHeader("contentType")).isNotNull(); -\t\t\tassertThat(response.getHeader("contentType").toString()).isEqualTo("application/octet-stream"); + // and: + assertThat(response.getHeader("contentType")).isNotNull(); + assertThat(response.getHeader("contentType").toString()).isEqualTo("application/octet-stream"); -\t\t// and: -\t\t\tassertThat(response.getPayloadAsByteArray()).isEqualTo(fileToBytes(this, "foo_response_response.pdf")); -\t} + // and: + assertThat(response.getPayloadAsByteArray()).isEqualTo(fileToBytes(this, "foo_response_response.pdf")); + } } """ @@ -1584,39 +1588,39 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") class FooSpec extends Specification { -\t@Inject ContractVerifierMessaging contractVerifierMessaging -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper + @Inject ContractVerifierMessaging contractVerifierMessaging + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper -\tdef validate_foo() throws Exception { -\t\twhen: -\t\t\tcreateNewPerson() + def validate_foo() throws Exception { + when: + createNewPerson() -\t\tthen: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("personEventsTopic", -\t\t\t\t\tcontract(this, "foo.yml")) -\t\t\tresponse != null + then: + ContractVerifierMessage response = contractVerifierMessaging.receive("personEventsTopic", + contract(this, "foo.yml")) + response != null -\t\tand: -\t\t\tresponse.getHeader("contentType") != null -\t\t\tresponse.getHeader("contentType").toString() == 'application/json' -\t\t\tresponse.getHeader("type") != null -\t\t\tresponse.getHeader("type").toString() == 'person' -\t\t\tresponse.getHeader("eventType") != null -\t\t\tresponse.getHeader("eventType").toString() == 'PersonChangedEvent' -\t\t\tresponse.getHeader("customerId") != null -\t\t\tresponse.getHeader("customerId").toString() ==~ java.util.regex.Pattern.compile('[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}') + and: + response.getHeader("contentType") != null + response.getHeader("contentType").toString() == 'application/json' + response.getHeader("type") != null + response.getHeader("type").toString() == 'person' + response.getHeader("eventType") != null + response.getHeader("eventType").toString() == 'PersonChangedEvent' + response.getHeader("customerId") != null + response.getHeader("customerId").toString() ==~ java.util.regex.Pattern.compile('[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}') -\t\tand: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) -\t\t\tassertThatJson(parsedJson).field("['type']").isEqualTo("CREATED") -\t\t\tassertThatJson(parsedJson).field("['personId']").matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}") -\t\t\tassertThatJson(parsedJson).field("['userId']").matches("([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})?") -\t\t\tassertThatJson(parsedJson).field("['firstName']").matches("[\\\\S\\\\s]+") -\t\t\tassertThatJson(parsedJson).field("['middleName']").matches("([\\\\S\\\\s]+)?") -\t\t\tassertThatJson(parsedJson).field("['lastName']").matches("[\\\\S\\\\s]+") -\t\t\tassertThatJson(parsedJson).field("['version']").matches("-?(\\\\d*\\\\.\\\\d+|\\\\d+)") -\t\t\tassertThatJson(parsedJson).field("['uid']").matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}") -\t} + and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())) + assertThatJson(parsedJson).field("['type']").isEqualTo("CREATED") + assertThatJson(parsedJson).field("['personId']").matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}") + assertThatJson(parsedJson).field("['userId']").matches("([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})?") + assertThatJson(parsedJson).field("['firstName']").matches("[\\\\S\\\\s]+") + assertThatJson(parsedJson).field("['middleName']").matches("([\\\\S\\\\s]+)?") + assertThatJson(parsedJson).field("['lastName']").matches("[\\\\S\\\\s]+") + assertThatJson(parsedJson).field("['version']").matches("-?(\\\\d*\\\\.\\\\d+|\\\\d+)") + assertThatJson(parsedJson).field("['uid']").matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}") + } } """ @@ -1640,40 +1644,40 @@ import static org.springframework.cloud.contract.verifier.util.ContractVerifierU @SuppressWarnings("rawtypes") public class FooTest { -\t@Inject ContractVerifierMessaging contractVerifierMessaging; -\t@Inject ContractVerifierObjectMapper contractVerifierObjectMapper; + @Inject ContractVerifierMessaging contractVerifierMessaging; + @Inject ContractVerifierObjectMapper contractVerifierObjectMapper; -\t@Test -\tpublic void validate_foo() throws Exception { -\t\t// when: -\t\t\tcreateNewPerson(); + @Test + public void validate_foo() throws Exception { + // when: + createNewPerson(); -\t\t// then: -\t\t\tContractVerifierMessage response = contractVerifierMessaging.receive("personEventsTopic", -\t\t\t\t\tcontract(this, "foo.yml")); -\t\t\tassertThat(response).isNotNull(); + // then: + ContractVerifierMessage response = contractVerifierMessaging.receive("personEventsTopic", + contract(this, "foo.yml")); + assertThat(response).isNotNull(); -\t\t// and: -\t\t\tassertThat(response.getHeader("contentType")).isNotNull(); -\t\t\tassertThat(response.getHeader("contentType").toString()).isEqualTo("application/json"); -\t\t\tassertThat(response.getHeader("type")).isNotNull(); -\t\t\tassertThat(response.getHeader("type").toString()).isEqualTo("person"); -\t\t\tassertThat(response.getHeader("eventType")).isNotNull(); -\t\t\tassertThat(response.getHeader("eventType").toString()).isEqualTo("PersonChangedEvent"); -\t\t\tassertThat(response.getHeader("customerId")).isNotNull(); -\t\t\tassertThat(response.getHeader("customerId").toString()).matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"); + // and: + assertThat(response.getHeader("contentType")).isNotNull(); + assertThat(response.getHeader("contentType").toString()).isEqualTo("application/json"); + assertThat(response.getHeader("type")).isNotNull(); + assertThat(response.getHeader("type").toString()).isEqualTo("person"); + assertThat(response.getHeader("eventType")).isNotNull(); + assertThat(response.getHeader("eventType").toString()).isEqualTo("PersonChangedEvent"); + assertThat(response.getHeader("customerId")).isNotNull(); + assertThat(response.getHeader("customerId").toString()).matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"); -\t\t// and: -\t\t\tDocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); -\t\t\tassertThatJson(parsedJson).field("['type']").isEqualTo("CREATED"); -\t\t\tassertThatJson(parsedJson).field("['personId']").matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"); -\t\t\tassertThatJson(parsedJson).field("['userId']").matches("([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})?"); -\t\t\tassertThatJson(parsedJson).field("['firstName']").matches("[\\\\S\\\\s]+"); -\t\t\tassertThatJson(parsedJson).field("['middleName']").matches("([\\\\S\\\\s]+)?"); -\t\t\tassertThatJson(parsedJson).field("['lastName']").matches("[\\\\S\\\\s]+"); -\t\t\tassertThatJson(parsedJson).field("['version']").matches("-?(\\\\d*\\\\.\\\\d+|\\\\d+)"); -\t\t\tassertThatJson(parsedJson).field("['uid']").matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"); -\t} + // and: + DocumentContext parsedJson = JsonPath.parse(contractVerifierObjectMapper.writeValueAsString(response.getPayload())); + assertThatJson(parsedJson).field("['type']").isEqualTo("CREATED"); + assertThatJson(parsedJson).field("['personId']").matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"); + assertThatJson(parsedJson).field("['userId']").matches("([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})?"); + assertThatJson(parsedJson).field("['firstName']").matches("[\\\\S\\\\s]+"); + assertThatJson(parsedJson).field("['middleName']").matches("([\\\\S\\\\s]+)?"); + assertThatJson(parsedJson).field("['lastName']").matches("[\\\\S\\\\s]+"); + assertThatJson(parsedJson).field("['version']").matches("-?(\\\\d*\\\\.\\\\d+|\\\\d+)"); + assertThatJson(parsedJson).field("['uid']").matches("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"); + } } """ diff --git a/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/dsl/wiremock/SpringCloudContractRequestMatcherTests.java b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/dsl/wiremock/SpringCloudContractRequestMatcherTests.java index d9837add2a..3151fd723b 100644 --- a/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/dsl/wiremock/SpringCloudContractRequestMatcherTests.java +++ b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/dsl/wiremock/SpringCloudContractRequestMatcherTests.java @@ -46,8 +46,7 @@ class SpringCloudContractRequestMatcherTests { } }; - MatchResult result = matcher.match(BDDMockito.mock(Request.class), - Parameters.one("tool", "foo")); + MatchResult result = matcher.match(BDDMockito.mock(Request.class), Parameters.one("tool", "foo")); BDDAssertions.then(result.isExactMatch()).isFalse(); } @@ -64,8 +63,7 @@ class SpringCloudContractRequestMatcherTests { } }; - MatchResult result = matcher.match(BDDMockito.mock(Request.class), - Parameters.one("contract", "value")); + MatchResult result = matcher.match(BDDMockito.mock(Request.class), Parameters.one("contract", "value")); BDDAssertions.then(result.isExactMatch()).isFalse(); } @@ -82,28 +80,22 @@ class SpringCloudContractRequestMatcherTests { } }; - MatchResult result = matcher.match(BDDMockito.mock(Request.class), - Parameters.one("contract", "value")); + MatchResult result = matcher.match(BDDMockito.mock(Request.class), Parameters.one("contract", "value")); BDDAssertions.then(result.isExactMatch()).isFalse(); } - private static final String PROPER_YAML = "---\n" + "request:\n" - + " method: \"POST\"\n" + " url: \"/graphql\"\n" + " headers:\n" - + " Content-Type: \"application/json\"\n" + " body:\n" - + " query: \"query queryName($personName: String!) { personToCheck(name: $personName)" - + " { name age } }\"\n" + " variables:\n" - + " personName: \"Old Enough\"\n" + " operationName: \"queryName\"\n" - + " matchers:\n" + " headers:\n" + " - key: \"Content-Type\"\n" - + " regex: \"application/json.*\"\n" - + " regexType: \"as_string\"\n" + "response:\n" + " status: 200\n" + private static final String PROPER_YAML = "---\n" + "request:\n" + " method: \"POST\"\n" + " url: \"/graphql\"\n" + " headers:\n" + " Content-Type: \"application/json\"\n" + " body:\n" - + " data:\n" + " personToCheck:\n" + " name: \"Old Enough\"\n" - + " age: \"40\"\n" + " matchers:\n" + " headers:\n" - + " - key: \"Content-Type\"\n" - + " regex: \"application/json.*\"\n" - + " regexType: \"as_string\"\n" - + "name: \"shouldRetrieveOldEnoughPerson\"\n" + "metadata:\n" + + " query: \"query queryName($personName: String!) { personToCheck(name: $personName)" + + " { name age } }\"\n" + " variables:\n" + " personName: \"Old Enough\"\n" + + " operationName: \"queryName\"\n" + " matchers:\n" + " headers:\n" + + " - key: \"Content-Type\"\n" + " regex: \"application/json.*\"\n" + + " regexType: \"as_string\"\n" + "response:\n" + " status: 200\n" + " headers:\n" + + " Content-Type: \"application/json\"\n" + " body:\n" + " data:\n" + " personToCheck:\n" + + " name: \"Old Enough\"\n" + " age: \"40\"\n" + " matchers:\n" + " headers:\n" + + " - key: \"Content-Type\"\n" + " regex: \"application/json.*\"\n" + + " regexType: \"as_string\"\n" + "name: \"shouldRetrieveOldEnoughPerson\"\n" + "metadata:\n" + " verifier:\n" + " tool: \"graphql\"\n"; @Test @@ -117,8 +109,8 @@ class SpringCloudContractRequestMatcherTests { } }; - MatchResult result = matcher.match(BDDMockito.mock(Request.class), toMap( - Tuples.of("tool", "unsupported"), Tuples.of("contract", PROPER_YAML))); + MatchResult result = matcher.match(BDDMockito.mock(Request.class), + toMap(Tuples.of("tool", "unsupported"), Tuples.of("contract", PROPER_YAML))); BDDAssertions.then(result.isExactMatch()).isFalse(); } @@ -153,8 +145,7 @@ class SpringCloudContractRequestMatcherTests { class ApplicableRequestMatcher implements RequestMatcher { @Override - public MatchResult match(List contracts, Request request, - Parameters parameters) { + public MatchResult match(List contracts, Request request, Parameters parameters) { return MatchResult.of(true); } diff --git a/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/RequestTests.java b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/RequestTests.java index eb9fc2852e..486a630eda 100644 --- a/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/RequestTests.java +++ b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/RequestTests.java @@ -26,27 +26,23 @@ class RequestTests { @Test void should_override_entries_when_using_builder_from_request() { - Request request = Request.given() - .delete("/foo") - .header("header", "header-value") - .cookie("cookie", "cookie-value") - .queryParam("query", "param-value") - .protocol(ContractVerifierHttpMetaData.Protocol.HTTP_1_1) - .scheme(ContractVerifierHttpMetaData.Scheme.HTTPS) - .build(); + Request request = Request.given().delete("/foo").header("header", "header-value") + .cookie("cookie", "cookie-value").queryParam("query", "param-value") + .protocol(ContractVerifierHttpMetaData.Protocol.HTTP_1_1) + .scheme(ContractVerifierHttpMetaData.Scheme.HTTPS).build(); - Request changedRequest = Request.from(request) - .path("/bar") - .header("header-foo", "header-bar") - .cookie("cookie-foo", "cookie-bar") - .queryParam("query-foo", "query-bar") - .build(); + Request changedRequest = Request.from(request).path("/bar").header("header-foo", "header-bar") + .cookie("cookie-foo", "cookie-bar").queryParam("query-foo", "query-bar").build(); then(changedRequest.path()).isEqualTo("/bar"); then(changedRequest.method().name()).isEqualTo("DELETE"); - then(changedRequest.headers()).containsEntry("header-foo", "header-bar").containsEntry("header", "header-value"); - then(changedRequest.cookies()).containsEntry("cookie-foo", "cookie-bar").containsEntry("cookie", "cookie-value"); - then(changedRequest.queryParams()).contains(new AbstractMap.SimpleEntry<>("query", "param-value"), new AbstractMap.SimpleEntry<>("query-foo", "query-bar")); + then(changedRequest.headers()).containsEntry("header-foo", "header-bar").containsEntry("header", + "header-value"); + then(changedRequest.cookies()).containsEntry("cookie-foo", "cookie-bar").containsEntry("cookie", + "cookie-value"); + then(changedRequest.queryParams()).contains(new AbstractMap.SimpleEntry<>("query", "param-value"), + new AbstractMap.SimpleEntry<>("query-foo", "query-bar")); then(changedRequest.protocol()).isEqualTo(ContractVerifierHttpMetaData.Protocol.HTTP_1_1); } + } diff --git a/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/ResponseTests.java b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/ResponseTests.java index db8ac764bd..42d1700e9d 100644 --- a/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/ResponseTests.java +++ b/spring-cloud-contract-verifier/src/test/java/org/springframework/cloud/contract/verifier/http/ResponseTests.java @@ -24,19 +24,17 @@ class ResponseTests { @Test void should_override_entries_when_using_builder_from_response() { - Response response = Response.builder() - .statusCode(200) - .header("header", "header-value") - .cookie("cookie", "cookie-value") - .build(); + Response response = Response.builder().statusCode(200).header("header", "header-value") + .cookie("cookie", "cookie-value").build(); - Response changedResponse = Response.from(response) - .header("header-foo", "header-bar") - .cookie("cookie-foo", "cookie-bar") - .build(); + Response changedResponse = Response.from(response).header("header-foo", "header-bar") + .cookie("cookie-foo", "cookie-bar").build(); then(changedResponse.statusCode()).isEqualTo(200); - then(changedResponse.headers()).containsEntry("header-foo", "header-bar").containsEntry("header", "header-value"); - then(changedResponse.cookies()).containsEntry("cookie-foo", "cookie-bar").containsEntry("cookie", "cookie-value"); + then(changedResponse.headers()).containsEntry("header-foo", "header-bar").containsEntry("header", + "header-value"); + then(changedResponse.cookies()).containsEntry("cookie-foo", "cookie-bar").containsEntry("cookie", + "cookie-value"); } + }