package com.piggymetrics.auth.controller; import com.fasterxml.jackson.databind.ObjectMapper; import com.piggymetrics.auth.AuthApplication; import com.piggymetrics.auth.domain.User; import com.piggymetrics.auth.service.UserService; import com.sun.security.auth.UserPrincipal; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import static org.mockito.MockitoAnnotations.initMocks; 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.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = AuthApplication.class) @WebAppConfiguration public class UserControllerTest { private static final ObjectMapper mapper = new ObjectMapper(); @InjectMocks private UserController accountController; @Mock private UserService userService; private MockMvc mockMvc; @Before public void setup() { initMocks(this); this.mockMvc = MockMvcBuilders.standaloneSetup(accountController).build(); } @Test public void shouldCreateNewUser() throws Exception { final User user = new User(); user.setUsername("test"); user.setPassword("password"); String json = mapper.writeValueAsString(user); mockMvc.perform(post("/users").contentType(MediaType.APPLICATION_JSON).content(json)) .andExpect(status().isOk()); } @Test public void shouldFailWhenUserIsNotValid() throws Exception { final User user = new User(); user.setUsername("t"); user.setPassword("p"); mockMvc.perform(post("/users")) .andExpect(status().isBadRequest()); } @Test public void shouldReturnCurrentUser() throws Exception { mockMvc.perform(get("/users/current").principal(new UserPrincipal("test"))) .andExpect(jsonPath("$.name").value("test")) .andExpect(status().isOk()); } }