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.CovariateSubFile;
import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.EffectCurveCovariateInfluence;
import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.ModelRun;
import uk.ac.ox.zoo.seeg.abraid.mp.common.dto.csv.CsvEffectCurveCovariateInfluence;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests the EffectCurveCovariateInfluenceDao class.
* Copyright (c) 2014 University of Oxford
*/
public class EffectCurveCovariateInfluenceDaoTest extends AbstractCommonSpringIntegrationTests {
@Autowired
private ModelRunDao modelRunDao;
@Autowired
private CovariateFileDao covariateFileDao;
@Autowired
private EffectCurveCovariateInfluenceDao effectCurveCovariateInfluenceDao;
@Autowired
private DiseaseGroupDao diseaseGroupDao;
@Test
public void canSaveAndReload() {
// Arrange
ModelRun modelRun = createModelRun("foo");
CovariateFile covariateFile = createCovariateFile(1);
EffectCurveCovariateInfluence expectation = createEffectCurveCovariateInfluence(covariateFile, modelRun);
// Act
effectCurveCovariateInfluenceDao.save(expectation);
// Assert
Integer id = expectation.getId();
assertThat(id).isNotNull();
flushAndClear();
EffectCurveCovariateInfluence result = effectCurveCovariateInfluenceDao.getById(id);
assertThat(result).isNotNull();
assertThat(result.getId()).isNotNull();
assertThat(result.getId()).isEqualTo(id);
assertThat(result.getModelRun()).isEqualTo(modelRun);
assertThat(result.getCovariateFile()).isEqualTo(expectation.getCovariateFile());
assertThat(result.getMeanInfluence()).isEqualTo(expectation.getMeanInfluence());
assertThat(result.getLowerQuantile()).isEqualTo(expectation.getLowerQuantile());
assertThat(result.getUpperQuantile()).isEqualTo(expectation.getUpperQuantile());
assertThat(result.getCovariateValue()).isEqualTo(expectation.getCovariateValue());
}
@Test
public void getCovariateInfluenceForModelRunReturnsCorrectSubset() {
// Arrange
ModelRun run1 = createModelRun("foo1");
ModelRun run2 = createModelRun("foo2");
CovariateFile covariate1 = createCovariateFile(1);
CovariateFile covariate2 = createCovariateFile(2);
effectCurveCovariateInfluenceDao.save(createEffectCurveCovariateInfluence(covariate1, run1));
effectCurveCovariateInfluenceDao.save(createEffectCurveCovariateInfluence(covariate1, run2));
effectCurveCovariateInfluenceDao.save(createEffectCurveCovariateInfluence(covariate2, run1));
// Act
List<EffectCurveCovariateInfluence> results1 =
effectCurveCovariateInfluenceDao.getEffectCurveCovariateInfluencesForModelRun(run1);
List<EffectCurveCovariateInfluence> results2 =
effectCurveCovariateInfluenceDao.getEffectCurveCovariateInfluencesForModelRun(run2);
// Assert
assertThat(results1).hasSize(2);
assertThat(results2).hasSize(1);
}
private EffectCurveCovariateInfluence createEffectCurveCovariateInfluence(CovariateFile covariateFile, ModelRun modelRun) {
CsvEffectCurveCovariateInfluence dto = new CsvEffectCurveCovariateInfluence();
dto.setMeanInfluence(3.0);
dto.setLowerQuantile(4.0);
dto.setUpperQuantile(5.0);
dto.setCovariateValue(6.0);
return new EffectCurveCovariateInfluence(covariateFile, 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;
}
}