diff --git a/app/src/main/java/com/todoroo/astrid/repeats/RepeatTaskHelper.kt b/app/src/main/java/com/todoroo/astrid/repeats/RepeatTaskHelper.kt index 385bccd52..86ac58331 100644 --- a/app/src/main/java/com/todoroo/astrid/repeats/RepeatTaskHelper.kt +++ b/app/src/main/java/com/todoroo/astrid/repeats/RepeatTaskHelper.kt @@ -63,14 +63,12 @@ class RepeatTaskHelper @Inject constructor( task.setDueDateAdjustingHideUntil(newDueDate) gcalHelper.rescheduleRepeatingTask(task) taskDao.save(task) - alarmService.rescheduleAlarms( - task.id, + val previousDueDate = oldDueDate .takeIf { it > 0 } - // try to guess original due date when no due date was set - ?: newDueDate - (computeNextDueDate(task, recurrence, repeatAfterCompletion) - newDueDate), - newDueDate) - localBroadcastManager.broadcastRepeat(task.id, oldDueDate, newDueDate) + ?: newDueDate - (computeNextDueDate(task, recurrence, repeatAfterCompletion) - newDueDate) + alarmService.rescheduleAlarms(task.id, previousDueDate, newDueDate) + localBroadcastManager.broadcastRepeat(task.id, previousDueDate, newDueDate) } } diff --git a/app/src/test/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt b/app/src/test/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt index 88cb800ad..ff5931ae4 100644 --- a/app/src/test/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt +++ b/app/src/test/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt @@ -15,6 +15,7 @@ import org.junit.Before import org.junit.Test import org.mockito.InOrder import org.mockito.Mockito +import org.tasks.Freeze.Companion.freezeClock import org.tasks.LocalBroadcastManager import org.tasks.makers.TaskMaker.AFTER_COMPLETE import org.tasks.makers.TaskMaker.COMPLETION_TIME @@ -180,10 +181,34 @@ class RepeatTaskHelperTest { task, DateTime(2017, 1, 31, 13, 30, 1), DateTime(2017, 2, 28, 13, 30, 1)) } - private fun repeatAndVerify(task: Task, oldDueDate: DateTime, newDueDate: DateTime) = runBlockingTest { + @Test + fun testAlarmShiftWithNoDueDate() { + val task = newTask( + with(ID, 1L), + with(RRULE, RRule("RRULE:FREQ=DAILY")) + ) + freezeClock { + repeatAndVerify( + task, + Task.createDueDate( + Task.URGENCY_SPECIFIC_DAY, + DateTime().millis + ), + Task.createDueDate( + Task.URGENCY_SPECIFIC_DAY, + DateTime().plusDays(1).millis + ) + ) + } + } + + private fun repeatAndVerify(task: Task, oldDueDate: DateTime, newDueDate: DateTime) = + repeatAndVerify(task, oldDueDate.millis, newDueDate.millis) + + private fun repeatAndVerify(task: Task, oldDueDate: Long, newDueDate: Long) = runBlockingTest { helper.handleRepeat(task) mocks.verify(gCalHelper).rescheduleRepeatingTask(task) - mocks.verify(alarmService).rescheduleAlarms(1, oldDueDate.millis, newDueDate.millis) - mocks.verify(localBroadcastManager).broadcastRepeat(1, oldDueDate.millis, newDueDate.millis) + mocks.verify(alarmService).rescheduleAlarms(1, oldDueDate, newDueDate) + mocks.verify(localBroadcastManager).broadcastRepeat(1, oldDueDate, newDueDate) } } \ No newline at end of file