package edu.ualberta.med.biobank.test.action;
import java.util.HashSet;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import edu.ualberta.med.biobank.common.action.exception.ActionException;
import edu.ualberta.med.biobank.common.action.exception.ModelNotFoundException;
import edu.ualberta.med.biobank.common.action.info.OriginInfoSaveInfo;
import edu.ualberta.med.biobank.common.action.info.ShipmentInfoSaveInfo;
import edu.ualberta.med.biobank.common.action.info.ShipmentReadInfo;
import edu.ualberta.med.biobank.common.action.info.SiteInfo;
import edu.ualberta.med.biobank.common.action.originInfo.OriginInfoDeleteAction;
import edu.ualberta.med.biobank.common.action.originInfo.OriginInfoSaveAction;
import edu.ualberta.med.biobank.common.action.patient.PatientSaveAction;
import edu.ualberta.med.biobank.common.action.shipment.ShipmentGetInfoAction;
import edu.ualberta.med.biobank.common.action.site.SiteGetInfoAction;
import edu.ualberta.med.biobank.common.action.specimen.SpecimenInfo;
import edu.ualberta.med.biobank.model.ActivityStatus;
import edu.ualberta.med.biobank.model.Specimen;
import edu.ualberta.med.biobank.test.Utils;
import edu.ualberta.med.biobank.test.action.helper.IdSetMutator;
import edu.ualberta.med.biobank.test.action.helper.OriginInfoHelper;
import edu.ualberta.med.biobank.test.action.helper.ShipmentInfoHelper;
import edu.ualberta.med.biobank.test.action.helper.SiteHelper;
import edu.ualberta.med.biobank.test.action.helper.StudyHelper;
public class TestShipment extends TestAction {
@Rule
public TestName testname = new TestName();
private String name;
private Integer studyId;
private Integer patientId;
private Integer siteId;
private Integer centerId;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
name = testname.getMethodName() + getR().nextInt();
studyId =
StudyHelper
.createStudy(getExecutor(), name, ActivityStatus.ACTIVE);
siteId =
SiteHelper.createSite(getExecutor(), name + "1", "Edmonton",
ActivityStatus.ACTIVE, new HashSet<Integer>(studyId));
centerId =
SiteHelper.createSite(getExecutor(), name + "2", "Calgary",
ActivityStatus.ACTIVE, new HashSet<Integer>(studyId));
patientId =
exec(new PatientSaveAction(null, studyId, name,
Utils.getRandomDate(), null)).getId();
}
@Test
public void saveWithSpecs() throws Exception {
OriginInfoSaveInfo oisave =
OriginInfoHelper.createSaveOriginInfoSpecimenInfoRandom(
getExecutor(),
patientId, siteId, centerId);
ShipmentInfoSaveInfo shipsave =
ShipmentInfoHelper.createRandomShipmentInfo(getExecutor());
for (Integer spec : oisave.addedSpecIds) {
Assert.assertTrue(((Specimen) session.load(Specimen.class, spec))
.getOriginInfo().getCenter().getId()
.equals(siteId));
}
Integer id =
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
ShipmentReadInfo info =
exec(new ShipmentGetInfoAction(id));
Assert.assertTrue(info.originInfo.getCenter().getId()
.equals(oisave.centerId));
Assert.assertTrue(info.originInfo.getReceiverSite().getId()
.equals(oisave.siteId));
for (SpecimenInfo spec : info.specimens) {
Assert.assertTrue(oisave.addedSpecIds.contains(spec.specimen
.getId()));
Assert.assertTrue(spec.specimen.getOriginInfo().getCenter().getId()
.equals(centerId));
Assert.assertTrue(spec.specimen.getOriginInfo().getReceiverSite()
.getId()
.equals(siteId));
Assert.assertTrue(spec.specimen.getCurrentCenter().getId()
.equals(siteId));
}
for (SpecimenInfo spec : info.specimens)
Assert.assertTrue(!oisave.removedSpecIds.contains(spec.specimen
.getId()));
oisave.removedSpecIds = oisave.addedSpecIds;
oisave.addedSpecIds = new HashSet<Integer>();
id =
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
info =
exec(new ShipmentGetInfoAction(id));
Assert.assertTrue(info.specimens.size() == 0);
IdSetMutator mut = new IdSetMutator();
// Empty
oisave.addedSpecIds = mut.getEmpty();
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
// Null
oisave.addedSpecIds = mut.getNull();
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
// Set of null
try {
oisave.addedSpecIds = mut.getSetWithNull();
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
Assert.fail();
} catch (ActionException e) {
// cool
}
// Out of Bounds
try {
oisave.addedSpecIds = mut.getOutOfBounds();
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
Assert.fail();
} catch (ModelNotFoundException e) {
}
}
@Test
public void testDelete() throws Exception {
OriginInfoSaveInfo oisave =
OriginInfoHelper.createSaveOriginInfoSpecimenInfoRandom(
getExecutor(),
patientId, siteId, centerId);
ShipmentInfoSaveInfo shipsave =
ShipmentInfoHelper.createRandomShipmentInfo(getExecutor());
Integer id =
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
for (Integer spec : oisave.addedSpecIds) {
Assert.assertTrue(((Specimen) session.get(Specimen.class, spec))
.getOriginInfo()
.getCenter().getId()
.equals(centerId));
Assert.assertTrue(((Specimen) session.get(Specimen.class, spec))
.getOriginInfo().getReceiverSite().getId()
.equals(siteId));
Assert.assertTrue(((Specimen) session.get(Specimen.class, spec))
.getCurrentCenter().getId()
.equals(siteId));
}
ShipmentReadInfo info = exec(new ShipmentGetInfoAction(id));
SiteInfo siteInfo = exec(new SiteGetInfoAction(siteId));
OriginInfoDeleteAction action =
new OriginInfoDeleteAction(info.originInfo, siteInfo.getSite());
exec(action);
session.close();
session = openSession();
for (Integer spec : oisave.addedSpecIds) {
Assert.assertTrue(((Specimen) session.get(Specimen.class, spec))
.getOriginInfo()
.getCenter().getId()
.equals(siteId));
Assert.assertTrue(((Specimen) session.get(Specimen.class, spec))
.getCurrentCenter().getId()
.equals(siteId));
}
}
@Test
public void testComment() throws Exception {
OriginInfoSaveInfo oisave =
OriginInfoHelper.createSaveOriginInfoSpecimenInfoRandom(
getExecutor(),
patientId, siteId, centerId);
ShipmentInfoSaveInfo shipsave =
ShipmentInfoHelper.createRandomShipmentInfo(getExecutor());
Integer id =
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
oisave.oiId = id;
ShipmentReadInfo info =
exec(new ShipmentGetInfoAction(id));
Assert.assertEquals(1, info.originInfo.getComments().size());
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
info =
exec(new ShipmentGetInfoAction(id));
Assert.assertEquals(2, info.originInfo.getComments().size());
exec(new OriginInfoSaveAction(oisave, shipsave))
.getId();
info =
exec(new ShipmentGetInfoAction(id));
Assert.assertEquals(3, info.originInfo.getComments().size());
}
}