From 3fd2435bac4614d1bce8d7e61ef4e3b5d20f7a7c Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 3 Sep 2017 00:44:41 -0500 Subject: [PATCH] Get all tasks within the same minute --- .../java/org/tasks/jobs/JobQueueTest.java | 27 +++++++++++++++++++ .../java/org/tasks/time/DateTimeTest.java | 7 +++++ .../main/java/org/tasks/jobs/JobQueue.java | 6 ++--- .../main/java/org/tasks/time/DateTime.java | 7 +++++ 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/app/src/androidTest/java/org/tasks/jobs/JobQueueTest.java b/app/src/androidTest/java/org/tasks/jobs/JobQueueTest.java index e16859b76..d8367321c 100644 --- a/app/src/androidTest/java/org/tasks/jobs/JobQueueTest.java +++ b/app/src/androidTest/java/org/tasks/jobs/JobQueueTest.java @@ -10,10 +10,13 @@ import org.mockito.InOrder; import org.tasks.Freeze; import org.tasks.Snippet; import org.tasks.preferences.Preferences; +import org.tasks.time.DateTime; +import java.util.List; import java.util.concurrent.TimeUnit; import static com.todoroo.astrid.reminders.ReminderService.TYPE_DUE; +import static com.todoroo.astrid.reminders.ReminderService.TYPE_SNOOZE; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static junit.framework.Assert.assertEquals; @@ -290,4 +293,28 @@ public class JobQueueTest { verify(jobManager).schedule(TAG, now); } + + @Test + public void allDuringSameMinuteAreOverdue() { + DateTime now = new DateTime(2017, 9, 3, 0, 14, 6, 455); + DateTime due = new DateTime(2017, 9, 3, 0, 14, 0, 0); + DateTime snooze = new DateTime(2017, 9, 3, 0, 14, 59, 999); + + queue.add(new Reminder(1, due.getMillis(), TYPE_DUE)); + queue.add(new Reminder(2, snooze.getMillis(), TYPE_SNOOZE)); + queue.add(new Reminder(3, due.plusMinutes(1).getMillis(), TYPE_DUE)); + + verify(jobManager).schedule(TAG, due.getMillis()); + + Freeze.freezeAt(now).thawAfter(new Snippet() {{ + List overdueJobs = queue.getOverdueJobs(); + assertEquals( + asList(new Reminder(1, due.getMillis(), TYPE_DUE), new Reminder(2, snooze.getMillis(), TYPE_SNOOZE)), + overdueJobs); + queue.remove(overdueJobs); + assertEquals( + singletonList(new Reminder(3, due.plusMinutes(1).getMillis(), TYPE_DUE)), + queue.getJobs()); + }}); + } } diff --git a/app/src/androidTest/java/org/tasks/time/DateTimeTest.java b/app/src/androidTest/java/org/tasks/time/DateTimeTest.java index 1c1844429..df2c5f2fc 100644 --- a/app/src/androidTest/java/org/tasks/time/DateTimeTest.java +++ b/app/src/androidTest/java/org/tasks/time/DateTimeTest.java @@ -320,4 +320,11 @@ public class DateTimeTest { TimeZone.setDefault(def); } } + + @Test + public void testStartOfMinute() { + assertEquals( + new DateTime(2017, 9, 3, 0, 51, 0, 0), + new DateTime(2017, 9, 3, 0, 51, 13, 427).startOfMinute()); + } } diff --git a/app/src/main/java/org/tasks/jobs/JobQueue.java b/app/src/main/java/org/tasks/jobs/JobQueue.java index 7f6db5f09..3ddcf21d9 100644 --- a/app/src/main/java/org/tasks/jobs/JobQueue.java +++ b/app/src/main/java/org/tasks/jobs/JobQueue.java @@ -4,10 +4,10 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Ordering; import com.google.common.collect.TreeMultimap; import com.google.common.primitives.Ints; -import com.google.common.primitives.Longs; import org.tasks.injection.ApplicationScope; import org.tasks.preferences.Preferences; +import org.tasks.time.DateTime; import java.util.List; @@ -15,7 +15,6 @@ import javax.inject.Inject; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Lists.newArrayList; -import static org.tasks.time.DateTimeUtils.currentTimeMillis; @ApplicationScope public class JobQueue { @@ -66,7 +65,8 @@ public class JobQueue { synchronized List getOverdueJobs() { List result = newArrayList(); - for (Long key : jobs.keySet().headSet(currentTimeMillis() + 1)) { + long cutoff = new DateTime().startOfMinute().plusMinutes(1).getMillis(); + for (Long key : jobs.keySet().headSet(cutoff)) { result.addAll(jobs.get(key)); } return result; diff --git a/app/src/main/java/org/tasks/time/DateTime.java b/app/src/main/java/org/tasks/time/DateTime.java index 74e5c0829..cc456037a 100644 --- a/app/src/main/java/org/tasks/time/DateTime.java +++ b/app/src/main/java/org/tasks/time/DateTime.java @@ -78,6 +78,13 @@ public class DateTime { return new DateTime(calendar); } + public DateTime startOfMinute() { + Calendar calendar = getCalendar(); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return new DateTime(calendar); + } + public DateTime withMillisOfDay(int millisOfDay) { if (millisOfDay > MAX_MILLIS_PER_DAY || millisOfDay < 0) { throw new RuntimeException("Illegal millis of day: " + millisOfDay);