Ignore stale alarms

pull/574/head 5.0.1
Alex Baker 7 years ago
parent 351e95286f
commit af99bc45d2

@ -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"

@ -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);
}
}

@ -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);
}

@ -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))));
}

Loading…
Cancel
Save