package es.jonatantierno.scrumdailytimer; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(manifest = "../ScrumDailyTimer/AndroidManifest.xml") public class ScrumTimerTest { ChronoInterface mockActivity; ScrumTimer out; @Before public void setUp() throws Exception { // Fixture mockActivity = mock(ChronoInterface.class); out = new ScrumTimer(); out.configure(mockActivity); out.setTimeSlotLength(60); } /** * update timer. */ @Test public void whenTickShouldUpdateActivityTimer() { out._startTimer(); verify(mockActivity).setDailyTimer("00:00"); out.tick(); verify(mockActivity).setDailyTimer("00:01"); out.tick(); verify(mockActivity).setDailyTimer("00:02"); // Countdown is not affected verify(mockActivity, times(0)).setCountDown(Mockito.anyString()); } /** * Update countdown */ @Test public void shouldUpdateCountDown() { out._startTimer(); out.resetCountDown(); out.tick(); verify(mockActivity).setCountDown("00:59"); out.tick(); verify(mockActivity).setCountDown("00:58"); } @Test public void shouldStopCountDown() { out._startTimer(); out.resetCountDown(); out.tick(); out.stopCountDown(); out.tick(); out.tick(); out.tick(); verify(mockActivity, times(1)).setCountDown(Mockito.anyString()); } @Test public void whenCountDownEndsThenCallTimeout() { out._startTimer(); out.resetCountDown(); out.setCountDownSeconds(0); out.tick(); // only once... out.tick(); verify(mockActivity).timeOut(); } @Test public void shouldReturnCurrentTime() { out._startTimer(); out.tick(); out.tick(); assertEquals("00:02", out.getPrettyTime()); } @Test public void shouldReturnCurrentCountDown() { out._startTimer(); out.resetCountDown(); out.tick(); out.tick(); assertEquals("00:58", out.getPrettyCountDown()); } @Test public void shouldPauseCountDown() { out._startTimer(); out.resetCountDown(); out.tick(); out.tick(); out.pauseCountDown(); out.tick(); out.tick(); assertEquals("00:04", out.getPrettyTime()); assertEquals("00:58", out.getPrettyCountDown()); } @Test public void shouldResumeCountDown() { out._startTimer(); out.resetCountDown(); out.tick(); out.tick(); out.pauseCountDown(); out.tick(); out.tick(); out.resumeCountDown(); out.tick(); out.tick(); assertEquals("00:06", out.getPrettyTime()); assertEquals("00:56", out.getPrettyCountDown()); } @Test public void timeSlotDurationShouldBeConfigurable() { out.setTimeSlotLength(30); out._startTimer(); out.resetCountDown(); assertEquals(30, out.getCountDownSeconds()); } @Test public void timerShouldKnowWhenItIsStopped() { assertTrue(out.isStopped()); out._startTimer(); assertFalse(out.isStopped()); out.stopTimer(); assertTrue(out.isStopped()); } }