Added better support for XML in RestDocs; fixes gh-647

This commit is contained in:
Marcin Grzejszczak
2018-05-08 20:38:00 +02:00
parent 72f5ba2722
commit 7341b570b8
24 changed files with 353 additions and 19 deletions

View File

@@ -0,0 +1,47 @@
package com.example.fraud;
import java.math.BigDecimal;
import com.example.fraud.model.FraudCheck;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import static org.springframework.web.bind.annotation.RequestMethod.POST;
import static org.springframework.web.bind.annotation.RequestMethod.PUT;
@Controller
public class FraudDetectionXmlController {
@RequestMapping(
value = "/xmlfraud",
method = POST,
consumes = MediaType.APPLICATION_XML_VALUE,
produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public XmlResponseBody xmlResponseBody(@RequestBody XmlRequestBody xmlRequestBody) {
if (StringUtils.isEmpty(xmlRequestBody.name)) {
return new XmlResponseBody("EMPTY");
}
return new XmlResponseBody("FULL");
}
}
class XmlRequestBody {
public String name;
}
class XmlResponseBody {
public String status;
public XmlResponseBody(String status) {
this.status = status;
}
public XmlResponseBody() {
}
}

View File

@@ -0,0 +1,60 @@
package com.example.fraud;
import java.math.BigDecimal;
import com.example.fraud.model.FraudCheck;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.json.AutoConfigureJsonTesters;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.json.JacksonTester;
import org.springframework.http.MediaType;
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import static org.springframework.cloud.contract.wiremock.restdocs.WireMockRestDocs.verify;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@AutoConfigureRestDocs(outputDir = "target/snippets")
@AutoConfigureMockMvc
@DirtiesContext
public class XmlStubGeneratorTests {
@Autowired
private MockMvc mockMvc;
@Test
public void should_return_full_content() throws Exception {
mockMvc.perform(post("/xmlfraud")
.contentType(MediaType.APPLICATION_XML)
.content("<XmlRequestBody><name>foo</name></XmlRequestBody>"))
.andExpect(status().is2xxSuccessful())
.andExpect(content().string("<XmlResponseBody><status>FULL</status></XmlResponseBody>"))
.andDo(MockMvcRestDocumentation.document("{methodName}"));
}
@Test
public void should_return_empty_content() throws Exception {
mockMvc.perform(post("/xmlfraud")
.contentType(MediaType.APPLICATION_XML)
.content("<XmlRequestBody><name></name></XmlRequestBody>"))
.andExpect(status().is2xxSuccessful())
.andExpect(content().string("<XmlResponseBody><status>EMPTY</status></XmlResponseBody>"))
.andDo(MockMvcRestDocumentation.document("{methodName}"));
}
}