package com.bahadirakin.mvc; import com.bahadirakin.model.User; import com.bahadirakin.service.UserService; import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import java.util.ArrayList; import java.util.List; /** * Created by bhdrkn on 08/02/15. */ @RunWith(JUnit4.class) public class UserControllerTest { @Mock private UserService userService; @InjectMocks private UserController userController; private MockMvc mockMvc; @Before public void init(){ MockitoAnnotations.initMocks(this); mockMvc = MockMvcBuilders.standaloneSetup(userController).build(); } @Test public void testFindAll() throws Exception{ final User user1 = new User(); user1.setId("1"); user1.setEmail("bhdrkb@gmail.com"); user1.setUsername("bhdrkn"); user1.setPassword("1q2w3e"); final User user2 = new User(); user2.setId("2"); user2.setEmail("bhdrkb2@gmail.com"); user2.setUsername("bhdrkn2"); user2.setPassword("1q2w3e"); final List<User> users = new ArrayList<User>(); users.add(user1); users.add(user2); Mockito.when(userService.getAllUsers()).thenReturn(users); mockMvc.perform(MockMvcRequestBuilders.get("/rest/users")) .andExpect(MockMvcResultMatchers.jsonPath("$.[*].username", Matchers.hasItems( Matchers.endsWith("bhdrkn"), Matchers.endsWith("bhdrkn2")))) .andExpect(MockMvcResultMatchers.status().isOk()); } @Test public void testCreateUser() throws Exception { final User user = new User(); user.setId("1"); user.setEmail("bhdrkn@gmail.com"); user.setUsername("bhdrkn"); user.setPassword("1q2w3e"); Mockito.when(userService.createUser(Mockito.any(User.class))).thenReturn(user); mockMvc.perform(MockMvcRequestBuilders.post("/rest/users") .content("{\"username\":\"bhdrkn\",\"password\":\"1q2w3e\",\"email\":\"bhdrkn@gmail.com\"}") .contentType(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.jsonPath("$.username", Matchers.is("bhdrkn"))) .andExpect(MockMvcResultMatchers.jsonPath("$.password",Matchers.is("1q2w3e"))) .andExpect(MockMvcResultMatchers.jsonPath("$.id",Matchers.is("1"))) .andExpect(MockMvcResultMatchers.jsonPath("$.email",Matchers.is("bhdrkn@gmail.com"))) .andExpect(MockMvcResultMatchers.status().isCreated()); } @Test public void testGetUser() throws Exception{ final User user = new User(); user.setId("1"); user.setEmail("bhdrkn@gmail.com"); user.setUsername("bhdrkn"); user.setPassword("1q2w3e"); Mockito.when(userService.findUserById("1")).thenReturn(user); mockMvc.perform(MockMvcRequestBuilders.get("/rest/users/1")) .andExpect(MockMvcResultMatchers.jsonPath("$.username", Matchers.is("bhdrkn"))) .andExpect(MockMvcResultMatchers.jsonPath("$.password",Matchers.is("1q2w3e"))) .andExpect(MockMvcResultMatchers.jsonPath("$.id",Matchers.is("1"))) .andExpect(MockMvcResultMatchers.jsonPath("$.email",Matchers.is("bhdrkn@gmail.com"))) .andExpect(MockMvcResultMatchers.status().isOk()); } @Test public void testNotExistedUser() throws Exception{ Mockito.when(userService.findUserById("1")).thenReturn(null); mockMvc.perform(MockMvcRequestBuilders.get("/rest/users/1")) .andExpect(MockMvcResultMatchers.status().isNotFound()); } @Test public void testUpdateUser() throws Exception { final User user = new User(); user.setId("1"); user.setEmail("bhdrkn@gmail.com"); user.setUsername("bhdrkn"); user.setPassword("1q2w3e"); Mockito.when(userService.updateUser(Mockito.eq("1"), Mockito.any(User.class))).thenReturn(user); mockMvc.perform(MockMvcRequestBuilders.put("/rest/users/1") .content("{\"username\":\"bhdrkn\",\"password\":\"1q2w3e\",\"email\":\"bhdrkn@gmail.com\"}") .contentType(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.jsonPath("$.username", Matchers.is("bhdrkn"))) .andExpect(MockMvcResultMatchers.jsonPath("$.password",Matchers.is("1q2w3e"))) .andExpect(MockMvcResultMatchers.jsonPath("$.id",Matchers.is("1"))) .andExpect(MockMvcResultMatchers.jsonPath("$.email",Matchers.is("bhdrkn@gmail.com"))) .andExpect(MockMvcResultMatchers.status().isOk()); } @Test public void testDeleteUser() throws Exception { final User user = new User(); user.setId("1"); user.setEmail("bhdrkn@gmail.com"); user.setUsername("bhdrkn"); user.setPassword("1q2w3e"); Mockito.when(userService.deleteUser(Mockito.eq("1"),Mockito.any(User.class))).thenReturn(user); mockMvc.perform(MockMvcRequestBuilders.delete("/rest/users/1") .content("{\"username\":\"bhdrkn\",\"password\":\"1q2w3e\",\"email\":\"bhdrkn@gmail.com\"}") .contentType(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.jsonPath("$.username", Matchers.is("bhdrkn"))) .andExpect(MockMvcResultMatchers.jsonPath("$.password",Matchers.is("1q2w3e"))) .andExpect(MockMvcResultMatchers.jsonPath("$.id",Matchers.is("1"))) .andExpect(MockMvcResultMatchers.jsonPath("$.email",Matchers.is("bhdrkn@gmail.com"))) .andExpect(MockMvcResultMatchers.status().isOk()); } }