From af99bc45d2203cf3fb73cb3788b2e380f599949c Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 24 Sep 2017 20:25:01 -0500 Subject: [PATCH] Ignore stale alarms --- app/build.gradle | 4 +- .../astrid/alarms/AlarmServiceTest.java | 94 +++++++++++++++++++ .../org/tasks/injection/TestComponent.java | 3 + .../todoroo/astrid/alarms/AlarmService.java | 2 + 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmServiceTest.java diff --git a/app/build.gradle b/app/build.gradle index 726e84c75..cf08a6cb5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,8 +32,8 @@ android { defaultConfig { applicationId "org.tasks" - versionCode 469 - versionName "5.0.0" + versionCode 470 + versionName "5.0.1" targetSdkVersion 26 minSdkVersion 15 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmServiceTest.java b/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmServiceTest.java new file mode 100644 index 000000000..0b3b51f4c --- /dev/null +++ b/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmServiceTest.java @@ -0,0 +1,94 @@ +package com.todoroo.astrid.alarms; + +import android.support.test.runner.AndroidJUnit4; + +import com.todoroo.astrid.dao.MetadataDao; +import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.test.DatabaseTestCase; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.tasks.injection.TestComponent; +import org.tasks.jobs.Alarm; +import org.tasks.jobs.JobQueue; +import org.tasks.time.DateTime; + +import javax.inject.Inject; + +import static com.natpryce.makeiteasy.MakeItEasy.with; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.tasks.makers.TaskMaker.REMINDER_LAST; +import static org.tasks.makers.TaskMaker.newTask; + +@RunWith(AndroidJUnit4.class) +public class AlarmServiceTest extends DatabaseTestCase { + + @Inject MetadataDao metadataDao; + @Inject TaskDao taskDao; + + private AlarmService alarmService; + private JobQueue jobs; + + @Before + public void before() { + jobs = mock(JobQueue.class); + alarmService = new AlarmService(metadataDao, jobs); + } + + @After + public void after() { + verifyNoMoreInteractions(jobs); + } + + @Test + public void scheduleAlarm() { + Task task = newTask(); + + taskDao.persist(task); + DateTime alarmTime = new DateTime(2017, 9, 24, 19, 57); + + Metadata alarm = new Metadata(); + alarm.setTask(task.getId()); + alarm.setKey(AlarmFields.METADATA_KEY); + alarm.setValue(AlarmFields.TYPE, AlarmFields.TYPE_SINGLE); + alarm.setValue(AlarmFields.TIME, alarmTime.getMillis()); + metadataDao.persist(alarm); + + alarmService.scheduleAllAlarms(); + + InOrder order = inOrder(jobs); + order.verify(jobs).add(new Alarm(alarm)); + } + + @Test + public void ignoreStaleAlarm() { + DateTime alarmTime = new DateTime(2017, 9, 24, 19, 57); + + Task task = newTask(with(REMINDER_LAST, alarmTime.endOfMinute())); + + taskDao.persist(task); + + Metadata alarm = new Metadata(); + alarm.setTask(task.getId()); + alarm.setKey(AlarmFields.METADATA_KEY); + alarm.setValue(AlarmFields.TYPE, AlarmFields.TYPE_SINGLE); + alarm.setValue(AlarmFields.TIME, alarmTime.getMillis()); + metadataDao.persist(alarm); + + alarmService.scheduleAllAlarms(); + + verifyNoMoreInteractions(jobs); + } + + @Override + protected void inject(TestComponent component) { + component.inject(this); + } +} diff --git a/app/src/androidTestGoogleplay/java/org/tasks/injection/TestComponent.java b/app/src/androidTestGoogleplay/java/org/tasks/injection/TestComponent.java index 571be3cd7..6da4ca7a2 100644 --- a/app/src/androidTestGoogleplay/java/org/tasks/injection/TestComponent.java +++ b/app/src/androidTestGoogleplay/java/org/tasks/injection/TestComponent.java @@ -1,5 +1,6 @@ package org.tasks.injection; +import com.todoroo.astrid.alarms.AlarmServiceTest; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.MetadataDaoTests; import com.todoroo.astrid.dao.TaskDaoTests; @@ -64,4 +65,6 @@ public interface TestComponent { void inject(BackupServiceTests backupServiceTests); NotificationTests.NotificationTestsComponent plus(NotificationTests.NotificationTestsModule notificationTestsModule); + + void inject(AlarmServiceTest alarmServiceTest); } diff --git a/app/src/main/java/com/todoroo/astrid/alarms/AlarmService.java b/app/src/main/java/com/todoroo/astrid/alarms/AlarmService.java index 54d730372..eb819ca66 100644 --- a/app/src/main/java/com/todoroo/astrid/alarms/AlarmService.java +++ b/app/src/main/java/com/todoroo/astrid/alarms/AlarmService.java @@ -88,6 +88,7 @@ public class AlarmService { metadataDao.query(callback, Query.select(Metadata.PROPERTIES). join(Join.inner(Task.TABLE, Metadata.TASK.eq(Task.ID))). where(Criterion.and(TaskCriteria.isActive(), + Task.REMINDER_LAST.lt(AlarmFields.TIME), MetadataCriteria.withKey(AlarmFields.METADATA_KEY)))); } @@ -95,6 +96,7 @@ public class AlarmService { metadataDao.query(callback, Query.select(Metadata.PROPERTIES). join(Join.inner(Task.TABLE, Metadata.TASK.eq(Task.ID))). where(Criterion.and(TaskCriteria.isActive(), + Task.REMINDER_LAST.lt(AlarmFields.TIME), MetadataCriteria.byTaskAndwithKey(taskId, AlarmFields.METADATA_KEY)))); }