Get all tasks within the same minute

pull/574/head
Alex Baker 7 years ago
parent b4e2445b0f
commit 3fd2435bac

@ -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<? extends JobQueueEntry> 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());
}});
}
}

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

@ -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<? extends JobQueueEntry> getOverdueJobs() {
List<JobQueueEntry> 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;

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

Loading…
Cancel
Save