package de.randi2.core.integration.modelDatabase;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.springframework.transaction.annotation.Transactional;
import de.randi2.model.TreatmentArm;
import de.randi2.model.Trial;
import de.randi2.model.TrialSite;
import de.randi2.model.TrialSubject;
import de.randi2.model.randomization.CompleteRandomizationConfig;
import de.randi2.testUtility.utility.AbstractDomainDatabaseTest;
@Transactional
public class TrialDatabaseTest extends AbstractDomainDatabaseTest<Trial> {
public TrialDatabaseTest() {
super(Trial.class);
}
private Trial validTrial;
@Before
public void setUp() {
// Valides Trial
super.setUp();
validTrial = factory.getTrial();
entityManager.persist(validTrial.getLeadingSite().getContactPerson());
}
@Test
public void databaseIntegrationTest() {
TrialSite leadingSite = factory.getTrialSite();
leadingSite.setContactPerson(factory.getPerson());
// sessionFactory.getCurrentSession().persist(leadingSite.getContactPerson());
// sessionFactory.getCurrentSession().flush();
entityManager.persist(leadingSite);
validTrial.setSponsorInvestigator(leadingSite.getContactPerson());
validTrial.setLeadingSite(leadingSite);
TrialSite pTrialSite = factory.getTrialSite();
pTrialSite.setContactPerson(factory.getPerson());
// sessionFactory.getCurrentSession().persist(pTrialSite.getContactPerson());
entityManager.persist(pTrialSite);
validTrial.addParticipatingSite(pTrialSite);
CompleteRandomizationConfig conf = new CompleteRandomizationConfig();
validTrial.setRandomizationConfiguration(conf);
entityManager.persist(validTrial);
TreatmentArm arm1 = new TreatmentArm();
arm1.setName("arm1");
arm1.setTrial(validTrial);
arm1.setPlannedSubjects(100);
TreatmentArm arm2 = new TreatmentArm();
arm2.setName("arm2");
arm2.setTrial(validTrial);
arm2.setPlannedSubjects(100);
Set<TreatmentArm> arms = new HashSet<TreatmentArm>();
arms.add(arm1);
arms.add(arm2);
entityManager.persist(arm1);
entityManager.persist(arm2);
validTrial.setTreatmentArms(arms);
validTrial = entityManager.merge(validTrial);
assertTrue(validTrial.getId() > 0);
// validTrial = (Trial) sessionFactory.getCurrentSession().get(Trial.class, validTrial
// .getId());
List<TrialSubject> subjects = new ArrayList<TrialSubject>();
for (int i = 0; i < 100; i++) {
TrialSubject subject = new TrialSubject();
TreatmentArm assignedArm = validTrial
.getRandomizationConfiguration().getAlgorithm().randomize(
subject);
subject.setIdentification("identification" + i);
subject.setArm(assignedArm);
subject.setRandNumber(assignedArm.getName() + "_"
+ (assignedArm.getSubjects().size() + 1));
subject.setCounter((validTrial.getSubjects().size() + 1));
if (subject.getIdentification() == null)
subject.setIdentification(subject.getRandNumber());
subjects.add(subject);
}
validTrial = entityManager.merge(validTrial);
Trial dbTrial = entityManager.find(Trial.class, validTrial
.getId());
assertEquals(validTrial.getId(), dbTrial.getId());
assertEquals(validTrial.getName(), dbTrial.getName());
assertEquals(validTrial.getDescription(), dbTrial.getDescription());
assertEquals(validTrial.getLeadingSite().getName(), dbTrial
.getLeadingSite().getName());
assertEquals(validTrial.getRandomizationConfiguration().getId(),
dbTrial.getRandomizationConfiguration().getId());
assertEquals(validTrial.getRandomizationConfiguration().getAlgorithm()
.getClass(), dbTrial.getRandomizationConfiguration()
.getAlgorithm().getClass());
// TrialSite dbTrialSite =
// (TrialSite)sessionFactory.getCurrentSession().get(TrialSite.class,
// pTrialSite.getId());
// assertEquals(1, dbTrialSite.getTrials());
// assertEquals(validTrial.getParticipatingSites().size(),
// dbTrial.getParticipatingSites().size());
// assertEquals(validTrial.getTreatmentArms().get(0).getSubjects().size(),
// dbTrial.getTreatmentArms().get(0).getSubjects().size());
// assertEquals(validTrial.getTreatmentArms().get(1).getSubjects().size(),
// dbTrial.getTreatmentArms().get(1).getSubjects().size());
}
}