Here is the test:
package org.bk.webtest; import static org.hamcrest.Matchers.containsString; import static org.springframework.test.web.server.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.server.result.MockMvcResultMatchers.*; import static org.springframework.test.web.server.setup.MockMvcBuilders.*; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.test.web.server.MockMvc; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.config.annotation.EnableWebMvc; public class WebContextConfigurationTest { private final String createJson = "{\"id\":%d,\"first\":\"%s\",\"last\":\"%s\"}"; private final String membersJson = "[{\"id\":1,\"first\":\"One\",\"last\":\"One\"},{\"id\":2,\"first\":\"Two\",\"last\":\"Two\"},{\"id\":3,\"first\":\"Three\",\"last\":\"Three\"}]"; private final String updatedMembersJson = "[{\"id\":1,\"first\":\"One\",\"last\":\"OneUpdated\"},{\"id\":2,\"first\":\"Two\",\"last\":\"Two\"},{\"id\":3,\"first\":\"Three\",\"last\":\"Three\"}]"; @Test public void testAWebFlow() throws Exception { MockMvc mockMvc = annotationConfigSetup(WebContextConfigurationTest.TestConfiguration.class) .build(); mockMvc.perform(post("/members").contentType(MediaType.APPLICATION_JSON).body(String.format(createJson, 1,"One","One").getBytes())) .andExpect(status().isOk()); mockMvc.perform(post("/members").contentType(MediaType.APPLICATION_JSON).body(String.format(createJson, 2,"Two","Two").getBytes())) .andExpect(status().isOk()); mockMvc.perform(post("/members").contentType(MediaType.APPLICATION_JSON).body(String.format(createJson, 3,"Three","Three").getBytes())) .andExpect(status().isOk()); mockMvc.perform(get("/members").contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(containsString(membersJson))); mockMvc.perform(put("/members").contentType(MediaType.APPLICATION_JSON).body(String.format(createJson, 1,"One","OneUpdated").getBytes())) .andExpect(status().isOk()); mockMvc.perform(get("/members").contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(containsString(updatedMembersJson))); mockMvc.perform(get("/members/1").contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(String.format(createJson, 1,"One","OneUpdated"))); mockMvc.perform(delete("/members/1").contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } @Configuration @EnableWebMvc @ComponentScan(basePackages="org.bk.webtest") public static class TestConfiguration{ } } @Controller class MembersController{ private Map<Integer, Member> memberDB = new HashMap<>(); @RequestMapping(value = "/members", method = RequestMethod.GET) @ResponseBody public Collection<Member> list() { return this.memberDB.values(); } @RequestMapping(value="/members", method=RequestMethod.POST) public @ResponseBody Member create(@RequestBody Member member){ this.memberDB.put(member.getId(), member); return member; } @RequestMapping(value="/members", method=RequestMethod.PUT) public @ResponseBody Member update(@RequestBody Member member){ this.memberDB.put(member.getId(), member); return member; } @RequestMapping(value="/members/{id}", method=RequestMethod.GET) public @ResponseBody Member get(@PathVariable("id") Integer id){ return this.memberDB.get(id); } @RequestMapping(value="/members/{id}", method=RequestMethod.DELETE) public void delete(@PathVariable("id") Integer id){ this.memberDB.remove(id); } } class Member{ private Integer id; private String first; private String last; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getFirst() { return first; } public void setFirst(String first) { this.first = first; } public String getLast() { return last; } public void setLast(String last) { this.last = last; } }
This is a complete test which performs a test for a REST based controller supporting creating a new entity through Http POST, Updating it through a Http PUT, getting a list or an entity through Http GET, and deleting it through DELETE.
Just the following configures the complete Spring MVC!
@Configuration @EnableWebMvc @ComponentScan(basePackages="org.bk.webtest") public static class TestConfiguration{ }
No comments:
Post a Comment