@Test
public void testForwardRange() {
long now = 1494368640000L;
SimpleJob job = new SimpleJob(SCHEDULE, now, Collections.<Notification>emptyList(), Job.State.PENDING_TRIGGER, 0L);
TimeRangeConstraint timeRangeConstraint = new TimeRangeConstraint("16:00", "17:00", TimeZone.getTimeZone("PST"));
ConstraintContext constraintContext = createConstraintContext(job, now);
ConstraintResult result = timeRangeConstraint.check(SCHEDULE, constraintContext);
Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState());
Assert.assertEquals(constraintContext.getCheckTimeMillis() + TimeUnit.MINUTES.toMillis(36),
(long) result.getNextCheckTime());
constraintContext = createConstraintContext(job, result.getNextCheckTime() - 1);
result = timeRangeConstraint.check(SCHEDULE, constraintContext);
Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState());
Assert.assertEquals(constraintContext.getCheckTimeMillis() + 1L, (long) result.getNextCheckTime());
result = timeRangeConstraint.check(SCHEDULE, createConstraintContext(job, now + TimeUnit.MINUTES.toMillis(36)));
Assert.assertEquals(ConstraintResult.SATISFIED, result);
long fivePM = 1494374400000L;
constraintContext = createConstraintContext(job, fivePM);
result = timeRangeConstraint.check(SCHEDULE, constraintContext);
Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState());
Assert.assertEquals(constraintContext.getCheckTimeMillis() + TimeUnit.HOURS.toMillis(23),
(long) result.getNextCheckTime());
}