package com.qprogramming.tasq.task.watched; import com.qprogramming.tasq.account.Account; import com.qprogramming.tasq.account.Roles; import com.qprogramming.tasq.events.DisplayEvent; import com.qprogramming.tasq.events.Event; import com.qprogramming.tasq.support.ResultData; 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.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.context.MessageSource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import java.util.*; import static com.qprogramming.tasq.test.TestUtils.TEST_1; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * Created by Remote on 01.02.2017. */ @RunWith(MockitoJUnitRunner.class) public class WatchedTaskControllerTest { @Mock private MessageSource msgMock; @Mock private WatchedTaskRepository watchRepoMock; @Mock private TaskService taskSrvMock; @Mock private MockSecurityContext securityMock; @Mock private Authentication authMock; private WatchedTaskService watchSrv; private WatchedTaskController watchCtrl; private Account testAccount; @Before public void setUp() throws Exception { 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); SecurityContextHolder.setContext(securityMock); watchSrv = new WatchedTaskService(watchRepoMock); watchCtrl = new WatchedTaskController(watchSrv, msgMock, taskSrvMock); } @Test public void watchNotUserTest() throws Exception { testAccount.setRole(Roles.ROLE_VIEWER); ResultData resultData = watchCtrl.watch(TEST_1); assertEquals(ResultData.Code.ERROR, resultData.code); } @Test public void watchStartTest() throws Exception { Task task = TestUtils.createTask(TestUtils.TASK_NAME, 1, TestUtils.createProject()); when(taskSrvMock.findById(TEST_1)).thenReturn(task); ResultData resultData = watchCtrl.watch(TEST_1); verify(watchRepoMock, times(1)).save(any(WatchedTask.class)); assertEquals(ResultData.Code.OK, resultData.code); } @Test public void watchStopTest() throws Exception { WatchedTask watched = new WatchedTask(); Set<Account> watchers = new HashSet<>(); watchers.add(testAccount); watched.setWatchers(watchers); watched.setId(TEST_1); Task task = TestUtils.createTask(TestUtils.TASK_NAME, 1, TestUtils.createProject()); when(taskSrvMock.findById(TEST_1)).thenReturn(task); when(watchRepoMock.findById(TEST_1)).thenReturn(watched); assertTrue("Test account is not watching , but is in watchers", watchSrv.isWatching(TEST_1)); ResultData resultData = watchCtrl.watch(TEST_1); verify(watchRepoMock, times(1)).save(any(WatchedTask.class)); assertEquals(ResultData.Code.OK, resultData.code); } @Test public void getWatchesTest() throws Exception { WatchedTask watched = new WatchedTask(); Set<Account> watchers = new HashSet<>(); watchers.add(testAccount); watched.setWatchers(watchers); watched.setId(TEST_1); WatchedTask watched2 = new WatchedTask(); watched2.setId(TestUtils.TEST_2); List<WatchedTask> list = new ArrayList<>(); list.add(watched); list.add(watched2); assertNotEquals(watched, watched2); assertNotEquals(watched.hashCode(), watched2.hashCode()); assertEquals("Count is not correct for watched task", 1, watched.getCount()); Page<WatchedTask> page = new PageImpl<>(list); Pageable pageSpecification = new PageRequest(0, 5); when(watchRepoMock.findByWatchersId(testAccount.getId(), pageSpecification)).thenReturn(page); Page<DisplayWatch> watches = watchCtrl.getWatches(null, pageSpecification); assertEquals(2, watches.getTotalElements()); } @Test public void addToWatchesTest(){ Account account = TestUtils.createAccount("John", "Doe"); Task task = TestUtils.createTask(TestUtils.TASK_NAME, 1, TestUtils.createProject()); when(taskSrvMock.findById(TEST_1)).thenReturn(task); watchSrv.addToWatchers(task, account); verify(watchRepoMock, times(1)).save(any(WatchedTask.class)); } }