mirror of https://github.com/tasks/tasks
Reminder test improvements
parent
c02164ad7a
commit
f46aebb784
@ -1,71 +0,0 @@
|
|||||||
package com.todoroo.astrid.reminders;
|
|
||||||
|
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
|
||||||
|
|
||||||
import com.todoroo.astrid.data.Task;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.tasks.preferences.Preferences;
|
|
||||||
import org.tasks.time.DateTime;
|
|
||||||
|
|
||||||
import static android.support.test.InstrumentationRegistry.getTargetContext;
|
|
||||||
import static com.natpryce.makeiteasy.MakeItEasy.with;
|
|
||||||
import static com.todoroo.astrid.data.Task.NOTIFY_AT_DEADLINE;
|
|
||||||
import static com.todoroo.astrid.reminders.ReminderService.NO_ALARM;
|
|
||||||
import static junit.framework.Assert.assertEquals;
|
|
||||||
import static org.tasks.makers.TaskMaker.DUE_DATE;
|
|
||||||
import static org.tasks.makers.TaskMaker.DUE_TIME;
|
|
||||||
import static org.tasks.makers.TaskMaker.REMINDERS;
|
|
||||||
import static org.tasks.makers.TaskMaker.REMINDER_LAST;
|
|
||||||
import static org.tasks.makers.TaskMaker.newTask;
|
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
|
||||||
public class NotifyAtDeadlineTest {
|
|
||||||
|
|
||||||
private ReminderService reminderService;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
Preferences preferences = new Preferences(getTargetContext(), null);
|
|
||||||
reminderService = new ReminderService(preferences, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testNoReminderWhenNoDueDate() {
|
|
||||||
Task task = newTask(with(REMINDERS, NOTIFY_AT_DEADLINE));
|
|
||||||
assertEquals(NO_ALARM, reminderService.calculateNextDueDateReminder(task));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testNoReminderWhenNotifyAtDeadlineFlagNotSet() {
|
|
||||||
Task task = newTask(with(DUE_TIME, new DateTime(2014, 1, 24, 19, 23)));
|
|
||||||
assertEquals(NO_ALARM, reminderService.calculateNextDueDateReminder(task));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testScheduleReminderAtDueTime() {
|
|
||||||
final DateTime dueDate = new DateTime(2014, 1, 24, 19, 23);
|
|
||||||
Task task = newTask(with(DUE_TIME, dueDate), with(REMINDERS, NOTIFY_AT_DEADLINE));
|
|
||||||
assertEquals(dueDate.plusSeconds(1).getMillis(), reminderService.calculateNextDueDateReminder(task));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testScheduleReminderAtDefaultDueTime() {
|
|
||||||
final DateTime dueDate = new DateTime(2015, 12, 29, 12, 0);
|
|
||||||
Task task = newTask(with(DUE_DATE, dueDate), with(REMINDERS, NOTIFY_AT_DEADLINE));
|
|
||||||
assertEquals(dueDate.withHourOfDay(18).getMillis(),
|
|
||||||
reminderService.calculateNextDueDateReminder(task));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testNoReminderIfAlreadyRemindedPastDueDate() {
|
|
||||||
final DateTime dueDate = new DateTime(2015, 12, 29, 19, 23);
|
|
||||||
Task task = newTask(
|
|
||||||
with(DUE_TIME, dueDate),
|
|
||||||
with(REMINDER_LAST, dueDate.plusSeconds(1)),
|
|
||||||
with(REMINDERS, NOTIFY_AT_DEADLINE));
|
|
||||||
assertEquals(NO_ALARM, reminderService.calculateNextDueDateReminder(task));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,139 +0,0 @@
|
|||||||
package com.todoroo.astrid.reminders;
|
|
||||||
|
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
|
||||||
|
|
||||||
import org.junit.After;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.InOrder;
|
|
||||||
import org.tasks.Freeze;
|
|
||||||
import org.tasks.Snippet;
|
|
||||||
import org.tasks.jobs.JobManager;
|
|
||||||
import org.tasks.jobs.Reminder;
|
|
||||||
import org.tasks.makers.TaskMaker;
|
|
||||||
import org.tasks.preferences.Preferences;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import static com.natpryce.makeiteasy.MakeItEasy.with;
|
|
||||||
import static com.todoroo.astrid.reminders.ReminderService.TYPE_DUE;
|
|
||||||
import static java.util.Arrays.asList;
|
|
||||||
import static java.util.Collections.singletonList;
|
|
||||||
import static junit.framework.Assert.assertEquals;
|
|
||||||
import static org.mockito.AdditionalAnswers.returnsFirstArg;
|
|
||||||
import static org.mockito.Matchers.anyLong;
|
|
||||||
import static org.mockito.Mockito.inOrder;
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
import static org.tasks.makers.TaskMaker.newTask;
|
|
||||||
import static org.tasks.time.DateTimeUtils.currentTimeMillis;
|
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
|
||||||
public class ReminderAlarmSchedulerTest {
|
|
||||||
|
|
||||||
private static final long ONE_MINUTE = TimeUnit.MINUTES.toMillis(1);
|
|
||||||
|
|
||||||
private JobManager jobManager;
|
|
||||||
private ReminderAlarmScheduler scheduler;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void before() {
|
|
||||||
jobManager = mock(JobManager.class);
|
|
||||||
Preferences preferences = mock(Preferences.class);
|
|
||||||
when(preferences.adjustForQuietHours(anyLong())).then(returnsFirstArg());
|
|
||||||
scheduler = new ReminderAlarmScheduler(jobManager, preferences);
|
|
||||||
}
|
|
||||||
|
|
||||||
@After
|
|
||||||
public void after() {
|
|
||||||
verifyNoMoreInteractions(jobManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void scheduleFirstReminder() {
|
|
||||||
long now = currentTimeMillis();
|
|
||||||
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 1L)), now, 0);
|
|
||||||
|
|
||||||
verify(jobManager).scheduleReminder(now, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void dontScheduleLaterReminder() {
|
|
||||||
long now = currentTimeMillis();
|
|
||||||
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 1L)), now, 0);
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 1L)), now + ONE_MINUTE, 0);
|
|
||||||
|
|
||||||
verify(jobManager).scheduleReminder(now, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void rescheduleNewerReminder() {
|
|
||||||
long now = currentTimeMillis();
|
|
||||||
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 1L)), now, 0);
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 2L)), now - ONE_MINUTE, 0);
|
|
||||||
|
|
||||||
InOrder order = inOrder(jobManager);
|
|
||||||
order.verify(jobManager).scheduleReminder(now, true);
|
|
||||||
order.verify(jobManager).scheduleReminder(now - ONE_MINUTE, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void removeLastReminderCancelsJob() {
|
|
||||||
long now = currentTimeMillis();
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 1L)), now, 0);
|
|
||||||
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 1L)), 0, 0);
|
|
||||||
|
|
||||||
InOrder order = inOrder(jobManager);
|
|
||||||
order.verify(jobManager).scheduleReminder(now, true);
|
|
||||||
order.verify(jobManager).cancelReminders();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void removePastRemindersReturnsPastReminder() {
|
|
||||||
long now = currentTimeMillis();
|
|
||||||
|
|
||||||
Freeze.freezeAt(now).thawAfter(new Snippet() {{
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 1L)), now, TYPE_DUE);
|
|
||||||
|
|
||||||
List<Reminder> reminders = scheduler.removePastReminders();
|
|
||||||
|
|
||||||
verify(jobManager).scheduleReminder(now, true);
|
|
||||||
|
|
||||||
assertEquals(singletonList(new Reminder(1, now, TYPE_DUE)), reminders);
|
|
||||||
}});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void dontRescheduleForSecondJobAtSameTime() {
|
|
||||||
long now = currentTimeMillis();
|
|
||||||
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 1L)), now, TYPE_DUE);
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 2L)), now, TYPE_DUE);
|
|
||||||
|
|
||||||
verify(jobManager).scheduleReminder(now, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void removePastRemindersReturnsPastRemindersAtSameTime() {
|
|
||||||
long now = currentTimeMillis();
|
|
||||||
|
|
||||||
Freeze.freezeAt(now).thawAfter(new Snippet() {{
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 1L)), now, TYPE_DUE);
|
|
||||||
scheduler.createAlarm(newTask(with(TaskMaker.ID, 2L)), now, TYPE_DUE);
|
|
||||||
|
|
||||||
List<Reminder> reminders = scheduler.removePastReminders();
|
|
||||||
|
|
||||||
verify(jobManager).scheduleReminder(now, true);
|
|
||||||
|
|
||||||
assertEquals(asList(new Reminder(1, now, TYPE_DUE), new Reminder(2, now, TYPE_DUE)), reminders);
|
|
||||||
}});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
package com.todoroo.astrid.reminders;
|
|
||||||
|
|
||||||
import com.todoroo.astrid.data.Task;
|
|
||||||
|
|
||||||
public interface AlarmScheduler {
|
|
||||||
void createAlarm(Task task, long time, int type);
|
|
||||||
|
|
||||||
void clear();
|
|
||||||
}
|
|
||||||
@ -1,74 +0,0 @@
|
|||||||
package com.todoroo.astrid.reminders;
|
|
||||||
|
|
||||||
import com.todoroo.astrid.data.Task;
|
|
||||||
|
|
||||||
import org.tasks.injection.ApplicationScope;
|
|
||||||
import org.tasks.jobs.JobManager;
|
|
||||||
import org.tasks.jobs.JobQueue;
|
|
||||||
import org.tasks.jobs.Reminder;
|
|
||||||
import org.tasks.preferences.Preferences;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import static com.todoroo.astrid.reminders.ReminderService.NO_ALARM;
|
|
||||||
|
|
||||||
@ApplicationScope
|
|
||||||
public class ReminderAlarmScheduler implements AlarmScheduler {
|
|
||||||
|
|
||||||
private final JobQueue<Reminder> jobs;
|
|
||||||
private final JobManager jobManager;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public ReminderAlarmScheduler(JobManager jobManager, Preferences preferences) {
|
|
||||||
this.jobManager = jobManager;
|
|
||||||
jobs = new JobQueue<>(preferences);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an alarm for the given task at the given type
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void createAlarm(Task task, long time, int type) {
|
|
||||||
long taskId = task.getId();
|
|
||||||
if(taskId == Task.NO_ID) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (time == 0 || time == NO_ALARM) {
|
|
||||||
if (jobs.cancel(taskId)) {
|
|
||||||
scheduleNext(true);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Reminder reminder = new Reminder(taskId, time, type);
|
|
||||||
if (jobs.add(reminder)) {
|
|
||||||
scheduleNext(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clear() {
|
|
||||||
jobs.clear();
|
|
||||||
jobManager.cancelReminders();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void scheduleNextJob() {
|
|
||||||
scheduleNext(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void scheduleNext(boolean cancelCurrent) {
|
|
||||||
if (jobs.isEmpty()) {
|
|
||||||
if (cancelCurrent) {
|
|
||||||
jobManager.cancelReminders();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
jobManager.scheduleReminder(jobs.nextScheduledTime(), cancelCurrent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Reminder> removePastReminders() {
|
|
||||||
return jobs.removeOverdueJobs();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue