package org.berzerkula.builddb.controllers; import org.berzerkula.builddb.BuilddbConstants; import org.berzerkula.builddb.config.SecurityConfig; import org.berzerkula.builddb.models.Pkg; import org.berzerkula.builddb.repositories.TestH2PkgRepository; 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.List; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; 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 BuilddbPkgControllerTest { @Autowired private TestH2PkgRepository pkgRepository; @Autowired private MockMvc mockMvc; @Test @WithMockUser(roles=BuilddbConstants.ROLE_CLIENT) void shouldReturnEmptyPackageListView() throws Exception { this.mockMvc.perform(get("/pkgs")) .andExpect(status().isOk()) .andExpect(view().name("pkgs/index")) .andDo(print()); } @Test @WithMockUser(roles=BuilddbConstants.ROLE_CLIENT) void shouldReturnAddPackageView() throws Exception { this.mockMvc.perform(get("/pkgs/add")) .andExpect(status().isOk()) .andExpect(view().name("pkgs/add")) .andDo(print()); } @Test @WithMockUser(roles=BuilddbConstants.ROLE_CLIENT) void shouldReturnEditPackageView() throws Exception { Pkg pkg = new Pkg(1, "test", "1.2.3", "", "", "", "", "", ""); pkgRepository.save(pkg); List pkgs = pkgRepository.findAll(); pkg = pkgs.get(0); Integer id = pkg.getId(); this.mockMvc.perform(get("/pkgs/edit?id=" + id)) .andExpect(status().isOk()) .andExpect(view().name("pkgs/edit")) .andDo(print()); } @Test @WithMockUser(roles=BuilddbConstants.ROLE_CLIENT) void shouldGetPopupWhenDeletePackage() throws Exception { Pkg pkg = new Pkg(1, "test", "1.2.3", "", "", "", "", "", ""); pkgRepository.save(pkg); List pkgs = pkgRepository.findAll(); pkg = pkgs.get(0); Integer id = pkg.getId(); this.mockMvc.perform(get("/pkgs/delete?id=" + id)) .andExpect(status().is3xxRedirection()) .andExpect(view().name("redirect:/pkgs/")) .andDo(print()); } @Test @WithMockUser(roles=BuilddbConstants.ROLE_CLIENT) void shouldAddPkgValidationError() throws Exception { mockMvc.perform(post("/pkgs/add") .with(csrf()) .formField("sequence", "") .formField("name", "") .formField("version", "") .formField("configure", "") .formField("build", "") .formField("install", "") .formField("setup", "") .formField("notes", "") .formField("url", "")) .andExpect(status().isOk()) .andExpect(view().name("pkgs/add")) .andDo(print()); } @Test @WithMockUser(roles=BuilddbConstants.ROLE_CLIENT) void shouldAddPkgSuccess() throws Exception { mockMvc.perform(post("/pkgs/add") .with(csrf()) .formField("sequence", "123") .formField("name", "test") .formField("version", "1.2.3-test") .formField("configure", "testconf") .formField("build", "testbuild") .formField("install", "testinstall") .formField("setup", "testsetup") .formField("notes", "testnotes") .formField("url", "http://test.org/test-1.2.3.tar.gz")) .andExpect(status().is3xxRedirection()) .andExpect(view().name("redirect:/pkgs")) .andDo(print()); } @Test @WithMockUser(roles=BuilddbConstants.ROLE_CLIENT) void shouldEditPkgSuccess() throws Exception { Pkg pkg = new Pkg(123, "test", "1.2.3", "", "", "", "", "", ""); pkgRepository.save(pkg); List pkgs = pkgRepository.findAll(); pkg = pkgs.get(0); Integer id = pkg.getId(); this.mockMvc.perform(post("/pkgs/edit?id=" + id) .with(csrf()) .formField("sequence", "123") .formField("name", "test") .formField("version", "4.5.6-test") .formField("configure", "") .formField("build", "") .formField("install", "") .formField("setup", "") .formField("notes", "") .formField("url", "")) .andExpect(status().is3xxRedirection()) .andExpect(view().name("redirect:/pkgs/#" + id)) .andDo(print()); } }