package edu.ualberta.med.biobank.test.wrappers;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import edu.ualberta.med.biobank.common.util.DispatchSpecimenState;
import edu.ualberta.med.biobank.common.util.DispatchState;
import edu.ualberta.med.biobank.common.wrappers.CenterWrapper;
import edu.ualberta.med.biobank.common.wrappers.ClinicWrapper;
import edu.ualberta.med.biobank.common.wrappers.CollectionEventWrapper;
import edu.ualberta.med.biobank.common.wrappers.ContactWrapper;
import edu.ualberta.med.biobank.common.wrappers.DispatchWrapper;
import edu.ualberta.med.biobank.common.wrappers.PatientWrapper;
import edu.ualberta.med.biobank.common.wrappers.ProcessingEventWrapper;
import edu.ualberta.med.biobank.common.wrappers.ResearchGroupWrapper;
import edu.ualberta.med.biobank.common.wrappers.SiteWrapper;
import edu.ualberta.med.biobank.common.wrappers.SpecimenTypeWrapper;
import edu.ualberta.med.biobank.common.wrappers.SpecimenWrapper;
import edu.ualberta.med.biobank.common.wrappers.StudyWrapper;
import edu.ualberta.med.biobank.common.wrappers.helpers.SiteQuery;
import edu.ualberta.med.biobank.model.ActivityStatus;
import edu.ualberta.med.biobank.model.Site;
import edu.ualberta.med.biobank.server.applicationservice.exceptions.ValueNotSetException;
import edu.ualberta.med.biobank.test.TestDatabase;
import edu.ualberta.med.biobank.test.internal.ClinicHelper;
import edu.ualberta.med.biobank.test.internal.CollectionEventHelper;
import edu.ualberta.med.biobank.test.internal.ContactHelper;
import edu.ualberta.med.biobank.test.internal.DbHelper;
import edu.ualberta.med.biobank.test.internal.DispatchHelper;
import edu.ualberta.med.biobank.test.internal.PatientHelper;
import edu.ualberta.med.biobank.test.internal.ProcessingEventHelper;
import edu.ualberta.med.biobank.test.internal.RequestHelper;
import edu.ualberta.med.biobank.test.internal.ResearchGroupHelper;
import edu.ualberta.med.biobank.test.internal.ShippingMethodHelper;
import edu.ualberta.med.biobank.test.internal.SiteHelper;
import edu.ualberta.med.biobank.test.internal.SpecimenHelper;
import edu.ualberta.med.biobank.test.internal.SpecimenTypeHelper;
import edu.ualberta.med.biobank.test.internal.StudyHelper;
@Deprecated
public class TestCenter extends TestDatabase {
@Test
public void testGettersAndSetters() throws Exception {
SiteWrapper site = SiteHelper.addSite("testGettersAndSetters"
+ r.nextInt());
testGettersAndSetters(site);
}
@Test
public void testGetRequest() throws Exception {
SiteWrapper site = SiteHelper.addSite("testRequest");
StudyWrapper testStudy = StudyHelper.addStudy("testStudy");
CollectionEventWrapper ce = CollectionEventHelper.addCollectionEvent(
site, PatientHelper.addPatient("testP", testStudy), 0,
SpecimenHelper.newSpecimen(
SpecimenTypeHelper.addSpecimenType("testTypeRequest"),
ActivityStatus.ACTIVE, new Date()));
RequestHelper.addRequest(testStudy, true,
ce.getAllSpecimenCollection(false)
.toArray(new SpecimenWrapper[] {}));
site.reload();
Assert.assertEquals(1,
CenterWrapper.getRequestCollection(appService, site).size());
}
@Test
public void testGetProcessingEvents() throws Exception {
SiteWrapper site = SiteHelper.addSite("testProcessingEvents");
ProcessingEventHelper.addProcessingEvent(site, new Date());
ProcessingEventHelper.addProcessingEvent(site, new Date());
ProcessingEventHelper.addProcessingEvent(site, new Date());
site.reload();
Assert.assertEquals(3, site.getProcessingEventCount());
Assert.assertEquals(3, site.getProcessingEventCount(true));
}
@Test
public void testGetAliquotedSpecimens() throws Exception {
SiteWrapper site = SiteHelper.addSite("testAliquots" + r.nextInt());
ProcessingEventWrapper pevent = ProcessingEventHelper
.addProcessingEvent(site, new Date());
SpecimenTypeWrapper testtype = SpecimenTypeHelper
.addSpecimenType("testTypeAliquoted");
SpecimenWrapper parent =
SpecimenHelper.newSpecimen(testtype, ActivityStatus.ACTIVE,
new Date());
CollectionEventWrapper ce = CollectionEventHelper.addCollectionEvent(
site, PatientHelper.addPatient("testP",
StudyHelper.addStudy("testStudy")), 0, parent);
parent.reload();
ce.reload();
pevent.reload();
site.reload();
SpecimenHelper.addSpecimen(
ce.getOriginalSpecimenCollection(false).get(0), testtype, pevent);
SpecimenHelper.addSpecimen(
ce.getOriginalSpecimenCollection(false).get(0), testtype, pevent);
SpecimenHelper.addSpecimen(
ce.getOriginalSpecimenCollection(false).get(0), testtype, pevent);
site.reload();
Assert.assertEquals(3, site.getAliquotedSpecimenCount().intValue());
}
@Test
public void testGetStudyCollection() throws Exception {
ResearchGroupWrapper rg = ResearchGroupHelper.addResearchGroup(
"testGetStudyDefault", true);
Assert.assertTrue(rg.getStudyCollection().size() == 0);
}
@Test
public void testGetCenters() throws Exception {
SiteWrapper site = SiteHelper.addSite("testCentersSite" + r.nextInt());
ResearchGroupWrapper rg = ResearchGroupHelper.addResearchGroup(
"testCentersRG", true);
Assert.assertEquals(3, CenterWrapper.getCenters(appService).size());
Assert.assertEquals(rg.getId().intValue(), CenterWrapper
.getCenterFromId(appService, rg.getId()).getId().intValue());
Assert.assertEquals(2, CenterWrapper.getOtherCenters(appService, site)
.size());
}
@Test
public void testDispatches() throws Exception {
ClinicWrapper clinic = ClinicHelper.addClinic("testDispatchClinic");
SiteWrapper site = SiteHelper.addSite("TestDispatchSite");
DispatchWrapper dispatch = DispatchHelper.addDispatch(clinic, site,
ShippingMethodHelper.addShippingMethod("blah"));
dispatch.setState(DispatchState.CREATION);
dispatch.persist();
clinic.reload();
site.reload();
Assert.assertEquals(1,
CenterWrapper.getInCreationDispatchCollection(clinic).size());
Assert.assertEquals(0,
CenterWrapper.getInCreationDispatchCollection(site).size());
dispatch.setState(DispatchState.IN_TRANSIT);
dispatch.persist();
clinic.reload();
site.reload();
Assert.assertEquals(1, CenterWrapper
.getInTransitSentDispatchCollection(clinic).size());
Assert.assertEquals(1, CenterWrapper
.getInTransitReceiveDispatchCollection(site).size());
dispatch.setState(DispatchState.RECEIVED);
dispatch.persist();
clinic.reload();
site.reload();
Assert.assertEquals(1, clinic.getSrcDispatchCollection(false).size());
Assert.assertEquals(1, site.getDstDispatchCollection(false).size());
Assert.assertEquals(0, CenterWrapper
.getReceivingNoErrorsDispatchCollection(clinic).size());
Assert.assertEquals(1, CenterWrapper
.getReceivingNoErrorsDispatchCollection(site).size());
CollectionEventWrapper ce = CollectionEventHelper.addCollectionEvent(
clinic, PatientHelper.addPatient("testP",
StudyHelper.addStudy("testStudy")), 0, SpecimenHelper
.newSpecimen(SpecimenTypeHelper.addSpecimenType("testType"),
ActivityStatus.ACTIVE, new Date()));
dispatch.addSpecimens(ce.getAllSpecimenCollection(false),
DispatchSpecimenState.EXTRA);
dispatch.persist();
clinic.reload();
site.reload();
Assert.assertEquals(0, CenterWrapper
.getReceivingWithErrorsDispatchCollection(clinic).size());
Assert.assertEquals(1, CenterWrapper
.getReceivingWithErrorsDispatchCollection(site).size());
}
@Test
public void testPersistFailNoAcivityStatus() throws Exception {
int oldTotal = SiteQuery.getSites(appService).size();
String name = "testPersistFailNoAddress" + r.nextInt();
SiteWrapper site = new SiteWrapper(appService);
site.setName(name);
site.setNameShort(name);
site.setCity("Vesoul");
try {
site.persist();
Assert.fail("Should not insert the site : no activity status");
} catch (ValueNotSetException e) {
Assert.assertTrue(true);
}
site.setActivityStatus(ActivityStatus.ACTIVE);
SiteHelper.createdSites.add(site);
site.persist();
int newTotal = SiteQuery.getSites(appService).size();
Assert.assertEquals(oldTotal + 1, newTotal);
}
@Test
public void testResetNew() throws Exception {
SiteWrapper newSite = new SiteWrapper(appService);
newSite.setName("titi");
newSite.reset();
Assert.assertEquals(null, newSite.getName());
}
@Test
public void testCompareTo() throws Exception {
String name = "testCompareTo" + r.nextInt();
SiteWrapper site = SiteHelper.addSite("QWERTY" + name);
SiteWrapper site2 = SiteHelper.addSite("ASDFG" + name);
Assert.assertTrue(site.compareTo(site2) > 0);
Assert.assertTrue(site2.compareTo(site) < 0);
Assert.assertTrue(site.compareTo(site) == 0);
}
@Test
public void testResetAlreadyInDatabase() throws Exception {
SiteWrapper site = SiteHelper.addSite("testResetAlreadyInDatabase"
+ r.nextInt());
site.reload();
String oldName = site.getName();
site.setName("toto");
site.reset();
Assert.assertEquals(oldName, site.getName());
}
@Test
public void testDelete() throws Exception {
SiteWrapper site = SiteHelper
.addSite("testDelete" + r.nextInt(), false);
// object is in database
Site siteInDB = ModelUtils.getObjectWithId(appService, Site.class,
site.getId());
Assert.assertNotNull(siteInDB);
Integer siteId = site.getId();
site.delete();
siteInDB = ModelUtils.getObjectWithId(appService, Site.class, siteId);
// object is not anymore in database
Assert.assertNull(siteInDB);
}
@Test
public void testPersistFailNoAddress() throws Exception {
int oldTotal = SiteQuery.getSites(appService).size();
String name = "testPersistFailNoAddress" + r.nextInt();
SiteWrapper site = new SiteWrapper(appService);
site.setName(name);
site.setNameShort(name);
site.setActivityStatus(ActivityStatus.ACTIVE);
try {
site.persist();
Assert.fail("Should not insert the site : no address");
} catch (ValueNotSetException e) {
Assert.assertTrue(true);
}
site.setCity("Vesoul");
SiteHelper.createdSites.add(site);
site.persist();
int newTotal = SiteQuery.getSites(appService).size();
Assert.assertEquals(oldTotal + 1, newTotal);
}
@Test
public void testGetCollectionEvent() throws Exception {
String name = "testGetProcessingEventCountForClinic" + r.nextInt();
SiteWrapper site = SiteHelper.addSite(name);
ClinicWrapper clinic1 = ClinicHelper.addClinic(name + "CLINIC1");
ContactWrapper contact1 = ContactHelper.addContact(clinic1, name
+ "CONTACT1");
ClinicWrapper clinic2 = ClinicHelper.addClinic(name + "CLINIC2");
ContactWrapper contact2 = ContactHelper.addContact(clinic2, name
+ "CONTACT2");
StudyWrapper study1 = StudyHelper.addStudy(name + "STUDY1");
study1.addToContactCollection(Arrays.asList(contact1, contact2));
study1.persist();
StudyWrapper study2 = StudyHelper.addStudy(name + "STUDY2");
study2.addToContactCollection(Arrays.asList(contact2));
study2.persist();
PatientWrapper patient1 = PatientHelper.addPatient(name, study1);
PatientWrapper patient2 = PatientHelper
.addPatient(name + "_p2", study2);
List<CollectionEventWrapper> ceventSet1 = CollectionEventHelper
.addCollectionEvents(site, patient1, name + "_set1");
site.reload();
Assert.assertEquals(ceventSet1.size(), site.getCollectionEventCount());
List<CollectionEventWrapper> ceventSet2 = CollectionEventHelper
.addCollectionEvents(site, patient2, name + "_set2");
site.reload();
Assert.assertEquals(ceventSet1.size() + ceventSet2.size(),
site.getCollectionEventCount());
// delete cevent set 1
DbHelper.deleteCollectionEvents(ceventSet1);
site.reload();
Assert.assertEquals(ceventSet2.size(), site.getCollectionEventCount());
// delete cevent set 2
DbHelper.deleteCollectionEvents(ceventSet2);
site.reload();
Assert.assertEquals(0, site.getCollectionEventCount());
}
}