blob: 4e73923d6d1488798ba339a47c044c87631b4748 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2011 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.tasks.tests;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.DateRange;
import org.eclipse.mylyn.internal.tasks.core.DayDateRange;
import org.eclipse.mylyn.internal.tasks.core.LocalTask;
import org.eclipse.mylyn.internal.tasks.core.ScheduledTaskContainer;
import org.eclipse.mylyn.internal.tasks.core.TaskActivityUtil;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListInterestFilter;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskScheduleContentProvider;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITask.SynchronizationState;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector;
import org.eclipse.mylyn.tasks.tests.connector.MockTask;
/**
* @author Rob Elves
*/
public class ScheduledPresentationTest extends TestCase {
@Override
protected void setUp() throws Exception {
// ContextCorePlugin.getContextManager().getActivityMetaContext().reset();
// ContextCorePlugin.getContextManager().saveActivityMetaContext();
TaskTestUtil.resetTaskList();
TasksUiPlugin.getExternalizationManager().requestSave();
}
@Override
protected void tearDown() throws Exception {
TaskTestUtil.resetTaskList();
TasksUiPlugin.getExternalizationManager().requestSave();
}
public void testWeekStartChange() {
TaskListInterestFilter filter = new TaskListInterestFilter();
TasksUiPlugin.getTaskActivityManager().setWeekStartDay(Calendar.MONDAY);
DateRange lastDay = TaskActivityUtil.getCurrentWeek().getDayOfWeek(Calendar.SUNDAY);
AbstractTask task1 = new LocalTask("task 1", "Task 1");
TasksUiPlugin.getTaskList().addTask(task1);
TasksUiPlugin.getTaskActivityManager().setScheduledFor(task1, lastDay);
assertTrue(filter.isInterestingForThisWeek(null, task1));
TasksUiPlugin.getTaskActivityManager().setWeekStartDay(Calendar.SUNDAY);
assertFalse(filter.isInterestingForThisWeek(null, task1));
}
public void testScheduledDisplayed() {
DateRange lastDay = TaskActivityUtil.getDayOf(TaskActivityUtil.getEndOfCurrentWeek().getTime());
AbstractTask task1 = new LocalTask("task 1", "Task 1");
TasksUiPlugin.getTaskList().addTask(task1);
TasksUiPlugin.getTaskActivityManager().setScheduledFor(task1, lastDay);
TaskRepository repository = new TaskRepository(MockRepositoryConnector.CONNECTOR_KIND,
MockRepositoryConnector.REPOSITORY_URL);
repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials("testuser",
"testpassword"), false);
TasksUiPlugin.getRepositoryManager().addRepository(repository);
MockTask mockTask = new MockTask(MockRepositoryConnector.REPOSITORY_URL, "123", "mock task");
mockTask.setOwner("anotheruser");
// Scheduled for THIS WEEK and DUE TODAY and owned by somebody else (bug#316657)
TasksUiPlugin.getTaskActivityManager().setScheduledFor(mockTask, TaskActivityUtil.getCurrentWeek());
TasksUiPlugin.getTaskActivityManager().setDueDate(mockTask, TaskActivityUtil.getCalendar().getTime());
TasksUiPlugin.getTaskList().addTask(mockTask);
Map<ITask, ScheduledTaskContainer> results = new HashMap<ITask, ScheduledTaskContainer>();
results.put(mockTask, null);
results.put(task1, null);
populateResults(results, false);
assertNotNull("Task scheduled but not visible in scheduled presentation", results.get(mockTask));
assertEquals("This Week", results.get(mockTask).getSummary());
assertNotNull(results.get(task1));
// Scheduled for NEXT WEEK AND INCOMING
TasksUiPlugin.getTaskActivityManager().setScheduledFor(mockTask, TaskActivityUtil.getNextWeek());
mockTask.setSynchronizationState(SynchronizationState.INCOMING);
results.put(mockTask, null);
results.put(task1, null);
// Should be revealed in Next Week since tasklist NOT in FOCUSED MODE
populateResults(results, false);
assertNotNull("Task scheduled but not visible in scheduled presentation", results.get(mockTask));
assertEquals("Next Week", results.get(mockTask).getSummary());
assertNotNull(results.get(task1));
results.put(mockTask, null);
results.put(task1, null);
// Should be revealed in INCOMING since tasklist in FOCUSED MODE
populateResults(results, true);
assertNotNull("Task scheduled but not visible in scheduled presentation", results.get(mockTask));
assertEquals("Incoming", results.get(mockTask).getSummary());
assertNotNull(results.get(task1));
results.put(mockTask, null);
results.put(task1, null);
// Scheduled and Due for a day next week
mockTask.setSynchronizationState(SynchronizationState.SYNCHRONIZED);
TasksUiPlugin.getTaskActivityManager().setDueDate(mockTask,
TaskActivityUtil.getNextWeek().getDayOfWeek(3).getStartDate().getTime());
populateResults(results, false);
assertNotNull("Task scheduled but not visible in scheduled presentation", results.get(mockTask));
assertEquals("Next Week", results.get(mockTask).getSummary());
results.put(mockTask, null);
results.put(task1, null);
// Overscheduled
DayDateRange dayDateRange = TaskActivityUtil.getDayOf(new Date(86400000));
TasksUiPlugin.getTaskActivityManager().setScheduledFor(mockTask, dayDateRange);
mockTask.setSynchronizationState(SynchronizationState.SYNCHRONIZED);
results.put(mockTask, null);
populateResults(results, false);
assertNotNull("Task scheduled but not visible in scheduled presentation", results.get(mockTask));
assertTrue(results.get(mockTask).getSummary().contains("Today"));
// Scheduled for a specific DAY next week
results.put(mockTask, null);
TasksUiPlugin.getTaskActivityManager()
.setScheduledFor(mockTask, TaskActivityUtil.getNextWeek().getDayOfWeek(3));
mockTask.setSynchronizationState(SynchronizationState.SYNCHRONIZED);
populateResults(results, false);
assertNotNull("Task scheduled but not visible in scheduled presentation", results.get(mockTask));
assertEquals(TaskActivityUtil.getNextWeek().getDayOfWeek(3), results.get(mockTask).getDateRange());
// Scheduled for a specific DAY next week with INCOMING_NEW
results.put(mockTask, null);
mockTask.setSynchronizationState(SynchronizationState.INCOMING_NEW);
populateResults(results, true);
assertNotNull("Task scheduled but not visible in scheduled presentation", results.get(mockTask));
assertEquals("Incoming", results.get(mockTask).getSummary());
// Scheduled for NEXT WEEK AND DUE on date next week
mockTask.setSynchronizationState(SynchronizationState.SYNCHRONIZED);
TasksUiPlugin.getTaskActivityManager().setDueDate(mockTask,
TaskActivityUtil.getNextWeek().getDayOfWeek(3).getStartDate().getTime());
TasksUiPlugin.getTaskActivityManager().setScheduledFor(mockTask, TaskActivityUtil.getNextWeek());
mockTask.setOwner("testuser");
results.put(mockTask, null);
results.put(task1, null);
// Should be revealed in date bin NOT Next Week day bin
populateResults(results, false);
assertNotNull("Task scheduled but not visible in scheduled presentation", results.get(mockTask));
assertFalse("Next Week".equals(results.get(mockTask).getSummary()));
}
private void populateResults(Map<ITask, ScheduledTaskContainer> results, boolean focused) {
TaskListView.getFromActivePerspective().setFocusedMode(focused);
TaskScheduleContentProvider provider = new TaskScheduleContentProvider(TaskListView.getFromActivePerspective());
Object[] bins = provider.getElements(TaskListView.getFromActivePerspective().getViewSite());
TaskListInterestFilter filter = new TaskListInterestFilter();
for (Object object : bins) {
if (focused) {
if (!filter.select(null, object)) {
continue;
}
}
for (ITask task : ((ScheduledTaskContainer) object).getChildren()) {
if (results.containsKey(task)) {
results.put(task, (ScheduledTaskContainer) object);
}
}
}
if (focused) {
TaskListView.getFromActivePerspective().setFocusedMode(!focused);
}
}
// public void testResetAndRollOver() {
//
// ScheduledTaskContainer pastWeeks = TasksUiPlugin.getTaskActivityManager().getActivityPast();
// ScheduledTaskContainer thisWeek = TasksUiPlugin.getTaskActivityManager().getActivityThisWeek();
// ScheduledTaskContainer nextWeek = TasksUiPlugin.getTaskActivityManager().getActivityNextWeek();
// ScheduledTaskContainer futureWeeks = TasksUiPlugin.getTaskActivityManager().getActivityFuture();
//
// assertEquals(0, thisWeek.getChildren().size());
// assertTrue(thisWeek.isPresent());
// assertTrue(nextWeek.isFuture());
//
// long pastStartTime = pastWeeks.getEnd().getTimeInMillis();
// long thisWeekStartTime = thisWeek.getStart().getTimeInMillis();
// long nextStartTime = nextWeek.getStart().getTimeInMillis();
// long futureStartTime = futureWeeks.getStart().getTimeInMillis();
//
// Calendar pastWeeksTaskStart = Calendar.getInstance();
// pastWeeksTaskStart.setTimeInMillis(pastStartTime - 10);
// assertTrue(pastWeeks.includes(pastWeeksTaskStart));
//
// Calendar thisWeekTaskStart = Calendar.getInstance();
// thisWeekTaskStart.setTimeInMillis(thisWeekStartTime + 10);
// assertTrue(thisWeek.includes(thisWeekTaskStart));
//
// Calendar thisWeekTaskStop = Calendar.getInstance();
// thisWeekTaskStop.setTimeInMillis(thisWeek.getEnd().getTimeInMillis() - 10);
// assertTrue(thisWeek.includes(thisWeekTaskStop));
//
// Calendar nextWeekTaskStart = Calendar.getInstance();
// nextWeekTaskStart.setTimeInMillis(nextStartTime + 10);
// assertTrue(nextWeek.includes(nextWeekTaskStart));
//
// Calendar futureWeekTaskStart = Calendar.getInstance();
// futureWeekTaskStart.setTimeInMillis(futureStartTime + 10);
// assertTrue(futureWeeks.includes(futureWeekTaskStart));
//
// AbstractTask task1 = new LocalTask("task 1", "Task 1");
// TasksUiPlugin.getTaskList().addTask(task1);
//
// assertEquals(0, TasksUiPlugin.getTaskActivityManager()
// .getScheduledTasks(thisWeek.getStart(), thisWeek.getEnd())
// .size());
//
// TasksUiPlugin.getTaskActivityManager().setScheduledFor(task1, thisWeek.getStart().getTime());
//
//// TasksUiPlugin.getTaskListManager().parseInteractionEvent(event2);
// assertEquals(1, TasksUiPlugin.getTaskActivityManager()
// .getScheduledTasks(thisWeek.getStart(), thisWeek.getEnd())
// .size());
// // assertEquals(thisWeekTaskStop.getTime().getTime() -
// // thisWeekTaskStart.getTime().getTime(), thisWeek
// // .getTotalElapsed());
//
// // ROLL OVER
// Date oldStart = TasksUiPlugin.getTaskActivityManager().getStartTime();
// Calendar newStart = Calendar.getInstance();
// newStart.setTime(oldStart);
// newStart.add(Calendar.WEEK_OF_MONTH, 1);
// //TasksUiPlugin.getTaskListManager().snapToStartOfWeek(newStart);
//
// TasksUiPlugin.getTaskActivityMonitor().reloadActivityTime();
//
// //ScheduledTaskContainer newPastWeeks = TasksUiPlugin.getTaskListManager().getActivityPast();
// ScheduledTaskContainer newPreviousWeek = TasksUiPlugin.getTaskActivityManager().getActivityPrevious();
// ScheduledTaskContainer newThisWeek = TasksUiPlugin.getTaskActivityManager().getActivityThisWeek();
// ScheduledTaskContainer newNextWeek = TasksUiPlugin.getTaskActivityManager().getActivityNextWeek();
// // DateRangeContainer newFutureWeeks =
// // MylarTaskListPlugin.getTaskListManager().getActivityFuture();
//
// assertTrue(newPreviousWeek.includes(thisWeekTaskStart));
// assertTrue(newThisWeek.includes(nextWeekTaskStart));
// assertTrue(newNextWeek.includes(futureWeekTaskStart));
//
// assertFalse(newThisWeek.includes(thisWeekTaskStart));
// assertFalse(newThisWeek.isPresent());
// assertTrue(newThisWeek.isFuture());
//
// assertEquals(0, TasksUiPlugin.getTaskActivityManager().getScheduledTasks(newThisWeek.getStart(),
// newThisWeek.getEnd()).size());
// assertEquals(1, TasksUiPlugin.getTaskActivityManager().getScheduledTasks(newPreviousWeek.getStart(),
// newPreviousWeek.getEnd()).size());
//
// TasksUiPlugin.getTaskActivityMonitor().reloadActivityTime();
// }
}