package uk.ac.ox.zoo.seeg.abraid.mp.common.service.core;
import com.vividsolutions.jts.geom.Point;
import org.junit.Before;
import org.junit.Test;
import uk.ac.ox.zoo.seeg.abraid.mp.common.dao.*;
import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.*;
import uk.ac.ox.zoo.seeg.abraid.mp.common.util.GeometryUtils;
import java.util.*;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* Tests for GeometryService.
* Copyright (c) 2015 University of Oxford
*/
public class GeometryServiceTest {
private GeometryService geometryService;
private CountryDao countryDao;
private HealthMapCountryDao healthMapCountryDao;
private AdminUnitQCDao adminUnitQCDao;
private NativeSQL nativeSQL;
private LandSeaBorderDao landSeaBorderDao;
private AdminUnitGlobalDao adminUnitGlobalDao;
private AdminUnitTropicalDao adminUnitTropicalDao;
@Before
public void setUp() {
countryDao = mock(CountryDao.class);
healthMapCountryDao = mock(HealthMapCountryDao.class);
adminUnitQCDao = mock(AdminUnitQCDao.class);
nativeSQL = mock(NativeSQL.class);
landSeaBorderDao = mock(LandSeaBorderDao.class);
landSeaBorderDao = mock(LandSeaBorderDao.class);
adminUnitGlobalDao = mock(AdminUnitGlobalDao.class);
adminUnitTropicalDao = mock(AdminUnitTropicalDao.class);
geometryService = new GeometryServiceImpl(countryDao, healthMapCountryDao, adminUnitQCDao, nativeSQL,
landSeaBorderDao, adminUnitGlobalDao, adminUnitTropicalDao);
}
@Test
public void getAllCountries() {
// Arrange
List<Country> countries = Arrays.asList(new Country());
when(countryDao.getAll()).thenReturn(countries);
// Act
List<Country> testCountries = geometryService.getAllCountries();
// Assert
assertThat(testCountries).isSameAs(countries);
}
@Test
public void getAllHealthMapCountries() {
// Arrange
List<HealthMapCountry> countries = Arrays.asList(new HealthMapCountry());
when(healthMapCountryDao.getAll()).thenReturn(countries);
// Act
List<HealthMapCountry> testCountries = geometryService.getAllHealthMapCountries();
// Assert
assertThat(testCountries).isSameAs(countries);
}
@Test
public void getCountryNamesForHealthMapReport() {
// Arrange
List<String> expected = Arrays.asList("A", "B", "C");
when(countryDao.getCountryNamesForHealthMapReport()).thenReturn(expected);
// Act
List<String> actual = geometryService.getCountryNamesForHealthMapReport();
// Assert
assertThat(actual).isSameAs(expected);
}
@Test
public void getAllAdminUnits() {
// Arrange
List<AdminUnitQC> adminUnits = Arrays.asList(new AdminUnitQC());
when(adminUnitQCDao.getAll()).thenReturn(adminUnits);
// Act
List<AdminUnitQC> testAdminUnits = geometryService.getAllAdminUnitQCs();
// Assert
assertThat(testAdminUnits).isSameAs(adminUnits);
}
@Test
public void getAllAdminUnitGlobalsOrTropicalsForDiseaseGroupReturnsGlobalsForGlobalDisease() {
// Arrange
DiseaseGroup diseaseGroup = new DiseaseGroup();
diseaseGroup.setGlobal(true);
List<AdminUnitGlobal> expectedAdminUnits = new ArrayList<>();
when(adminUnitGlobalDao.getAll()).thenReturn(expectedAdminUnits);
// Act
List actualAdminUnits =
geometryService.getAllAdminUnitGlobalsOrTropicalsForDiseaseGroup(diseaseGroup);
// Assert
//noinspection unchecked
assertThat(actualAdminUnits).isSameAs(expectedAdminUnits);
}
@Test
public void getAllAdminUnitGlobalsOrTropicalsForDiseaseGroupReturnsTropicalsForTropicalDisease() {
// Arrange
DiseaseGroup diseaseGroup = new DiseaseGroup();
diseaseGroup.setGlobal(false);
List<AdminUnitTropical> expectedAdminUnits = new ArrayList<>();
when(adminUnitTropicalDao.getAll()).thenReturn(expectedAdminUnits);
// Act
List actualAdminUnits =
geometryService.getAllAdminUnitGlobalsOrTropicalsForDiseaseGroup(diseaseGroup);
// Assert
//noinspection unchecked
assertThat(actualAdminUnits).isSameAs(expectedAdminUnits);
}
@Test
public void getAdminUnitGlobalOrTropicalByGaulCodeReturnsCorrectAdminUnitForTropicalDisease() {
// Arrange
int gaulCode = 123;
DiseaseGroup diseaseGroup = mock(DiseaseGroup.class);
when(diseaseGroup.isGlobal()).thenReturn(false);
AdminUnitTropical expectedAdminUnit = mock(AdminUnitTropical.class);
when(adminUnitTropicalDao.getByGaulCode(gaulCode)).thenReturn(expectedAdminUnit);
// Act
AdminUnitGlobalOrTropical actualAdminUnit =
geometryService.getAdminUnitGlobalOrTropicalByGaulCode(diseaseGroup, gaulCode);
// Assert
assertThat(actualAdminUnit).isSameAs(expectedAdminUnit);
}
@Test
public void getAdminUnitGlobalOrTropicalByGaulCodeReturnsCorrectAdminUnitForGlobalDisease() {
// Arrange
int gaulCode = 123;
DiseaseGroup diseaseGroup = mock(DiseaseGroup.class);
when(diseaseGroup.isGlobal()).thenReturn(true);
AdminUnitGlobal expectedAdminUnit = mock(AdminUnitGlobal.class);
when(adminUnitGlobalDao.getByGaulCode(gaulCode)).thenReturn(expectedAdminUnit);
// Act
AdminUnitGlobalOrTropical actualAdminUnit =
geometryService.getAdminUnitGlobalOrTropicalByGaulCode(diseaseGroup, gaulCode);
// Assert
assertThat(actualAdminUnit).isSameAs(expectedAdminUnit);
}
@Test
public void getAdminUnitGlobalOrTropicalByGaulCodeReturnsCorrectAdminUnitForNullDisease() {
// Arrange
int gaulCode = 123;
when(adminUnitGlobalDao.getByGaulCode(gaulCode)).thenReturn(mock(AdminUnitGlobal.class));
when(adminUnitTropicalDao.getByGaulCode(gaulCode)).thenReturn(mock(AdminUnitTropical.class));
// Act
AdminUnitGlobalOrTropical actualAdminUnit =
geometryService.getAdminUnitGlobalOrTropicalByGaulCode(null, gaulCode);
// Assert
assertThat(actualAdminUnit).isNull();
}
@Test
public void getAllLandSeaBorders() {
// Arrange
List<LandSeaBorder> landSeaBorders = Arrays.asList(new LandSeaBorder());
when(landSeaBorderDao.getAll()).thenReturn(landSeaBorders);
// Act
List<LandSeaBorder> testLandSeaBorders = geometryService.getAllLandSeaBorders();
// Assert
assertThat(testLandSeaBorders).isSameAs(landSeaBorders);
}
@Test
public void findAdminUnitGlobalThatContainsPoint() {
// Arrange
Point point = GeometryUtils.createPoint(1, 2);
Integer expectedGaulCode = 123;
when(nativeSQL.findAdminUnitThatContainsPoint(point, true)).thenReturn(expectedGaulCode);
// Act
Integer actualGaulCode = geometryService.findAdminUnitGlobalThatContainsPoint(point);
// Assert
assertThat(actualGaulCode).isEqualTo(expectedGaulCode);
}
@Test
public void findAdminUnitTropicalThatContainsPoint() {
// Arrange
Point point = GeometryUtils.createPoint(1, 2);
Integer expectedGaulCode = 123;
when(nativeSQL.findAdminUnitThatContainsPoint(point, false)).thenReturn(expectedGaulCode);
// Act
Integer actualGaulCode = geometryService.findAdminUnitTropicalThatContainsPoint(point);
// Assert
assertThat(actualGaulCode).isEqualTo(expectedGaulCode);
}
@Test
public void findCountryThatContainsPoint() {
// Arrange
Point point = GeometryUtils.createPoint(1, 2);
Integer expectedGaulCode = 123;
Country expectedCountry = mock(Country.class);
when(nativeSQL.findCountryThatContainsPoint(point)).thenReturn(expectedGaulCode);
when(countryDao.getByGaulCode(expectedGaulCode)).thenReturn(expectedCountry);
// Act
Country actualCountry = geometryService.findCountryThatContainsPoint(point);
// Assert
assertThat(actualCountry).isSameAs(expectedCountry);
}
@Test
public void doesLandSeaBorderContainPoint() {
// Arrange
Point point = GeometryUtils.createPoint(1, 2);
when(nativeSQL.doesLandSeaBorderContainPoint(point)).thenReturn(true);
// Act
boolean result = geometryService.doesLandSeaBorderContainPoint(point);
// Assert
assertThat(result).isTrue();
}
}