package uk.ac.ox.zoo.seeg.abraid.mp.dataacquisition.acquirers.healthmap;
import org.joda.time.DateTime;
import org.junit.Test;
import uk.ac.ox.zoo.seeg.abraid.mp.dataacquisition.acquirers.healthmap.domain.HealthMapAlert;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests the HealthMapAlertValidator class.
* Copyright (c) 2014 University of Oxford
*/
public class HealthMapAlertValidatorTest {
@Test
public void alertWithNoDiseaseIdsIsInvalid() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseases(Arrays.asList("Disease 1", "Disease 2"));
actAndAssertMessage(alert, "Missing disease IDs in HealthMap alert (alert ID 5)");
}
@Test
public void alertWithDiseaseIdMissingInListIsInvalid() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseaseIds(Arrays.asList("123", null, "456"));
alert.setDiseases(Arrays.asList("Disease 1", "Disease 2", "Disease 3"));
actAndAssertMessage(alert, "Missing disease ID within list in HealthMap alert (alert ID 5)");
}
@Test
public void alertWithNoDiseaseNamesIsInvalid() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseaseIds(Arrays.asList("123", "456"));
actAndAssertMessage(alert, "Missing diseases in HealthMap alert (alert ID 5)");
}
@Test
public void alertWithDiseaseIdCountNotEqualToDiseaseNameCountIsInvalid() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseaseIds(Arrays.asList("123", "456"));
alert.setDiseases(Arrays.asList("Disease 1", "Disease 2", "Disease 3"));
actAndAssertMessage(alert, "HealthMap alert has 2 disease ID(s) but 3 disease name(s) (alert ID 5)");
}
@Test
public void alertWithAPlaceCategoryToIgnoreIsInvalid() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseaseId("123");
alert.setDisease("Test name");
alert.setPlaceCategories(Arrays.asList("Farm hatchery", "imported Case"));
actAndAssertMessage(alert, "Ignoring HealthMap alert because it has place category \"imported Case\" (alert ID 5)");
}
@Test
public void alertWithAPlaceCategoryToIgnoreIsInvalid2() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseaseId("123");
alert.setDisease("Test name");
alert.setPlaceCategories(Arrays.asList(" Vaccine-associated Paralytic Poliomyelitis "));
actAndAssertMessage(alert, "Ignoring HealthMap alert because it has place category \"Vaccine-associated Paralytic Poliomyelitis\" (alert ID 5)");
}
@Test
public void alertWithOtherPlaceCategoriesIsValid() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseaseId("123");
alert.setDisease("Test name");
alert.setPlaceCategories(Arrays.asList("Farm hatchery", "Some other category"));
actAndAssertMessage(alert, null);
}
@Test
public void alertWithNoDateIsInvalid() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseaseId("123");
alert.setDisease("Test name");
alert.setDate(null);
actAndAssertMessage(alert, "Missing date in HealthMap alert (alert ID 5)");
}
@Test
public void alertWithNoFeedIsInvalid() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseaseId("123");
alert.setDisease("Test name");
alert.setFeed(null);
actAndAssertMessage(alert, "Missing feed in HealthMap alert (alert ID 5)");
}
@Test
public void alertWithNoFeedIdIsInvalid() {
HealthMapAlert alert = createHealthMapAlert(5);
alert.setDiseaseId("123");
alert.setDisease("Test name");
alert.setFeedId(null);
actAndAssertMessage(alert, "Missing feed ID in HealthMap alert (alert ID 5)");
}
private HealthMapAlert createHealthMapAlert(int alertId) {
HealthMapAlert alert = new HealthMapAlert();
alert.setLink("http://healthmap.org/ln.php?" + alertId);
alert.setDate(DateTime.now());
alert.setFeed("ProMed Mail");
alert.setFeedId("1");
return alert;
}
private void actAndAssertMessage(HealthMapAlert alert, String expectedMessage) {
List<String> placeCategoriesToIgnore = Arrays.asList("imported case", "vaccine-associated paralytic poliomyelitis");
HealthMapAlertValidator validator = new HealthMapAlertValidator(alert, placeCategoriesToIgnore);
String message = validator.validate();
assertThat(message).isEqualTo(expectedMessage);
}
}