package uk.ac.ox.zoo.seeg.abraid.mp.common.dao; import org.hibernate.exception.ConstraintViolationException; import org.joda.time.DateTime; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.*; import uk.ac.ox.zoo.seeg.abraid.mp.common.AbstractCommonSpringIntegrationTests; import java.util.Arrays; import java.util.List; import static ch.lambdaj.Lambda.extract; import static ch.lambdaj.Lambda.on; import static org.assertj.core.api.Assertions.assertThat; /** * Tests the AdminUnitDiseaseExtentClassDao class. * Copyright (c) 2014 University of Oxford */ public class AdminUnitDiseaseExtentClassDaoTest extends AbstractCommonSpringIntegrationTests { @Autowired private AdminUnitDiseaseExtentClassDao adminUnitDiseaseExtentClassDao; @Autowired private AdminUnitGlobalDao adminUnitGlobalDao; @Autowired private AdminUnitTropicalDao adminUnitTropicalDao; @Autowired private DiseaseExtentClassDao diseaseExtentClassDao; @Autowired private DiseaseOccurrenceDao diseaseOccurrenceDao; @Autowired private DiseaseGroupDao diseaseGroupDao; @Test public void getLatestDiseaseExtentClassChangeDateByDiseaseGroupId() { // Arrange Integer diseaseGroupId = 87; // Act DateTime result = adminUnitDiseaseExtentClassDao.getLatestDiseaseExtentClassChangeDateByDiseaseGroupId(diseaseGroupId); // Assert assertThat(result).isEqualTo(new DateTime("2014-06-10T17:45:25")); } @Test public void getLatestValidatorOccurrencesForAdminUnitDiseaseExtentClass() { // Arrange AdminUnitDiseaseExtentClass adminUnitDiseaseExtentClass = adminUnitDiseaseExtentClassDao.getById(1); adminUnitDiseaseExtentClass.setLatestValidatorOccurrences(diseaseOccurrenceDao.getByIds(Arrays.asList(272407, 272831, 274430))); Integer diseaseGroupId = adminUnitDiseaseExtentClass.getDiseaseGroup().getId(); Boolean global = adminUnitDiseaseExtentClass.getDiseaseGroup().isGlobal(); Integer gaulCode = adminUnitDiseaseExtentClass.getAdminUnitGlobalOrTropical().getGaulCode(); // Act List<DiseaseOccurrence> result = adminUnitDiseaseExtentClassDao.getLatestValidatorOccurrencesForAdminUnitDiseaseExtentClass(diseaseGroupId, global, gaulCode); // Assert List<Integer> ids = extract(result, on(DiseaseOccurrence.class).getId()); assertThat(ids).containsOnly(272407, 272831, 274430); } @Test public void getAllAdminUnitDiseaseExtentClassesByCountryGaulCode() { // Act List<AdminUnitDiseaseExtentClass> result = adminUnitDiseaseExtentClassDao.getAllAdminUnitDiseaseExtentClassesByCountryGaulCode(87, false, 215); // Assert assertThat(result).hasSize(13); assertThat(result.get(0).getAdminUnitGlobalOrTropical().getGaulCode()).isEqualTo(2622); assertThat(result.get(0).getDiseaseExtentClass().getName()).isEqualTo("UNCERTAIN"); assertThat(result.get(12).getAdminUnitGlobalOrTropical().getGaulCode()).isEqualTo(2634); assertThat(result.get(12).getDiseaseExtentClass().getName()).isEqualTo("UNCERTAIN"); } @Test public void getDiseaseExtentClassByGaulCode() { // Act AdminUnitDiseaseExtentClass result = adminUnitDiseaseExtentClassDao.getDiseaseExtentClassByGaulCode(87, false, 153); // Assert assertThat(result.getDiseaseExtentClass().getName()).isEqualTo("PRESENCE"); assertThat(result.getAdminUnitTropical().getGaulCode()).isEqualTo(153); assertThat(result.getDiseaseGroup().getId()).isEqualTo(87); } @Test public void globalAdminUnitDiseaseExtentClassHasNullTropicalAdminUnit() { // Arrange - NB. Disease Group 22 in DB is a GLOBAL admin unit Integer diseaseGroupId = 22; DiseaseGroup diseaseGroup = diseaseGroupDao.getById(diseaseGroupId); // Act List<AdminUnitDiseaseExtentClass> list = adminUnitDiseaseExtentClassDao.getAllGlobalAdminUnitDiseaseExtentClassesByDiseaseGroupId(diseaseGroupId); // Assert assertThat(list).hasSize(5); for (AdminUnitDiseaseExtentClass adminUnitDiseaseExtentClass : list) { assertThat(adminUnitDiseaseExtentClass.getAdminUnitGlobal()).isNotNull(); assertThat(adminUnitDiseaseExtentClass.getAdminUnitTropical()).isNull(); assertThat(adminUnitDiseaseExtentClass.getDiseaseGroup()).isEqualTo(diseaseGroup); } } @Test public void saveAndReloadGlobalAdminUnitDiseaseExtentClass() { // Arrange int gaulCode = 2510; int diseaseGroupId = 22; AdminUnitGlobal adminUnitGlobal = adminUnitGlobalDao.getByGaulCode(gaulCode); DiseaseGroup diseaseGroup = diseaseGroupDao.getById(diseaseGroupId); DiseaseExtentClass extentClass = diseaseExtentClassDao.getByName("PRESENCE"); DiseaseExtentClass validatorExtentClass = diseaseExtentClassDao.getByName("POSSIBLE_ABSENCE"); int occurrenceCount = 25; DateTime createdDate = DateTime.now(); AdminUnitDiseaseExtentClass adminUnitDiseaseExtentClass = new AdminUnitDiseaseExtentClass( adminUnitGlobal, diseaseGroup, extentClass, validatorExtentClass, occurrenceCount, createdDate); // Act adminUnitDiseaseExtentClassDao.save(adminUnitDiseaseExtentClass); Integer id = adminUnitDiseaseExtentClass.getId(); // Assert assertThat(adminUnitDiseaseExtentClass.getClassChangedDate()).isNotNull(); flushAndClear(); adminUnitDiseaseExtentClass = adminUnitDiseaseExtentClassDao.getById(id); assertThat(adminUnitDiseaseExtentClass).isNotNull(); assertThat(adminUnitDiseaseExtentClass.getAdminUnitGlobal()).isNotNull(); assertThat(adminUnitDiseaseExtentClass.getAdminUnitGlobal().getGaulCode()).isEqualTo(gaulCode); assertThat(adminUnitDiseaseExtentClass.getAdminUnitTropical()).isNull(); assertThat(adminUnitDiseaseExtentClass.getDiseaseExtentClass()).isEqualTo(extentClass); assertThat(adminUnitDiseaseExtentClass.getValidatorOccurrenceCount()).isEqualTo(occurrenceCount); assertThat(adminUnitDiseaseExtentClass.getValidatorDiseaseExtentClass()).isEqualTo(validatorExtentClass); assertThat(adminUnitDiseaseExtentClass.getClassChangedDate()).isEqualTo(createdDate); } @Test public void saveAndReloadTropicalAdminUnitDiseaseExtentClass() { // Arrange int gaulCode = 204001; int diseaseGroupId = 96; AdminUnitTropical adminUnitTropical = adminUnitTropicalDao.getByGaulCode(gaulCode); DiseaseGroup diseaseGroup = diseaseGroupDao.getById(diseaseGroupId); DiseaseExtentClass extentClass = diseaseExtentClassDao.getByName("ABSENCE"); DiseaseExtentClass validatorExtentClass = diseaseExtentClassDao.getByName("POSSIBLE_ABSENCE"); int occurrenceCount = 0; DateTime changedDate = DateTime.now(); AdminUnitDiseaseExtentClass adminUnitDiseaseExtentClass = new AdminUnitDiseaseExtentClass( adminUnitTropical, diseaseGroup, extentClass, validatorExtentClass, occurrenceCount); adminUnitDiseaseExtentClass.setClassChangedDate(changedDate); // Act adminUnitDiseaseExtentClassDao.save(adminUnitDiseaseExtentClass); Integer id = adminUnitDiseaseExtentClass.getId(); // Assert assertThat(adminUnitDiseaseExtentClass.getClassChangedDate()).isNotNull(); flushAndClear(); adminUnitDiseaseExtentClass = adminUnitDiseaseExtentClassDao.getById(id); assertThat(adminUnitDiseaseExtentClass).isNotNull(); assertThat(adminUnitDiseaseExtentClass.getAdminUnitTropical()).isNotNull(); assertThat(adminUnitDiseaseExtentClass.getAdminUnitTropical().getGaulCode()).isEqualTo(gaulCode); assertThat(adminUnitDiseaseExtentClass.getAdminUnitGlobal()).isNull(); assertThat(adminUnitDiseaseExtentClass.getDiseaseExtentClass()).isEqualTo(extentClass); assertThat(adminUnitDiseaseExtentClass.getValidatorDiseaseExtentClass()).isEqualTo(validatorExtentClass); assertThat(adminUnitDiseaseExtentClass.getValidatorOccurrenceCount()).isEqualTo(occurrenceCount); } @Test(expected = ConstraintViolationException.class) public void cannotSpecifyBothGlobalAndTropicalAdminUnit() { // Arrange AdminUnitGlobal adminUnitGlobal = adminUnitGlobalDao.getByGaulCode(2510); AdminUnitTropical adminUnitTropical = adminUnitTropicalDao.getByGaulCode(204001); DiseaseGroup diseaseGroup = diseaseGroupDao.getById(96); DiseaseExtentClass extentClass = diseaseExtentClassDao.getByName(DiseaseExtentClass.ABSENCE); DiseaseExtentClass validatorExtentClass = diseaseExtentClassDao.getByName(DiseaseExtentClass.POSSIBLE_ABSENCE); int occurrenceCount = 0; AdminUnitDiseaseExtentClass adminUnitDiseaseExtentClass = new AdminUnitDiseaseExtentClass( adminUnitTropical, diseaseGroup, extentClass, validatorExtentClass, occurrenceCount); adminUnitDiseaseExtentClass.setAdminUnitGlobal(adminUnitGlobal); // Act // Cannot use catchException() because the sessionFactory becomes null for some reason - // expected exception is specified in the @Test annotation adminUnitDiseaseExtentClassDao.save(adminUnitDiseaseExtentClass); } }