package com.blundell.quicksand; import com.blundell.quicksand.viscosity.ViscosityInterpolator; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Mockito.verify; public class DurationCalculatorTest { @Mock ViscosityInterpolator mockViscosity; private DurationCalculator calc; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); calc = new DurationCalculator(); } @Test public void givenActHasDurationZeroWhenDurationCalculatedThenCalculatedDurationIsZero() throws Exception { long currentDuration = 0L; long duration = calc.calculateNewDuration(mockViscosity, 0, currentDuration); assertThat(duration).isEqualTo(0L); } @Test public void givenActViewedForFirstTimeWhenDurationCalculatedThenCalculatedDurationIsCurrentDuration() throws Exception { long currentDuration = 50L; long duration = calc.calculateNewDuration(mockViscosity, 0, currentDuration); assertThat(duration).isEqualTo(currentDuration); } @Test public void givenAnActWhenDurationCalculatedThenCalculatedDurationIsDelegatedToTheViscosity() throws Exception { int timesTransitionViewed = 1; long currentDuration = 50L; calc.calculateNewDuration(mockViscosity, timesTransitionViewed, currentDuration); verify(mockViscosity).calculateDuration(currentDuration, timesTransitionViewed); } }