package uk.ac.ox.zoo.seeg.abraid.mp.common.dao; 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.AbstractCommonSpringIntegrationTests; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.ModelRun; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.SubmodelStatistic; import uk.ac.ox.zoo.seeg.abraid.mp.common.dto.csv.CsvSubmodelStatistic; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; /** * Tests the SubmodelStatisticDao class. * Copyright (c) 2014 University of Oxford */ public class SubmodelStatisticDaoTest extends AbstractCommonSpringIntegrationTests { @Autowired private ModelRunDao modelRunDao; @Autowired private SubmodelStatisticDao submodelStatisticDao; @Autowired private DiseaseGroupDao diseaseGroupDao; @Test public void canSaveAndReload() { // Arrange ModelRun modelRun = createModelRun("foo"); SubmodelStatistic expectation = createSubmodelStatistic(modelRun); // Act submodelStatisticDao.save(expectation); // Assert Integer id = expectation.getId(); assertThat(id).isNotNull(); flushAndClear(); SubmodelStatistic result = submodelStatisticDao.getById(id); assertThat(result).isNotNull(); assertThat(result.getId()).isNotNull(); assertThat(result.getId()).isEqualTo(id); assertThat(result.getModelRun()).isEqualTo(modelRun); assertThat(result.getKappa()).isEqualTo(expectation.getKappa()); assertThat(result.getAreaUnderCurve()).isEqualTo(expectation.getAreaUnderCurve()); assertThat(result.getSensitivity()).isEqualTo(expectation.getSensitivity()); assertThat(result.getSpecificity()).isEqualTo(expectation.getSpecificity()); assertThat(result.getProportionCorrectlyClassified()).isEqualTo(expectation.getProportionCorrectlyClassified()); assertThat(result.getKappaStandardDeviation()).isEqualTo(expectation.getKappaStandardDeviation()); assertThat(result.getAreaUnderCurveStandardDeviation()).isEqualTo(expectation.getAreaUnderCurveStandardDeviation()); assertThat(result.getSensitivityStandardDeviation()).isEqualTo(expectation.getSensitivityStandardDeviation()); assertThat(result.getSpecificityStandardDeviation()).isEqualTo(expectation.getSpecificityStandardDeviation()); assertThat(result.getProportionCorrectlyClassifiedStandardDeviation()).isEqualTo(expectation.getProportionCorrectlyClassifiedStandardDeviation()); } @Test public void getSubmodelStatisticsForModelRunReturnsCorrectSubset() { // Arrange ModelRun run1 = createModelRun("foo1"); ModelRun run2 = createModelRun("foo2"); submodelStatisticDao.save(createSubmodelStatistic(run1)); submodelStatisticDao.save(createSubmodelStatistic(run2)); submodelStatisticDao.save(createSubmodelStatistic(run1)); // Act List<SubmodelStatistic> results1 = submodelStatisticDao.getSubmodelStatisticsForModelRun(run1); List<SubmodelStatistic> results2 = submodelStatisticDao.getSubmodelStatisticsForModelRun(run2); // Assert assertThat(results1).hasSize(2); assertThat(results2).hasSize(1); } private SubmodelStatistic createSubmodelStatistic(ModelRun modelRun) { CsvSubmodelStatistic dto = new CsvSubmodelStatistic(); dto.setKappa(3.0); dto.setAreaUnderCurve(4.0); dto.setSensitivity(5.0); dto.setSpecificity(6.0); dto.setProportionCorrectlyClassified(7.0); dto.setKappaStandardDeviation(8.0); dto.setAreaUnderCurveStandardDeviation(9.0); dto.setSensitivityStandardDeviation(10.0); dto.setSpecificityStandardDeviation(11.0); dto.setProportionCorrectlyClassifiedStandardDeviation(12.0); return new SubmodelStatistic(dto, modelRun); } private ModelRun createModelRun(String name) { ModelRun run = new ModelRun(name, diseaseGroupDao.getById(87), "host", DateTime.now(), DateTime.now(), DateTime.now()); modelRunDao.save(run); return run; } }