diff --git a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/reminders/ReminderSchedulerTest.java b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/reminders/ReminderSchedulerTest.java index 5c098c8d9..4f8790c73 100644 --- a/android/uhabits-core/src/test/java/org/isoron/uhabits/core/reminders/ReminderSchedulerTest.java +++ b/android/uhabits-core/src/test/java/org/isoron/uhabits/core/reminders/ReminderSchedulerTest.java @@ -21,6 +21,7 @@ package org.isoron.uhabits.core.reminders; import org.isoron.uhabits.core.*; import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.preferences.*; import org.isoron.uhabits.core.utils.*; import org.junit.*; import org.junit.runner.*; @@ -29,11 +30,16 @@ import org.mockito.junit.*; import java.util.*; +import static org.isoron.uhabits.core.utils.DateUtils.applyTimezone; +import static org.isoron.uhabits.core.utils.DateUtils.removeTimezone; +import static org.isoron.uhabits.core.utils.DateUtils.setFixedLocalTime; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class ReminderSchedulerTest extends BaseUnitTest { + private final long habitId = 10L; + private Habit habit; private ReminderScheduler reminderScheduler; @@ -41,15 +47,19 @@ public class ReminderSchedulerTest extends BaseUnitTest @Mock private ReminderScheduler.SystemScheduler sys; + @Mock + private WidgetPreferences widgetPreferences; + @Before @Override public void setUp() throws Exception { super.setUp(); habit = fixtures.createEmptyHabit(); + habit.id = habitId; reminderScheduler = - new ReminderScheduler(commandRunner, habitList, sys); + new ReminderScheduler(commandRunner, habitList, sys, widgetPreferences); DateUtils.setFixedTimeZone(TimeZone.getTimeZone("GMT-4")); } @@ -58,7 +68,7 @@ public class ReminderSchedulerTest extends BaseUnitTest public void testScheduleAll() { long now = unixTime(2015, 1, 26, 13, 0); - DateUtils.setFixedLocalTime(now); + setFixedLocalTime(now); Habit h1 = fixtures.createEmptyHabit(); Habit h2 = fixtures.createEmptyHabit(); @@ -88,11 +98,33 @@ public class ReminderSchedulerTest extends BaseUnitTest scheduleAndVerify(atTime, expectedCheckmarkTime, atTime); } + @Test + public void testSchedule_withSnooze() + { + long now = removeTimezone(unixTime(2015, 1, 1, 15, 0)); + setFixedLocalTime(now); + + long snoozeTimeInFuture = unixTime(2015, 1, 1, 21, 0); + long snoozeTimeInPast = unixTime(2015, 1, 1, 7, 0); + long regularReminderTime = applyTimezone(unixTime(2015, 1, 2, 8, 30)); + long todayCheckmarkTime = unixTime(2015, 1, 1, 0, 0); + long tomorrowCheckmarkTime = unixTime(2015, 1, 2, 0, 0); + habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY)); + + when(widgetPreferences.getSnoozeTime(habitId)).thenReturn(snoozeTimeInFuture); + reminderScheduler.schedule(habit); + verify(sys).scheduleShowReminder(snoozeTimeInFuture, habit, todayCheckmarkTime); + + when(widgetPreferences.getSnoozeTime(habitId)).thenReturn(snoozeTimeInPast); + reminderScheduler.schedule(habit); + verify(sys).scheduleShowReminder(regularReminderTime, habit, tomorrowCheckmarkTime); + } + @Test public void testSchedule_laterToday() { long now = unixTime(2015, 1, 26, 6, 30); - DateUtils.setFixedLocalTime(now); + setFixedLocalTime(now); long expectedCheckmarkTime = unixTime(2015, 1, 26, 0, 0); long expectedReminderTime = unixTime(2015, 1, 26, 12, 30); @@ -105,7 +137,7 @@ public class ReminderSchedulerTest extends BaseUnitTest public void testSchedule_tomorrow() { long now = unixTime(2015, 1, 26, 13, 0); - DateUtils.setFixedLocalTime(now); + setFixedLocalTime(now); long expectedCheckmarkTime = unixTime(2015, 1, 27, 0, 0); long expectedReminderTime = unixTime(2015, 1, 27, 12, 30);