package org.springframework.samples.mvc.messageconverters; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; 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; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.http.MediaType; import org.springframework.samples.mvc.AbstractContextControllerTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.web.servlet.MockMvc; @RunWith(SpringJUnit4ClassRunner.class) public class MessageConvertersControllerTests extends AbstractContextControllerTests { private static String URI = "/messageconverters/{action}"; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = webAppContextSetup(this.wac).alwaysExpect(status().isOk()).build(); } @Test public void readString() throws Exception { this.mockMvc.perform(post(URI, "string").content("foo".getBytes())) .andExpect(content().string("Read string 'foo'")); } @Test public void writeString() throws Exception { this.mockMvc.perform(get(URI, "string")) .andExpect(content().string("Wrote a string")); } @Test public void readForm() throws Exception { this.mockMvc.perform( post(URI, "form") .contentType(MediaType.APPLICATION_FORM_URLENCODED) .param("foo", "bar") .param("fruit", "apple")) .andExpect(content().string("Read x-www-form-urlencoded: JavaBean {foo=[bar], fruit=[apple]}")); } @Test public void writeForm() throws Exception { this.mockMvc.perform(get(URI, "form")) .andExpect(content().contentType(MediaType.APPLICATION_FORM_URLENCODED)) .andExpect(content().string("foo=bar&fruit=apple")); } private static String XML = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<javaBean><foo>bar</foo><fruit>apple</fruit></javaBean>"; @Test public void readXml() throws Exception { this.mockMvc.perform( post(URI, "xml") .contentType(MediaType.APPLICATION_XML) .content(XML.getBytes())) .andExpect(content().string("Read from XML: JavaBean {foo=[bar], fruit=[apple]}")); } @Test public void writeXml() throws Exception { this.mockMvc.perform(get(URI, "xml").accept(MediaType.APPLICATION_XML)) .andExpect(content().xml(XML)); } @Test public void readJson() throws Exception { this.mockMvc.perform( post(URI, "json") .contentType(MediaType.APPLICATION_JSON) .content("{ \"foo\": \"bar\", \"fruit\": \"apple\" }".getBytes())) .andExpect(content().string("Read from JSON: JavaBean {foo=[bar], fruit=[apple]}")); } @Test public void writeJson() throws Exception { this.mockMvc.perform(get(URI, "json").accept(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.foo").value("bar")) .andExpect(jsonPath("$.fruit").value("apple")); } @Test public void writeJson2() throws Exception { this.mockMvc.perform(get(URI, "json").accept(MediaType.APPLICATION_JSON)) .andDo(print()) .andExpect(jsonPath("$.foo").value("bar")) .andExpect(jsonPath("$.fruit").value("apple")); } private static String ATOM_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<feed xmlns=\"http://www.w3.org/2005/Atom\"><title>My Atom feed</title></feed>"; @Test public void readAtom() throws Exception { this.mockMvc.perform( post(URI, "atom") .contentType(MediaType.APPLICATION_ATOM_XML) .content(ATOM_XML.getBytes())) .andExpect(content().string("Read My Atom feed")); } @Test public void writeAtom() throws Exception { this.mockMvc.perform(get(URI, "atom").accept(MediaType.APPLICATION_ATOM_XML)) .andExpect(content().xml(ATOM_XML)); } @Test public void readRss() throws Exception { String rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <rss version=\"2.0\">" + "<channel><title>My RSS feed</title></channel></rss>"; this.mockMvc.perform( post(URI, "rss") .contentType(MediaType.valueOf("application/rss+xml")) .content(rss.getBytes())) .andExpect(content().string("Read My RSS feed")); } @Test public void writeRss() throws Exception { String rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<rss version=\"2.0\"><channel><title>My RSS feed</title><link>http://localhost:8080/mvc-showcase/rss</link><description>Description</description></channel></rss>"; this.mockMvc.perform(get(URI, "rss").accept(MediaType.valueOf("application/rss+xml"))) .andExpect(content().xml(rss)); } }