package com.intrbiz.bergamot.scheduler.timeperiod; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*; import java.time.Clock; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import org.junit.Before; import org.junit.Test; import com.intrbiz.bergamot.model.timeperiod.HourRange; import com.intrbiz.bergamot.timerange.TimeRangeParser; public class TestComputeNext { private Clock now; @Before public void setup() { // 2014-06-24T21:03:32 this.now = Clock.fixed(Instant.ofEpochMilli(1403643812944L), ZoneId.of("UTC")); } @Test public void testHourRange() { assertThat((new HourRange(19, 20)).computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 25, 19, 0)))); assertThat((new HourRange(10, 11)).computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 25, 10, 0)))); assertThat((new HourRange(23, 24)).computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 24, 23, 0)))); assertThat(TimeRangeParser.parseTimeRange("00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 25, 0, 0)))); } @Test public void testParseDayOfWeekRange() { assertThat(TimeRangeParser.parseTimeRange("monday 09:00-10:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 30, 9, 0)))); assertThat(TimeRangeParser.parseTimeRange("tuesday 10:00-11:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 7, 1, 10, 0)))); assertThat(TimeRangeParser.parseTimeRange("tuesday 23:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 24, 23, 0)))); assertThat(TimeRangeParser.parseTimeRange("wednesday 11:00-12:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 25, 11, 0)))); assertThat(TimeRangeParser.parseTimeRange("thursday 12:00-13:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 26, 12, 0)))); assertThat(TimeRangeParser.parseTimeRange("friday 14:00-15:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 27, 14, 0)))); assertThat(TimeRangeParser.parseTimeRange("saturday 18:00-20:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 28, 18, 0)))); assertThat(TimeRangeParser.parseTimeRange("sunday 21:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 29, 21, 0)))); } @Test public void testParseDayOfMonthRange() { assertThat(TimeRangeParser.parseTimeRange("day 2 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 7, 2, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("day -2 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 6, 29, 0, 0)))); } @Test public void testParseDayOfMonthRangeWithMonth() { assertThat(TimeRangeParser.parseTimeRange("january 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2015, 1, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("february -1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2015, 2, 28, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("march 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2015, 3, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("april 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2015, 4, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("may 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2015, 5, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("june 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2015, 6, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("july 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 7, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("august 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 8, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("september 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 9, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("october 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 10, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("november 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 11, 1, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("december 1 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 12, 1, 0, 0)))); } @Test public void testParseDateRange() { assertThat(TimeRangeParser.parseTimeRange("2014-04-20 00:00-24:00").computeNextStartTime(now), is(nullValue())); assertThat(TimeRangeParser.parseTimeRange("2014-04-1 00:00-24:00").computeNextStartTime(now), is(nullValue())); assertThat(TimeRangeParser.parseTimeRange("2014-7-9 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 7, 9, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("2014-7-10 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 7, 10, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("2014-10-10 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 10, 10, 0, 0)))); } @Test public void testParseDayOfWeekInMonthRange() { assertThat(TimeRangeParser.parseTimeRange("monday 1 may 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2015, 5, 4, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("monday -1 may 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2015, 5, 25, 0, 0)))); assertThat(TimeRangeParser.parseTimeRange("friday 2 december 00:00-24:00").computeNextStartTime(now), is(equalTo(LocalDateTime.of(2014, 12, 12, 0, 0)))); } }