package com.b2msolutions.reyna.blackout; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import java.text.ParseException; import java.util.Calendar; import java.util.GregorianCalendar; import static junit.framework.Assert.*; @RunWith(RobolectricTestRunner.class) public class BlackoutTimeTest { private BlackoutTime blackoutTime; @Before public void setup() { MockitoAnnotations.initMocks(this); blackoutTime = new BlackoutTime(); } @Test public void whenRangeStoredShouldReturnFalseIfInsideRange() throws ParseException { Calendar now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 6); now.set(Calendar.MINUTE, 30); assertFalse(blackoutTime.canSendAtTime(now, "01:00-09:00")); } @Test public void whenRangeStoredShouldReturnFalseIfInsideRangeForPM() throws ParseException { Calendar now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 13); now.set(Calendar.MINUTE, 30); assertFalse(blackoutTime.canSendAtTime(now, "13:00-14:00")); } @Test public void whenRangeStoredShouldReturnTrueIfOutsideRange() throws ParseException { Calendar now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 9); now.set(Calendar.MINUTE, 45); assertTrue(blackoutTime.canSendAtTime(now, "01:00-09:00")); } @Test public void parseTimeWorksWithAmDates() throws ParseException { TimeRange actual = blackoutTime.parseTime("01:00-09:00"); assertEquals(actual.getFrom().getMinuteOfDay(), new Time(1, 0).getMinuteOfDay()); assertEquals(actual.getTo().getMinuteOfDay(), new Time(9, 0).getMinuteOfDay()); } @Test public void parseTimeWorksWithAmDatesAndMinutes() throws ParseException { TimeRange actual = blackoutTime.parseTime("01:30-09:15"); assertEquals(actual.getFrom().getMinuteOfDay(), new Time(1, 30).getMinuteOfDay()); assertEquals(actual.getTo().getMinuteOfDay(), new Time(9, 15).getMinuteOfDay()); } @Test public void parseTimeWorksWithPmDatesAndMinutes() throws ParseException { TimeRange actual = blackoutTime.parseTime("13:30-21:15"); assertEquals(actual.getFrom().getMinuteOfDay(), new Time(13, 30).getMinuteOfDay()); assertEquals(actual.getTo().getMinuteOfDay(), new Time(21, 15).getMinuteOfDay()); } @Test public void parseTimeWorksWithPmDates() throws ParseException { TimeRange actual = blackoutTime.parseTime("13:00-21:00"); assertEquals(actual.getFrom().getMinuteOfDay(), new Time(13, 0).getMinuteOfDay()); assertEquals(actual.getTo().getMinuteOfDay(), new Time(21, 0).getMinuteOfDay()); } @Test public void whenTimeRangeHasSameTimesShouldReturnTrue() throws ParseException { Calendar now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 1); now.set(Calendar.MINUTE, 0); assertTrue(blackoutTime.canSendAtTime(now, "01:00-01:00")); } @Test public void parseTimeParsesWhenMalformedRangeTimeWithSpaces() { try { TimeRange actual = blackoutTime.parseTime("13:00 - 21:00"); assertEquals(actual.getFrom().getMinuteOfDay(), new Time(13, 0).getMinuteOfDay()); assertEquals(actual.getTo().getMinuteOfDay(), new Time(21, 0).getMinuteOfDay()); } catch (ParseException e) { assertNull(e); } } @Test public void whenRangeFromIsGreaterThanToShouldReturnFalse() throws ParseException { Calendar now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 18); now.set(Calendar.MINUTE, 10); assertFalse(blackoutTime.canSendAtTime(now, "17:30-09:00")); } @Test public void whenRangeFromIsGreaterThanToAndWeAreOutsideRangeShouldReturnTrue() throws ParseException { Calendar now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 10); now.set(Calendar.MINUTE, 10); assertTrue(blackoutTime.canSendAtTime(now, "17:30-09:00")); } @Test public void whenRangeStoredShouldReturnFalseIfInsideMultipleRanges() throws ParseException { Calendar now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 18); now.set(Calendar.MINUTE, 10); assertFalse(blackoutTime.canSendAtTime(now, "02:00-03:00,05:00-07:30,18:00-18:15")); } @Test public void whenRangeStoredHasMinutesAndCurrentMinutesIsPastMinutesOfRangeShouldReturnTrue() throws ParseException { Calendar now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 18); now.set(Calendar.MINUTE, 16); assertTrue(blackoutTime.canSendAtTime(now, "02:00-03:00,05:00-07:30,18:00-18:15")); } @Test public void canSendOnShouldAlwaysReturnFalseWhenInTotalBlackout() throws ParseException { Calendar now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 0); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); assertFalse(blackoutTime.canSendAtTime(now, "00:00-23:59")); now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 23); now.set(Calendar.MINUTE, 59); now.set(Calendar.SECOND, 30); assertFalse(blackoutTime.canSendAtTime(now, "00:00-23:59")); now = new GregorianCalendar(); now.set(Calendar.HOUR_OF_DAY, 10); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); assertFalse(blackoutTime.canSendAtTime(now, "00:00-23:59")); } @Test public void canSendOnShouldAlwaysReturnTrueWhenNoConfigurationPresent() throws ParseException { Calendar now = new GregorianCalendar(); assertTrue(blackoutTime.canSendAtTime(now, "")); } }