Fixed the not setting of response status for rest docs

without this change the status recorded in the test was not properly placed in the stub
with this change it gets fixed

fixes #199
This commit is contained in:
Marcin Grzejszczak
2017-01-26 13:11:37 +01:00
parent e10a752c45
commit ed30fc6aa5
3 changed files with 140 additions and 3 deletions

View File

@@ -94,7 +94,8 @@ public class WireMockSnippet implements Snippet {
private ResponseDefinitionBuilder response(Operation operation) {
return aResponse().withHeaders(responseHeaders(operation))
.withBody(operation.getResponse().getContentAsString());
.withBody(operation.getResponse().getContentAsString())
.withStatus(operation.getResponse().getStatus().value());
}
private RemoteMappingBuilder<?, ?> request(Operation operation) {

View File

@@ -1,5 +1,6 @@
package org.springframework.cloud.contract.wiremock;
import org.eclipse.jetty.http.HttpStatus;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -8,6 +9,7 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMock
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.contract.wiremock.WiremockServerRestDocsApplicationTests.TestConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
@@ -26,8 +28,7 @@ import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.docu
@DirtiesContext
public class WiremockServerRestDocsApplicationTests {
@Autowired
private MockMvc mockMvc;
@Autowired private MockMvc mockMvc;
@Test
public void contextLoads() throws Exception {
@@ -36,6 +37,14 @@ public class WiremockServerRestDocsApplicationTests {
.andDo(document("resource"));
}
@Test
public void statusIsMaintained() throws Exception {
this.mockMvc.perform(MockMvcRequestBuilders.get("/status"))
.andExpect(MockMvcResultMatchers.content().string("Hello World"))
.andExpect(MockMvcResultMatchers.status().is(HttpStatus.ACCEPTED_202))
.andDo(document("status"));
}
@Configuration
@RestController
protected static class TestConfiguration {
@@ -46,6 +55,12 @@ public class WiremockServerRestDocsApplicationTests {
return "Hello World";
}
@ResponseBody
@RequestMapping("/status")
public ResponseEntity<String> status() {
return ResponseEntity.status(HttpStatus.ACCEPTED_202).body("Hello World");
}
}
}

View File

@@ -0,0 +1,121 @@
package org.springframework.cloud.contract.wiremock.restdocs;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.nio.file.Files;
import java.util.Collection;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.restdocs.RestDocumentationContext;
import org.springframework.restdocs.operation.Operation;
import org.springframework.restdocs.operation.OperationRequest;
import org.springframework.restdocs.operation.OperationRequestPart;
import org.springframework.restdocs.operation.OperationResponse;
import org.springframework.restdocs.operation.Parameters;
import com.github.tomakehurst.wiremock.stubbing.StubMapping;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.anyString;
/**
* @author Marcin Grzejszczak
*/
@RunWith(MockitoJUnitRunner.class)
public class WireMockSnippetTests {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) Operation operation;
@Rule public TemporaryFolder tmp = new TemporaryFolder();
File outputFolder;
@Before
public void setup() throws IOException {
this.outputFolder = this.tmp.newFolder();
}
@Test
public void should_maintain_the_response_status_when_generating_stub() throws Exception {
WireMockSnippet snippet = new WireMockSnippet();
RestDocumentationContext context = new RestDocumentationContext(this.getClass(),
"method", this.outputFolder);
given(this.operation.getName()).willReturn("foo");
given(this.operation.getAttributes().get(anyString())).willReturn(null);
given(this.operation.getAttributes().get(RestDocumentationContext.class.getName())).willReturn(context);
given(this.operation.getRequest()).willReturn(request());
given(this.operation.getResponse()).willReturn(response());
snippet.document(this.operation);
File stub = new File(this.outputFolder, "stubs/foo.json");
assertThat(stub).exists();
StubMapping stubMapping = StubMapping.buildFrom(new String(Files.readAllBytes(stub.toPath())));
assertThat(stubMapping.getResponse().getStatus()).isEqualTo(HttpStatus.ACCEPTED.value());
}
private OperationResponse response() {
return new OperationResponse() {
@Override public HttpStatus getStatus() {
return HttpStatus.ACCEPTED;
}
@Override public HttpHeaders getHeaders() {
return new HttpHeaders();
}
@Override public byte[] getContent() {
return new byte[0];
}
@Override public String getContentAsString() {
return null;
}
};
}
private OperationRequest request() {
return new OperationRequest() {
@Override public byte[] getContent() {
return new byte[0];
}
@Override public String getContentAsString() {
return null;
}
@Override public HttpHeaders getHeaders() {
return new HttpHeaders();
}
@Override public HttpMethod getMethod() {
return HttpMethod.GET;
}
@Override public Parameters getParameters() {
return null;
}
@Override public Collection<OperationRequestPart> getParts() {
return null;
}
@Override public URI getUri() {
return URI.create("http://foo/bar");
}
};
}
}