package de.asideas.crowdsource.service; import de.asideas.crowdsource.presentation.statistics.requests.TimeRangedStatisticsRequest; import de.asideas.crowdsource.presentation.statistics.results.LineChartStatisticsResult; import de.asideas.crowdsource.service.statistics.CommentCountPerProjectAction; import de.asideas.crowdsource.service.statistics.CreatedProjectSumAction; import de.asideas.crowdsource.service.statistics.ProjectPerStatusSumAction; import de.asideas.crowdsource.service.statistics.RegisteredUserSumAction; import org.joda.time.DateTime; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.scheduling.annotation.AsyncResult; import java.util.Collections; import java.util.concurrent.Future; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class StatisticsServiceTest { @InjectMocks private StatisticsService instance; @Mock private CreatedProjectSumAction createdProjectSumAction; @Mock private RegisteredUserSumAction registeredUserSumAction; @Mock private ProjectPerStatusSumAction projectPerStatusSumAction; @Mock private CommentCountPerProjectAction commentCountPerProjectAction; @Test public void getCurrentStatistics_should_callBothActionsToRetrieveData() throws Exception { final DateTime startDate = new DateTime(); final DateTime endDate = new DateTime(); TimeRangedStatisticsRequest timeRangedStatisticsRequest = new TimeRangedStatisticsRequest(startDate, endDate); Future<LineChartStatisticsResult> asyncResult = new AsyncResult<>(new LineChartStatisticsResult("name", Collections.emptyMap())); when(createdProjectSumAction.getCreatedProjectSumByTimeRange(eq(timeRangedStatisticsRequest))).thenReturn(asyncResult); when(registeredUserSumAction.getCountOfRegisteredUsersByTimeRange(eq(timeRangedStatisticsRequest))).thenReturn(asyncResult); instance.getCurrentStatistics(timeRangedStatisticsRequest); verify(createdProjectSumAction).getCreatedProjectSumByTimeRange(timeRangedStatisticsRequest); verify(registeredUserSumAction).getCountOfRegisteredUsersByTimeRange(timeRangedStatisticsRequest); } @Test public void getProjectsPerStatus_should_delegateToProperActionToRetrieveData() throws Exception { instance.getProjectsPerStatus(); verify(projectPerStatusSumAction).getProjectsPerStatus(); } @Test public void getCommentsCountPerProject_should_call_action() throws Exception { instance.getCommentsCountPerProject(5); verify(commentCountPerProjectAction).getCommentCountPerProjectStatistic(5); } }