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.CovariateFile; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.CovariateInfluence; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.CovariateSubFile; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.ModelRun; import uk.ac.ox.zoo.seeg.abraid.mp.common.dto.csv.CsvCovariateInfluence; import java.util.Arrays; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; /** * Tests the CovariateInfluenceDao class. * Copyright (c) 2014 University of Oxford */ public class CovariateInfluenceDaoTest extends AbstractCommonSpringIntegrationTests { @Autowired private ModelRunDao modelRunDao; @Autowired private CovariateFileDao covariateFileDao; @Autowired private CovariateInfluenceDao covariateInfluenceDao; @Autowired private DiseaseGroupDao diseaseGroupDao; @Test public void canSaveAndReload() { // Arrange ModelRun modelRun = createModelRun("foo"); CovariateFile covariate = createCovariateFile(1); CovariateInfluence expectation = createCovariateInfluence(covariate, modelRun); // Act covariateInfluenceDao.save(expectation); // Assert Integer id = expectation.getId(); assertThat(id).isNotNull(); flushAndClear(); CovariateInfluence result = covariateInfluenceDao.getById(id); assertThat(result).isNotNull(); assertThat(result.getId()).isNotNull(); assertThat(result.getId()).isEqualTo(id); assertThat(result.getModelRun()).isEqualTo(modelRun); assertThat(result.getCovariateFile()).isEqualTo(covariate); assertThat(result.getMeanInfluence()).isEqualTo(expectation.getMeanInfluence()); assertThat(result.getLowerQuantile()).isEqualTo(expectation.getLowerQuantile()); assertThat(result.getUpperQuantile()).isEqualTo(expectation.getUpperQuantile()); } @Test public void getCovariateInfluenceForModelRunReturnsCorrectSubset() { // Arrange ModelRun run1 = createModelRun("foo1"); ModelRun run2 = createModelRun("foo2"); CovariateFile covariate1 = createCovariateFile(1); CovariateFile covariate2 = createCovariateFile(2); covariateInfluenceDao.save(createCovariateInfluence(covariate1, run1)); covariateInfluenceDao.save(createCovariateInfluence(covariate1, run2)); covariateInfluenceDao.save(createCovariateInfluence(covariate2, run1)); // Act List<CovariateInfluence> results1 = covariateInfluenceDao.getCovariateInfluencesForModelRun(run1); List<CovariateInfluence> results2 = covariateInfluenceDao.getCovariateInfluencesForModelRun(run2); // Assert assertThat(results1).hasSize(2); assertThat(results2).hasSize(1); } private CovariateInfluence createCovariateInfluence(CovariateFile covariate, ModelRun modelRun) { CsvCovariateInfluence dto = new CsvCovariateInfluence(); dto.setMeanInfluence(3.0); dto.setLowerQuantile(4.0); dto.setUpperQuantile(5.0); return new CovariateInfluence(covariate, 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; } private CovariateFile createCovariateFile(int idx) { CovariateFile covariate = new CovariateFile("name" + idx, false, false, "info" + idx); CovariateSubFile covariateSubFile = new CovariateSubFile(covariate, null, "file" + idx); covariate.setFiles(Arrays.asList(covariateSubFile)); covariateFileDao.save(covariate); return covariate; } }