From 2d9c50571535767603e400b6b53bd018f4042d5a Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 29 Jan 2018 11:23:19 +0000 Subject: [PATCH 1/2] Remove unnecessary placeholder resolution --- .../wiremock/restdocs/WireMockSnippet.java | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java index cec2f7ab04..59713a9178 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java @@ -16,6 +16,14 @@ package org.springframework.cloud.contract.wiremock.restdocs; +import java.io.IOException; +import java.io.Writer; +import java.util.Arrays; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.regex.Pattern; + import com.github.tomakehurst.wiremock.client.MappingBuilder; import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; import com.github.tomakehurst.wiremock.common.Json; @@ -23,6 +31,7 @@ import com.github.tomakehurst.wiremock.http.HttpHeader; import com.github.tomakehurst.wiremock.http.HttpHeaders; import com.github.tomakehurst.wiremock.matching.UrlPattern; import com.github.tomakehurst.wiremock.stubbing.StubMapping; + import org.springframework.http.MediaType; import org.springframework.restdocs.RestDocumentationContext; import org.springframework.restdocs.operation.Operation; @@ -31,17 +40,8 @@ import org.springframework.restdocs.snippet.Snippet; import org.springframework.restdocs.snippet.StandardWriterResolver; import org.springframework.restdocs.snippet.WriterResolver; import org.springframework.restdocs.templates.TemplateFormat; -import org.springframework.util.PropertyPlaceholderHelper; import org.springframework.util.StringUtils; -import java.io.IOException; -import java.io.Writer; -import java.util.Arrays; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.Set; -import java.util.regex.Pattern; - import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.delete; import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; @@ -72,9 +72,6 @@ public class WireMockSnippet implements Snippet { private boolean hasJsonBodyRequestToMatch = false; - private final PropertyPlaceholderHelper propertyPlaceholderHelper = new PropertyPlaceholderHelper( - "{", "}"); - private static final TemplateFormat TEMPLATE_FORMAT = new TemplateFormat() { @Override @@ -100,9 +97,8 @@ public class WireMockSnippet implements Snippet { RestDocumentationContextPlaceholderResolverFactory placeholders = new RestDocumentationContextPlaceholderResolverFactory(); WriterResolver writerResolver = new StandardWriterResolver(placeholders, "UTF-8", TEMPLATE_FORMAT); - String path = this.propertyPlaceholderHelper.replacePlaceholders(operation.getName(), - placeholders.create(context)); - try (Writer writer = writerResolver.resolve(this.snippetName, path, context)) { + try (Writer writer = writerResolver.resolve(this.snippetName, operation.getName(), + context)) { writer.append(json); } } From 15ac841360fbf5f8563a52c0822d8394d2c0f2fa Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 29 Jan 2018 13:49:28 +0000 Subject: [PATCH 2/2] Put jsonPaths into request matchers (not response) The correct WireMock JSON stubs should be available after this change. Otherwise the json paths that were applied to the request in the RESTdocs test were being translated into response matchers in the contract (which doesn't even do anything in WireMock). --- .../wiremock/restdocs/ContractDslSnippet.java | 8 ++++---- .../templates/default-dsl-contract-only.snippet | 14 +++++++------- .../wiremock/restdocs/ContractDslSnippetTests.java | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippet.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippet.java index f9fee052f8..345e4cae3a 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippet.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippet.java @@ -77,10 +77,6 @@ public class ContractDslSnippet extends TemplatedSnippet { filterHeaders(headers); model.put("response_headers_present", !headers.isEmpty()); model.put("response_headers", headers.entrySet()); - @SuppressWarnings("unchecked") Set jsonPaths = (Set) operation.getAttributes() - .get("contract.jsonPaths"); - model.put("response_json_paths_present", jsonPaths != null && !jsonPaths.isEmpty()); - model.put("response_json_paths", jsonPaths(jsonPaths)); } private Set jsonPaths(Set jsonPaths) { @@ -104,6 +100,10 @@ public class ContractDslSnippet extends TemplatedSnippet { filterHeaders(headers); model.put("request_headers_present", !headers.isEmpty()); model.put("request_headers", headers.entrySet()); + @SuppressWarnings("unchecked") Set jsonPaths = (Set) operation.getAttributes() + .get("contract.jsonPaths"); + model.put("request_json_paths_present", jsonPaths != null && !jsonPaths.isEmpty()); + model.put("request_json_paths", jsonPaths(jsonPaths)); } private void filterHeaders(Map headers) { diff --git a/spring-cloud-contract-wiremock/src/main/resources/org/springframework/restdocs/templates/default-dsl-contract-only.snippet b/spring-cloud-contract-wiremock/src/main/resources/org/springframework/restdocs/templates/default-dsl-contract-only.snippet index 4180c7e4cf..14c4bdeacb 100644 --- a/spring-cloud-contract-wiremock/src/main/resources/org/springframework/restdocs/templates/default-dsl-contract-only.snippet +++ b/spring-cloud-contract-wiremock/src/main/resources/org/springframework/restdocs/templates/default-dsl-contract-only.snippet @@ -16,6 +16,13 @@ Contract.make { {{/request_headers}} } {{/request_headers_present}} + {{#request_json_paths_present}} + stubMatchers { + {{#request_json_paths}} + jsonPath('''{{jsonPath}}''', byEquality()) + {{/request_json_paths}} + } + {{/request_json_paths_present}} } response { status {{response_status}} @@ -31,12 +38,5 @@ Contract.make { {{/response_headers}} } {{/response_headers_present}} - {{#response_json_paths_present}} - testMatchers { - {{#response_json_paths}} - jsonPath('''{{jsonPath}}''', byType()) - {{/response_json_paths}} - } - {{/response_json_paths_present}} } } \ No newline at end of file diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippetTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippetTests.java index 5e7d598665..e79284651e 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippetTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/ContractDslSnippetTests.java @@ -91,10 +91,10 @@ public class ContractDslSnippetTests { then(parsedContract.getRequest().getUrl().getClientValue()).isNotNull(); then(parsedContract.getRequest().getUrl().getClientValue().toString()).startsWith("/"); then(parsedContract.getRequest().getBody().getClientValue()).isNotNull(); + then(parsedContract.getRequest().getMatchers().hasMatchers()).isTrue(); then(parsedContract.getResponse().getStatus().getClientValue()).isNotNull(); then(parsedContract.getResponse().getHeaders().getEntries()).isNotEmpty(); then(parsedContract.getResponse().getBody().getClientValue()).isNotNull(); - then(parsedContract.getResponse().getMatchers().hasMatchers()).isTrue(); } @Test