package com.qprogramming.tasq.home; import com.qprogramming.tasq.account.*; import com.qprogramming.tasq.events.EventsService; import com.qprogramming.tasq.manage.AppService; import com.qprogramming.tasq.projects.Project; import com.qprogramming.tasq.projects.ProjectRepository; import com.qprogramming.tasq.projects.ProjectService; import com.qprogramming.tasq.task.Task; import com.qprogramming.tasq.task.TaskService; import com.qprogramming.tasq.test.MockSecurityContext; import com.qprogramming.tasq.test.TestUtils; import org.joda.time.DateTime; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.ui.Model; import org.springframework.web.servlet.i18n.SessionLocaleResolver; import javax.servlet.http.HttpServletRequest; import java.util.LinkedList; import java.util.List; import static com.qprogramming.tasq.test.TestUtils.*; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class HomeControllersTest { @Rule public ExpectedException thrown = ExpectedException.none(); private HomeController homeCtrl; private HomeControllerAdvice homeAdvCtrl; private ProjectService projSrv; @Mock private ProjectRepository projRepoMock; @Mock private AccountService accSrvMock; @Mock private UserService usrSrvMock; @Mock private EventsService eventSrvMock; @Mock private TaskService taskSrvMock; @Mock private AppService appSrvMock; @Mock private LastVisitedService visitedSrvMock; @Mock private MockSecurityContext securityMock; @Mock private Authentication authMock; @Mock private Model model; @Mock private HttpServletRequest requestMock; @Mock private SessionLocaleResolver localeResolverMock; private Account testAccount; @Before public void setUp() { testAccount = TestUtils.createAccount(); when(securityMock.getAuthentication()).thenReturn(authMock); when(authMock.getPrincipal()).thenReturn(testAccount); SecurityContextHolder.setContext(securityMock); projSrv = new ProjectService(projRepoMock, accSrvMock, usrSrvMock); homeCtrl = new HomeController(taskSrvMock, projSrv, appSrvMock, eventSrvMock, localeResolverMock); homeAdvCtrl = new HomeControllerAdvice(visitedSrvMock); } @Test public void newUserLoggedTest() { when(projRepoMock.findByParticipants_Id(1L)).thenReturn(new LinkedList<Project>()); testAccount.setRole(Roles.ROLE_VIEWER); Assert.assertEquals("homeNewUser", homeCtrl.index(testAccount, model)); } @Test public void notLoggedTest() { when(appSrvMock.getProperty(AppService.DEFAULTLANG)).thenReturn("en"); Assert.assertEquals("homeNotSignedIn", homeCtrl.index(null, model)); } @Test public void userLoggedTest() { List<Project> projectList = new LinkedList<Project>(); Project project = createProject(); projectList.add(project); when(projRepoMock.findByParticipants_Id(anyLong())).thenReturn(projectList); when(taskSrvMock.findAllByProject(project)).thenReturn(createTaskList(project)); Assert.assertEquals("homeSignedIn", homeCtrl.index(testAccount, model)); } @Test public void getLastProjectsTest() { Project project = createProject(); Project project2 = createProject(2L, "NEW"); List<LastVisited> lastVisitedProjects = new LinkedList<>(); lastVisitedProjects.add(new LastVisited(project, testAccount.getId())); lastVisitedProjects.add(new LastVisited(project2, testAccount.getId())); testAccount.setActiveProject(project.getProjectId()); when(accSrvMock.findByUsername(anyString())).thenReturn(testAccount); when(visitedSrvMock.getAccountLastProjects(testAccount.getId())).thenReturn(lastVisitedProjects); Assert.assertEquals(PROJECT_NAME, homeAdvCtrl.getLastProjects().get(0).getItemName()); } @Test public void getLastTasksTest() { when(accSrvMock.findByUsername(anyString())).thenReturn(testAccount); when(visitedSrvMock.getAccountLastTasks(testAccount.getId())).thenReturn(TestUtils.createLastVisitedTasks(3)); Assert.assertEquals("TEST-0", homeAdvCtrl.getLastTasks().get(0).getItemId()); } private List<Task> createTaskList(Project project) { List<Task> taskList = new LinkedList<Task>(); for (int i = 0; i < 5; i++) { taskList.add(createTask("TASK" + i, i, project)); } Task myTask = createTask("MINE", 6, project); myTask.setAssignee(testAccount); taskList.add(myTask); Task dueTask = createTask("MINE", 6, project); DateTime dt = new DateTime(); dt.plusDays(1); dueTask.setDue_date(dt.toDate()); taskList.add(dueTask); return taskList; } }