package com.qprogramming.tasq.task.worklog; import com.qprogramming.tasq.account.Account; import com.qprogramming.tasq.account.AccountService; import com.qprogramming.tasq.agile.Sprint; import com.qprogramming.tasq.events.EventsService; import com.qprogramming.tasq.projects.Project; import com.qprogramming.tasq.task.Task; import com.qprogramming.tasq.test.MockSecurityContext; import com.qprogramming.tasq.test.TestUtils; import org.joda.time.DateTime; import org.joda.time.Period; 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.context.MessageSource; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.ui.Model; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; import static com.qprogramming.tasq.test.TestUtils.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class WorkLogTest { @Rule public ExpectedException thrown = ExpectedException.none(); private Account testAccount; private Task task1; private Task task2; private WorkLogService wlSrv; @Mock private WorkLogRepository wlRepoMock; @Mock private EventsService eventSrvMock; @Mock private WorkLogService wrkLogSrvMock; @Mock private MessageSource msgMock; @Mock private AccountService accountServiceMock; @Mock private MockSecurityContext securityMock; @Mock private Authentication authMock; @Mock private RedirectAttributes raMock; @Mock private HttpServletResponse responseMock; @Mock private HttpServletRequest requestMock; @Mock private Model modelMock; @Before public void setUp() { testAccount = TestUtils.createAccount(); testAccount.setLanguage("en"); when(msgMock.getMessage(anyString(), any(Object[].class), any(Locale.class))).thenReturn("MESSAGE"); when(securityMock.getAuthentication()).thenReturn(authMock); when(authMock.getPrincipal()).thenReturn(testAccount); Project project = createProject(); task1 = createTask(TASK_NAME, 1, project); task2 = createTask(TASK_NAME, 2, project); SecurityContextHolder.setContext(securityMock); wlSrv = new WorkLogService(wlRepoMock, eventSrvMock); } @Test public void addTimedWorkLogTest() { task1.setRemaining(new Period(2, 0, 0, 0)); WorkLog worklog = createWorkLog(task1, LogType.LOG, null, new Date()); when(wlRepoMock.save(any(WorkLog.class))).thenReturn(worklog); wlSrv.addTimedWorkLog(task1, "", new Date(), null, new Period(1, 0, 0, 0), LogType.LOG); Assert.assertEquals(1, task1.getRawRemaining().getHours()); verify(eventSrvMock, times(1)).addWatchEvent(any(WorkLog.class), anyString(), any(Date.class)); } @Test public void addTimedWorkLogWithRemainingTest() { task1.setRemaining(new Period(3, 0, 0, 0)); WorkLog worklog = createWorkLog(task1, LogType.LOG, null, new Date()); when(wlRepoMock.save(any(WorkLog.class))).thenReturn(worklog); wlSrv.addTimedWorkLog(task1, "", new Date(), new Period(1, 0, 0, 0), new Period(1, 0, 0, 0), LogType.LOG); verify(eventSrvMock, times(1)).addWatchEvent(any(WorkLog.class), anyString(), any(Date.class)); } @Test public void addDatedWorkLogTest() { task1.setRemaining(new Period(3, 0, 0, 0)); WorkLog worklog = createWorkLog(task1, LogType.ESTIMATE, null, new Date()); when(wlRepoMock.save(any(WorkLog.class))).thenReturn(worklog); wlSrv.addDatedWorkLog(task1, null, new DateTime().minusDays(1).toDate(), LogType.ESTIMATE); verify(eventSrvMock, times(1)).addWatchEvent(any(WorkLog.class), anyString(), any(Date.class)); } @Test public void addActivityLogTest() { task1.setRemaining(new Period(3, 0, 0, 0)); WorkLog worklog = createWorkLog(task1, LogType.LOG, null, new Date()); when(wlRepoMock.save(any(WorkLog.class))).thenReturn(worklog); wlSrv.addActivityLog(task1, null, LogType.LOG); verify(eventSrvMock, times(1)).addWatchEvent(any(WorkLog.class), anyString(), any(Date.class)); } @Test public void addActivityPeriodLogTest() { task1.setRemaining(new Period(3, 0, 0, 0)); WorkLog worklog = createWorkLog(task1, LogType.ESTIMATE, null, new Date()); when(wlRepoMock.save(any(WorkLog.class))).thenReturn(worklog); wlSrv.addActivityPeriodLog(task1, "1h", new Period(3, 0, 0, 0), LogType.ESTIMATE); verify(eventSrvMock, times(1)).addWatchEvent(any(WorkLog.class), anyString(), any(Date.class)); } @Test public void addWorkLogNoTaskTest() { wlSrv.addWorkLogNoTask("", createProject(), LogType.SPRINT_START); verify(wlRepoMock, times(1)).save(any(WorkLog.class)); } @Test public void getProjectEventsTest() { WorkLog worklog = createWorkLog(task1, LogType.LOG, null, new DateTime().minusDays(3).toDate()); WorkLog worklog1 = createWorkLog(task1, LogType.LOG, null, new DateTime().minusDays(2).toDate()); WorkLog worklog2 = createWorkLog(task1, LogType.LOG, null, new DateTime().minusDays(1).toDate()); WorkLog worklog3 = createWorkLog(task1, LogType.LOG, null, new DateTime().minusDays(1).toDate()); List<WorkLog> list = new ArrayList<WorkLog>(); list.add(worklog); list.add(worklog1); list.add(worklog2); list.add(worklog3); when(wlRepoMock.findByProjectId(1L)).thenReturn(list); List<DisplayWorkLog> result = wlSrv.getProjectEvents(createProject()); Assert.assertEquals(4, result.size()); } @Test public void getSprintEventsTest() { Sprint sprint = new Sprint(); sprint.setId(1L); sprint.setSprint_no(1L); sprint.setStart_date(new DateTime().minusDays(2).toDate()); sprint.setEnd_date(new DateTime().plusDays(2).toDate()); sprint.setProject(createProject()); task1.setInSprint(true); task1.addSprint(sprint); task2.setInSprint(false); WorkLog worklog = createWorkLog(task1, LogType.LOG, null, new DateTime().minusDays(2).toDate()); WorkLog worklog1 = createWorkLog(task1, LogType.DELETED, null, new DateTime().minusDays(2).toDate()); WorkLog worklog2 = createWorkLog(task1, LogType.TASKSPRINTADD, null, new DateTime().minusDays(1).toDate()); WorkLog worklog3 = createWorkLog(task1, LogType.TASKSPRINTREMOVE, null, new DateTime().toDate()); WorkLog worklog4 = createWorkLog(task2, LogType.CLOSED, null, new DateTime().toDate()); WorkLog worklog5 = createWorkLog(task1, LogType.EDITED, null, new DateTime().toDate()); WorkLog worklog6 = createWorkLog(task1, LogType.ESTIMATE, null, new DateTime().toDate()); WorkLog worklog7 = createWorkLog(task1, LogType.REOPEN, null, new DateTime().toDate()); WorkLog worklog8 = createWorkLog(task1, LogType.CLOSED, null, new DateTime().toDate()); List<WorkLog> list = new ArrayList<WorkLog>(); list.add(worklog); list.add(worklog1); list.add(worklog2); list.add(worklog3); list.add(worklog4); list.add(worklog5); list.add(worklog6); list.add(worklog7); list.add(worklog8); when(wlRepoMock.findByProjectIdAndTimeBetweenAndWorklogtaskNotNullOrderByTimeAsc(anyLong(), any(Date.class), any(Date.class))).thenReturn(list); List<WorkLog> result = wlSrv.getAllSprintEvents(sprint); Assert.assertEquals(7, result.size()); } @Test public void finProjectCreateCLoseEventsTest() { Project project = createProject(); WorkLog worklog = createWorkLog(task1, LogType.LOG, null, new DateTime().minusDays(2).toDate()); WorkLog worklog1 = createWorkLog(task1, LogType.DELETED, null, new DateTime().minusDays(2).toDate()); WorkLog worklog2 = createWorkLog(task1, LogType.TASKSPRINTADD, null, new DateTime().minusDays(1).toDate()); WorkLog worklog3 = createWorkLog(task1, LogType.TASKSPRINTREMOVE, null, new DateTime().toDate()); WorkLog worklog4 = createWorkLog(task2, LogType.CLOSED, null, new DateTime().toDate()); WorkLog worklog5 = createWorkLog(task1, LogType.EDITED, null, new DateTime().toDate()); WorkLog worklog6 = createWorkLog(task1, LogType.ESTIMATE, null, new DateTime().toDate()); WorkLog worklog7 = createWorkLog(task1, LogType.REOPEN, null, new DateTime().toDate()); WorkLog worklog8 = createWorkLog(task1, LogType.CLOSED, null, new DateTime().toDate()); List<WorkLog> list = new ArrayList<WorkLog>(); list.add(worklog); list.add(worklog1); list.add(worklog2); list.add(worklog3); list.add(worklog4); list.add(worklog5); list.add(worklog6); list.add(worklog7); list.add(worklog8); when(wlRepoMock.findByProjectIdOrderByTimeAsc(anyLong())).thenReturn(list); List<WorkLog> result = wlSrv.findProjectCreateCloseEvents(project, true); Assert.assertEquals(3, result.size()); } @Test public void testWorklogs() { WorkLog worklog = createWorkLog(task1, LogType.LOG, null, new DateTime().minusDays(2).toDate()); WorkLog worklog1 = createWorkLog(task1, LogType.DELETED, null, new DateTime().minusDays(2).toDate()); worklog.setTask(task1); worklog.setAccount(testAccount); Assert.assertNotEquals(worklog, worklog1); } }