package uk.ac.ox.zoo.seeg.abraid.mp.publicsite.web.admin; import org.joda.time.DateTimeUtils; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.springframework.ui.Model; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.HealthMapReportEntry; import uk.ac.ox.zoo.seeg.abraid.mp.common.service.core.DiseaseService; import uk.ac.ox.zoo.seeg.abraid.mp.common.service.core.GeometryService; import uk.ac.ox.zoo.seeg.abraid.mp.common.service.core.ReportingService; import java.util.Arrays; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; import static uk.ac.ox.zoo.seeg.abraid.mp.testutils.GeneralTestUtils.captorForListClass; import static uk.ac.ox.zoo.seeg.abraid.mp.testutils.GeneralTestUtils.captorForMapClass; /** * Tests for ModelRepositoryController. * Copyright (c) 2015 ReportingController of Oxford */ public class ReportingControllerTest { @Test public void getHealthMapDiseaseReport() throws Exception { // Arrange DateTimeUtils.setCurrentMillisFixed(1427992077000L); GeometryService geometryService = mock(GeometryService.class); DiseaseService diseaseService = mock(DiseaseService.class); when(diseaseService.getDiseaseGroupNamesForHealthMapReport()).thenReturn(Arrays.asList("Dengue", "Cholera", "CCHF")); ReportingService reportingService = mock(ReportingService.class); when(reportingService.getHealthMapDiseaseReportEntries()).thenReturn(Arrays.asList( new HealthMapReportEntry("2015-03", "Dengue", 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L), new HealthMapReportEntry("2015-03", "Cholera", 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L), new HealthMapReportEntry("2015-04", "Cholera", 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L), new HealthMapReportEntry("2015-03", "Polio", 0L, 3L, 3L, 0L, 0L, 3L, 3L, 0L), new HealthMapReportEntry("2015-04", "Polio", 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L) )); ReportingController target = new ReportingController(reportingService, geometryService, diseaseService); Model model = mock(Model.class); ArgumentCaptor<List<String>> monthCaptor = captorForListClass(); ArgumentCaptor<List<String>> qualifierCaptor = captorForListClass(); ArgumentCaptor<Map<String, Map<String, HealthMapReportEntry>>> dataCaptor = captorForMapClass(); // Act String template = target.getHealthMapDiseaseReport(model); // Assert assertThat(template).isEqualTo("admin/healthMapReport"); verify(model).addAttribute(eq("data"), dataCaptor.capture()); verify(model).addAttribute(eq("months"), monthCaptor.capture()); verify(model).addAttribute(eq("qualifiers"), qualifierCaptor.capture()); Map<String, Map<String, HealthMapReportEntry>> data = dataCaptor.getValue(); List<String> months = monthCaptor.getValue(); List<String> qualifiers = qualifierCaptor.getValue(); assertThat(months).isEqualTo(Arrays.asList("2015-02", "2015-03", "2015-04", "Total")); assertThat(qualifiers).isEqualTo(Arrays.asList("Dengue", "Cholera", "CCHF", "Total")); assertThat(data.get("2015-02").get("Dengue")) .isEqualTo(new HealthMapReportEntry("2015-02", "Dengue", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-02").get("Cholera")).isEqualTo(new HealthMapReportEntry("2015-02", "Cholera", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-02").get("CCHF")) .isEqualTo(new HealthMapReportEntry("2015-02", "CCHF", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-02").get("Total")) .isEqualTo(new HealthMapReportEntry("2015-02", "Total", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-03").get("Dengue")) .isEqualTo(new HealthMapReportEntry("2015-03", "Dengue", 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L)); assertThat(data.get("2015-03").get("Cholera")).isEqualTo(new HealthMapReportEntry("2015-03", "Cholera", 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L)); assertThat(data.get("2015-03").get("CCHF")) .isEqualTo(new HealthMapReportEntry("2015-03", "CCHF", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-03").get("Total")) .isEqualTo(new HealthMapReportEntry("2015-03", "Total", 9L, 12L, 12L, 9L, 9L, 12L, 12L, 9L)); assertThat(data.get("2015-04").get("Dengue")) .isEqualTo(new HealthMapReportEntry("2015-04", "Dengue", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-04").get("Cholera")).isEqualTo(new HealthMapReportEntry("2015-04", "Cholera", 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L)); assertThat(data.get("2015-04").get("CCHF")) .isEqualTo(new HealthMapReportEntry("2015-04", "CCHF", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-04").get("Total")) .isEqualTo(new HealthMapReportEntry("2015-04", "Total", 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L)); assertThat(data.get("Total") .get("Dengue")) .isEqualTo(new HealthMapReportEntry("Total", "Dengue", 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L)); assertThat(data.get("Total") .get("Cholera")).isEqualTo(new HealthMapReportEntry("Total", "Cholera", 9L, 7L, 7L, 5L, 5L, 4L, 2L, 2L)); assertThat(data.get("Total") .get("CCHF")) .isEqualTo(new HealthMapReportEntry("Total", "CCHF", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("Total") .get("Total")) .isEqualTo(new HealthMapReportEntry("Total", "Total", 11L, 13L, 14L, 10L, 11L, 14L, 13L, 11L)); } @Test public void getHealthMapCountryReport() throws Exception { // Arrange DateTimeUtils.setCurrentMillisFixed(1427992077000L); GeometryService geometryService = mock(GeometryService.class); DiseaseService diseaseService = mock(DiseaseService.class); when(geometryService.getCountryNamesForHealthMapReport()).thenReturn(Arrays.asList("UK", "USA", "JP")); ReportingService reportingService = mock(ReportingService.class); when(reportingService.getHealthMapCountryReportEntries()).thenReturn(Arrays.asList( new HealthMapReportEntry("2015-03", "UK", 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L), new HealthMapReportEntry("2015-03", "USA", 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L), new HealthMapReportEntry("2015-04", "USA", 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L), new HealthMapReportEntry("2015-03", "FR", 0L, 3L, 3L, 0L, 0L, 3L, 3L, 0L), new HealthMapReportEntry("2015-04", "FR", 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L) )); ReportingController target = new ReportingController(reportingService, geometryService, diseaseService); Model model = mock(Model.class); ArgumentCaptor<List<String>> monthCaptor = captorForListClass(); ArgumentCaptor<List<String>> qualifierCaptor = captorForListClass(); ArgumentCaptor<Map<String, Map<String, HealthMapReportEntry>>> dataCaptor = captorForMapClass(); // Act String template = target.getHealthMapCountryReport(model); // Assert assertThat(template).isEqualTo("admin/healthMapReport"); verify(model).addAttribute(eq("data"), dataCaptor.capture()); verify(model).addAttribute(eq("months"), monthCaptor.capture()); verify(model).addAttribute(eq("qualifiers"), qualifierCaptor.capture()); Map<String, Map<String, HealthMapReportEntry>> data = dataCaptor.getValue(); List<String> months = monthCaptor.getValue(); List<String> qualifiers = qualifierCaptor.getValue(); assertThat(months).isEqualTo(Arrays.asList("2015-02", "2015-03", "2015-04", "Total")); assertThat(qualifiers).isEqualTo(Arrays.asList("UK", "USA", "JP", "Other", "Total")); assertThat(data.get("2015-02").get("UK")) .isEqualTo(new HealthMapReportEntry("2015-02", "UK", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-02").get("USA")) .isEqualTo(new HealthMapReportEntry("2015-02", "USA", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-02").get("JP")) .isEqualTo(new HealthMapReportEntry("2015-02", "JP", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-02").get("Other")).isEqualTo(new HealthMapReportEntry("2015-02", "Other", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-02").get("Total")).isEqualTo(new HealthMapReportEntry("2015-02", "Total", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-03").get("UK")) .isEqualTo(new HealthMapReportEntry("2015-03", "UK", 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L)); assertThat(data.get("2015-03").get("USA")) .isEqualTo(new HealthMapReportEntry("2015-03", "USA", 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L)); assertThat(data.get("2015-03").get("JP")) .isEqualTo(new HealthMapReportEntry("2015-03", "JP", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-03").get("Other")).isEqualTo(new HealthMapReportEntry("2015-03", "Other", 0L, 3L, 3L, 0L, 0L, 3L, 3L, 0L)); assertThat(data.get("2015-03").get("Total")).isEqualTo(new HealthMapReportEntry("2015-03", "Total", 9L, 12L, 12L, 9L, 9L, 12L, 12L, 9L)); assertThat(data.get("2015-04").get("UK")) .isEqualTo(new HealthMapReportEntry("2015-04", "UK", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-04").get("USA")) .isEqualTo(new HealthMapReportEntry("2015-04", "USA", 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L)); assertThat(data.get("2015-04").get("JP")) .isEqualTo(new HealthMapReportEntry("2015-04", "JP", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("2015-04").get("Other")).isEqualTo(new HealthMapReportEntry("2015-04", "Other", 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)); assertThat(data.get("2015-04").get("Total")).isEqualTo(new HealthMapReportEntry("2015-04", "Total", 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L)); assertThat(data.get("Total") .get("UK")) .isEqualTo(new HealthMapReportEntry("Total", "UK", 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L)); assertThat(data.get("Total") .get("USA")) .isEqualTo(new HealthMapReportEntry("Total", "USA", 9L, 7L, 7L, 5L, 5L, 4L, 2L, 2L)); assertThat(data.get("Total") .get("JP")) .isEqualTo(new HealthMapReportEntry("Total", "JP", 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)); assertThat(data.get("Total") .get("Other")).isEqualTo(new HealthMapReportEntry("Total", "Other", 1L, 4L, 4L, 1L, 1L, 4L, 4L, 1L)); assertThat(data.get("Total") .get("Total")).isEqualTo(new HealthMapReportEntry("Total", "Total", 11L, 13L, 14L, 10L, 11L, 14L, 13L, 11L)); } }