package gov.samhsa.consent2share.web.controller; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; 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.model; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; import gov.samhsa.consent2share.common.AuthenticatedUser; import gov.samhsa.consent2share.common.UserContext; import gov.samhsa.consent2share.service.dto.CodeSystemVersionDto; import gov.samhsa.consent2share.service.valueset.CodeSystemNotFoundException; import gov.samhsa.consent2share.service.valueset.CodeSystemVersionNotFoundException; import gov.samhsa.consent2share.service.valueset.CodeSystemVersionService; import gov.samhsa.consent2share.web.controller.CodeSystemVersionController; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; @RunWith(MockitoJUnitRunner.class) public class CodeSystemVersionControllerTest { @InjectMocks CodeSystemVersionController codeSystemVersionController; @Mock CodeSystemVersionService codeSystemVersionService; @Mock UserContext userContext; MockMvc mockMvc; @Before public void setUp(){ mockMvc = MockMvcBuilders.standaloneSetup(this.codeSystemVersionController).build(); } @Test public void testGetCodeSystemVersionList() throws Exception{ List<CodeSystemVersionDto> codeSystemVersionDtos=(List<CodeSystemVersionDto>) mock(List.class); when(codeSystemVersionService.findAll()).thenReturn(codeSystemVersionDtos); mockMvc.perform(get("/sysadmin/codeSystemVersionList")) .andExpect(status().isOk()) .andExpect(model().attribute("codeSystemVersionDtos",codeSystemVersionDtos)) .andExpect(view().name("views/sysadmin/codeSystemVersionList")); } @Test public void testGetCodeSystemVersionAdd() throws Exception{ CodeSystemVersionDto codeSystemVersionDto=new CodeSystemVersionDto(); AuthenticatedUser currentUser=mock(AuthenticatedUser.class); when(userContext.getCurrentUser()).thenReturn(currentUser); mockMvc.perform(get("/sysadmin/codeSystemVersionAdd.html") .sessionAttr("codeSystemVersionDto", codeSystemVersionDto)) .andExpect(status().isOk()) .andExpect(view().name("views/sysadmin/codeSystemVersionAdd")); } @Test public void testGetCodeSystemVersionAdd_ThrowException() throws Exception{ CodeSystemVersionDto codeSystemVersionDto=new CodeSystemVersionDto(); AuthenticatedUser currentUser=mock(AuthenticatedUser.class); when(userContext.getCurrentUser()).thenReturn(currentUser); when(codeSystemVersionService.create()).thenThrow(new CodeSystemNotFoundException()); mockMvc.perform(get("/sysadmin/codeSystemVersionAdd.html") .sessionAttr("codeSystemVersionDto", codeSystemVersionDto)) .andExpect(status().isOk()) .andExpect(view().name("views/sysadmin/codeSystemVersionList")); } @Test public void testCreatedCodeSystemVersionForm() throws Exception{ AuthenticatedUser currentUser=mock(AuthenticatedUser.class); when(userContext.getCurrentUser()).thenReturn(currentUser); final String username="username"; when(currentUser.getUsername()).thenReturn(username); CodeSystemVersionDto codeSystemVersionDto=mock(CodeSystemVersionDto.class); when(codeSystemVersionService.create(any(CodeSystemVersionDto.class))).thenReturn(codeSystemVersionDto); when(codeSystemVersionDto.getCode()).thenReturn("code"); when(codeSystemVersionDto.getName()).thenReturn("name"); mockMvc.perform(post("/sysadmin/codeSystemVersion/create") .contentType(MediaType.APPLICATION_FORM_URLENCODED) .param("name","name") .param("code","code")) .andExpect(status().isFound()) .andExpect(view().name("redirect:../../codeSystemVersionList")); } @Test public void testCreatedCodeSystemVersionListForm_DataIntegrityViolationException() throws Exception{ AuthenticatedUser currentUser=mock(AuthenticatedUser.class); when(userContext.getCurrentUser()).thenReturn(currentUser); final String username="username"; when(currentUser.getUsername()).thenReturn(username); CodeSystemVersionDto codeSystemVersionDto=mock(CodeSystemVersionDto.class); when(codeSystemVersionService.create(any(CodeSystemVersionDto.class))).thenThrow(new DataIntegrityViolationException("DataIntegrityViolationException")); when(codeSystemVersionDto.getCode()).thenReturn("code"); when(codeSystemVersionDto.getName()).thenReturn("name"); mockMvc.perform(post("/sysadmin/codeSystemVersion/create") .param("name","name") .param("code","code")) .andExpect(status().isFound()) .andExpect(view().name("redirect:../codeSystemVersionAdd.html")); } @Test public void testCreatedCodeSystemVersionListForm_throw_CodeSystemNotFoundException () throws Exception{ AuthenticatedUser currentUser=mock(AuthenticatedUser.class); when(userContext.getCurrentUser()).thenReturn(currentUser); final String username="username"; when(currentUser.getUsername()).thenReturn(username); CodeSystemVersionDto codeSystemVersionDto=mock(CodeSystemVersionDto.class); when(codeSystemVersionService.create(any(CodeSystemVersionDto.class))).thenThrow(new CodeSystemNotFoundException ()); when(codeSystemVersionDto.getCode()).thenReturn("code"); when(codeSystemVersionDto.getName()).thenReturn("name"); mockMvc.perform(post("/sysadmin/codeSystemVersion/create") .param("name","name") .param("code","code")) .andExpect(status().isFound()) .andExpect(view().name("redirect:../codeSystemVersionAdd.html")); } @Test public void testDeleteCodeSystemVersion() throws Exception{ CodeSystemVersionDto deleted=new CodeSystemVersionDto(); when(codeSystemVersionService.delete(anyLong())).thenReturn(deleted); mockMvc.perform(post("/sysadmin/codeSystemVersion/delete/1")) .andExpect(view().name("redirect:../../codeSystemVersionList")); } @Test public void testDeleteCodeSystemVersionForm_throwException() throws Exception{ when(codeSystemVersionService.delete(anyLong())).thenThrow(new CodeSystemVersionNotFoundException()); mockMvc.perform(post("/sysadmin/codeSystemVersion/delete/1")) .andExpect(view().name("redirect:../../codeSystemVersionList")); } @Test public void testEditCodeSystemVersionForm() throws Exception{ CodeSystemVersionDto editCodeSystemVersionDto=new CodeSystemVersionDto(); when(codeSystemVersionService.findById(anyLong())).thenReturn(editCodeSystemVersionDto); mockMvc.perform(get("/sysadmin/codeSystemVersion/edit/1")) .andExpect(status().isOk()) .andExpect(model().attribute("codeSystemVersionDto", editCodeSystemVersionDto)) .andExpect(view().name("views/sysadmin/codeSystemVersionEdit")); } @Test public void testEditCodeSystemVersionForm2() throws Exception{ CodeSystemVersionDto editCodeSystemVersionDto=null; when(codeSystemVersionService.findById(anyLong())).thenReturn(editCodeSystemVersionDto); mockMvc.perform(get("/sysadmin/codeSystemVersion/edit/1")) .andExpect(model().attribute("codeSystemVersionDto", editCodeSystemVersionDto)) .andExpect(view().name("redirect:../../codeSystemVersionList")); } @Test public void testEditCodeSystemVersionForm_Post() throws Exception{ CodeSystemVersionDto editCodeSystemVersionDto=new CodeSystemVersionDto(); editCodeSystemVersionDto.setId((long) 1); editCodeSystemVersionDto.setCode("code"); editCodeSystemVersionDto.setName("name"); AuthenticatedUser currentUser=mock(AuthenticatedUser.class); when(userContext.getCurrentUser()).thenReturn(currentUser); when(codeSystemVersionService.update(any(CodeSystemVersionDto.class))).thenReturn(editCodeSystemVersionDto); mockMvc.perform(post("/sysadmin/codeSystemVersion/edit/1") .param("code", "code") .param("name", "name")) .andExpect(view().name("redirect:../../codeSystemVersionList")); } @Test public void testEditCodeSystemVersionForm_Post_throwException() throws Exception{ CodeSystemVersionDto editCodeSystemVersionDto=new CodeSystemVersionDto(); editCodeSystemVersionDto.setId((long) 1); editCodeSystemVersionDto.setCode("code"); editCodeSystemVersionDto.setName("name"); AuthenticatedUser currentUser=mock(AuthenticatedUser.class); when(userContext.getCurrentUser()).thenReturn(currentUser); when(codeSystemVersionService.update(any(CodeSystemVersionDto.class))).thenThrow(new CodeSystemVersionNotFoundException()); mockMvc.perform(post("/sysadmin/codeSystemVersion/edit/1") .param("code", "code") .param("name", "name")) .andExpect(view().name("redirect:../../codeSystemVersionList")); } }