From 9d0075f586607850559cd07b12bf584a865d7aa9 Mon Sep 17 00:00:00 2001 From: Tomasz Kopczynski Date: Sat, 1 Jul 2017 22:26:23 +0200 Subject: [PATCH 1/2] gh-342: Rest Docs stubs with no body --- .../wiremock/restdocs/WireMockSnippet.java | 13 ++-- .../restdocs/WireMockSnippetTests.java | 59 +++++++++++++++++++ 2 files changed, 67 insertions(+), 5 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 2592456c9f..b0f18ae215 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 @@ -32,6 +32,7 @@ import com.github.tomakehurst.wiremock.http.HttpHeaders; import com.github.tomakehurst.wiremock.matching.UrlPattern; import com.github.tomakehurst.wiremock.stubbing.StubMapping; +import org.apache.commons.lang3.StringUtils; import org.springframework.http.MediaType; import org.springframework.restdocs.RestDocumentationContext; import org.springframework.restdocs.operation.Operation; @@ -192,11 +193,13 @@ public class WireMockSnippet implements Snippet { builder.withRequestBody(matchingJsonPath(jsonPath)); } } - else if (this.hasJsonBodyRequestToMatch) { - builder.withRequestBody(equalToJson(content)); - } - else { - builder.withRequestBody(equalTo(content)); + else if (StringUtils.isNotEmpty(content)) { + if (this.hasJsonBodyRequestToMatch) { + builder.withRequestBody(equalToJson(content)); + } + else { + builder.withRequestBody(equalTo(content)); + } } return builder; } diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java index 6896d4ed01..7056e78279 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java @@ -112,6 +112,24 @@ public class WireMockSnippetTests { .isEqualTo("{\"name\": \"12\"}"); } + @Test + public void should_handle_empty_request_body() throws IOException { + given(this.operation.getName()).willReturn("foo"); + WireMockSnippet snippet = new WireMockSnippet(); + given(this.operation.getRequest()).willReturn(requestPostWithEmptyBody()); + + snippet.document(this.operation); + + File stub = new File(this.outputFolder, "stubs/foo.json"); + assertThat(stub).exists(); + StubMapping stubMapping = WireMockStubMapping + .buildFrom(new String(Files.readAllBytes(stub.toPath()))); + assertThat(stubMapping.getRequest().getBodyPatterns()).isNullOrEmpty(); + assertThat(stubMapping.getResponse().getStatus()) + .isEqualTo(HttpStatus.ACCEPTED.value()); + + } + private OperationResponse response() { return new OperationResponse() { @@ -219,4 +237,45 @@ public class WireMockSnippetTests { } }; } + + private OperationRequest requestPostWithEmptyBody() { + return new OperationRequest() { + @Override + public byte[] getContent() { + return new byte[0]; + } + + @Override + public String getContentAsString() { + return ""; + } + + @Override + public HttpHeaders getHeaders() { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); + return httpHeaders; + } + + @Override + public HttpMethod getMethod() { + return HttpMethod.POST; + } + + @Override + public Parameters getParameters() { + return null; + } + + @Override + public Collection getParts() { + return null; + } + + @Override + public URI getUri() { + return URI.create("http://foo/bar"); + } + }; + } } \ No newline at end of file From b54c36ce8b21303d98d4b589be947101756e04f4 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 3 Jul 2017 11:10:02 +0200 Subject: [PATCH 2/2] Polish --- .../wiremock/restdocs/WireMockSnippet.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 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 b0f18ae215..cec2f7ab04 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,14 +16,6 @@ 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; @@ -31,8 +23,6 @@ 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.apache.commons.lang3.StringUtils; import org.springframework.http.MediaType; import org.springframework.restdocs.RestDocumentationContext; import org.springframework.restdocs.operation.Operation; @@ -42,6 +32,15 @@ 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; @@ -193,7 +192,7 @@ public class WireMockSnippet implements Snippet { builder.withRequestBody(matchingJsonPath(jsonPath)); } } - else if (StringUtils.isNotEmpty(content)) { + else if (!StringUtils.isEmpty(content)) { if (this.hasJsonBodyRequestToMatch) { builder.withRequestBody(equalToJson(content)); }