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.List; import javax.persistence.EntityTransaction; import org.junit.Before; import org.junit.Test; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import de.randi2.model.AbstractDomainObject; import de.randi2.model.Login; import de.randi2.model.Person; import de.randi2.model.Trial; import de.randi2.model.TrialSite; import de.randi2.testUtility.utility.AbstractDomainDatabaseTest; public class TrialSiteDatabaseTest extends AbstractDomainDatabaseTest<TrialSite> { private TrialSite validTrialSite; public TrialSiteDatabaseTest() { super(TrialSite.class); } @Before public void setUp() { super.setUp(); validTrialSite = factory.getTrialSite(); entityManager.persist( validTrialSite.getContactPerson()); } @Test @Transactional(propagation = Propagation.REQUIRES_NEW) public void testTrials() { persistTrialSite(); List<Trial> tl = new ArrayList<Trial>(); tl.add(factory.getTrial()); tl.add(factory.getTrial()); tl.add(factory.getTrial()); for (Trial trial : tl) { persistTrial(trial); } TrialSite trialSite = entityManager .find(TrialSite.class, validTrialSite.getId()); assertEquals(validTrialSite.getId(), trialSite.getId()); assertEquals(tl.size(), trialSite.getTrials().size()); List<Trial> trials = new ArrayList<Trial>(); trials.add(new Trial()); validTrialSite.setTrials(trials); assertEquals(trials, validTrialSite.getTrials()); } @Transactional(propagation=Propagation.REQUIRES_NEW) private void persistTrialSite(){ entityManager.persist(validTrialSite); assertTrue(validTrialSite.getId() != AbstractDomainObject.NOT_YET_SAVED_ID); } @Transactional(propagation=Propagation.REQUIRES_NEW) private Login getPersistLogin(){ Login login = factory.getLogin(); entityManager.persist(login); return login; } @Transactional(propagation=Propagation.REQUIRES_NEW) private void persistTrial(Trial trial){ trial.addParticipatingSite(validTrialSite); trial.setLeadingSite(validTrialSite); Login login = getPersistLogin(); trial.setSponsorInvestigator(login.getPerson()); assertEquals(1, trial.getParticipatingSites().size()); assertEquals(validTrialSite.getId(), ((AbstractDomainObject) trial .getParticipatingSites().toArray()[0]).getId()); entityManager.persist(trial); } @Test @Transactional public void testContactPerson() { Person p = factory.getPerson(); entityManager.persist(p); validTrialSite.setContactPerson(p); assertEquals(p.getSurname(), validTrialSite.getContactPerson() .getSurname()); entityManager.persist(validTrialSite); assertTrue(validTrialSite.getId() != AbstractDomainObject.NOT_YET_SAVED_ID); assertTrue(p.getId() != AbstractDomainObject.NOT_YET_SAVED_ID); TrialSite c = entityManager.find( TrialSite.class, validTrialSite.getId()); assertEquals(p.getId(), c.getContactPerson().getId()); } @Test @Transactional(propagation = Propagation.REQUIRES_NEW) public void testMembers() { List<Person> members = new ArrayList<Person>(); entityManager.persist(validTrialSite); for (int i = 0; i < 100; i++) { Person p = factory.getPerson(); entityManager.persist(p); validTrialSite.getMembers().add(p); validTrialSite = entityManager.merge(validTrialSite); members.add(p); } entityManager.flush(); TrialSite c = entityManager.find( TrialSite.class, validTrialSite.getId()); assertEquals(validTrialSite.getId(), c.getId()); entityManager.refresh(c); assertEquals(members.size(), c.getMembers().size()); } }