package org.berzerkula.builddb.controllers; import org.berzerkula.builddb.config.SecurityConfig; import org.berzerkula.builddb.models.AppUser; import org.berzerkula.builddb.repositories.AppUserRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Import; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.web.servlet.MockMvc; import java.util.Date; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; 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.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; @Import(SecurityConfig.class) @AutoConfigureMockMvc @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) class BuilddbAccountControllerTest { @Autowired private AppUserRepository appUserRepository; @Autowired private MockMvc mockMvc; @Test void shouldReturnIndexOk() throws Exception { mockMvc.perform(get("/")) .andExpect(status().isOk()) .andExpect(view().name("index")) .andDo(print()); } @Test void shouldReturnLoginOk() throws Exception { mockMvc.perform(get("/login")) .andExpect(status().isOk()) .andExpect(view().name("login")) .andDo(print()); } @Test void shouldProfileRedirectToLogin() throws Exception { mockMvc.perform(get("/profile")) .andExpect(status().is3xxRedirection()) .andDo(print()); } @WithMockUser(roles="client") @Test void shouldReturnProfileView() throws Exception { AppUser appUser = new AppUser(); appUser.setFirstName("John"); appUser.setLastName("Doe"); appUser.setEmail("test@berzerkula.org"); appUser.setPhone("555-555-5555"); appUser.setAddress("612 Wolf Avenue"); appUser.setRole("client"); appUser.setPassword("password"); appUser.setCreatedAt(new Date()); appUserRepository.save(appUser); this.mockMvc.perform(get("/profile") .with(user("test@berzerkula.org"))) .andExpect(status().isOk()) .andExpect(view().name("profile")) .andDo(print()); } @Test void shouldReturnRegisterOk() throws Exception { mockMvc.perform(get("/register")) .andExpect(status().isOk()) .andExpect(view().name("register")) .andDo(print()); } @Test void shouldRegisterRequiredValidationError() throws Exception { mockMvc.perform(post("/register") .with(csrf()) .formField("firstName", "") .formField("lastName", "") .formField("email", "") .formField("phone", "") .formField("address", "") .formField("password", "") .formField("confirmPassword", "")) .andExpect(status().isOk()) .andExpect(view().name("register")) .andDo(print()); } @Test void shouldRegisterPasswordValidationError() throws Exception { mockMvc.perform(post("/register") .with(csrf()) .formField("firstName", "John") .formField("lastName", "Doe") .formField("email", "test@berzerkula.org") .formField("phone", "") .formField("address", "") .formField("password", "password") .formField("confirmPassword", "passwrd")) .andExpect(status().isOk()) .andExpect(view().name("register")) .andDo(print()); } @Test void shouldRegisterSuccess() throws Exception { mockMvc.perform(post("/register") .with(csrf()) .formField("firstName", "John") .formField("lastName", "Doe") .formField("email", "test@berzerkula.org") .formField("phone", "555-555-5555") .formField("address", "612 Wolf Avenue") .formField("password", "password") .formField("confirmPassword", "password")) .andExpect(status().isOk()) .andExpect(view().name("register")) .andDo(print()); } }