package edu.ualberta.med.biobank.test.wrappers;
import java.util.ArrayList;
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.exception.BiobankCheckException;
import edu.ualberta.med.biobank.common.formatters.DateFormatter;
import edu.ualberta.med.biobank.common.peer.DispatchSpecimenPeer;
import edu.ualberta.med.biobank.common.util.DispatchSpecimenState;
import edu.ualberta.med.biobank.common.util.DispatchState;
import edu.ualberta.med.biobank.common.wrappers.ClinicWrapper;
import edu.ualberta.med.biobank.common.wrappers.ContactWrapper;
import edu.ualberta.med.biobank.common.wrappers.ContainerTypeWrapper;
import edu.ualberta.med.biobank.common.wrappers.ContainerWrapper;
import edu.ualberta.med.biobank.common.wrappers.DispatchSpecimenWrapper;
import edu.ualberta.med.biobank.common.wrappers.DispatchWrapper;
import edu.ualberta.med.biobank.common.wrappers.ModelWrapper;
import edu.ualberta.med.biobank.common.wrappers.OriginInfoWrapper;
import edu.ualberta.med.biobank.common.wrappers.ProcessingEventWrapper;
import edu.ualberta.med.biobank.common.wrappers.Property;
import edu.ualberta.med.biobank.common.wrappers.ShipmentInfoWrapper;
import edu.ualberta.med.biobank.common.wrappers.ShippingMethodWrapper;
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.UserWrapper;
import edu.ualberta.med.biobank.model.Dispatch;
import edu.ualberta.med.biobank.model.DispatchSpecimen;
import edu.ualberta.med.biobank.server.applicationservice.exceptions.BiobankSessionException;
import edu.ualberta.med.biobank.test.TestDatabase;
import edu.ualberta.med.biobank.test.Utils;
import edu.ualberta.med.biobank.test.internal.ClinicHelper;
import edu.ualberta.med.biobank.test.internal.ContactHelper;
import edu.ualberta.med.biobank.test.internal.ContainerHelper;
import edu.ualberta.med.biobank.test.internal.ContainerTypeHelper;
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.SiteHelper;
import edu.ualberta.med.biobank.test.internal.SpecimenHelper;
import edu.ualberta.med.biobank.test.internal.StudyHelper;
import gov.nih.nci.system.applicationservice.WritableApplicationService;
@Deprecated
public class TestDispatch extends TestDatabase {
@Test
public void testGettersAndSetters() throws Exception {
String name = "testGettersAndSetters" + r.nextInt();
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
SiteWrapper[] allSites = new SiteWrapper[] { senderSite, receiverSite };
for (SiteWrapper site : allSites) {
site.persist();
site.reload();
}
DispatchWrapper dispatch = DispatchHelper.addDispatch(senderSite,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0));
testGettersAndSetters(dispatch);
}
@Test
public void testConstructor() throws Exception {
Dispatch rawDispatch = new Dispatch();
DispatchWrapper dispatch = new DispatchWrapper(appService, rawDispatch);
Assert.assertNotNull(dispatch);
}
@Test
public void testGetSetSender() throws Exception {
String name = "testGetSetSender" + r.nextInt();
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
SiteWrapper[] allSites = new SiteWrapper[] { senderSite, receiverSite };
for (SiteWrapper site : allSites) {
site.persist();
site.reload();
}
DispatchWrapper dispatch = DispatchHelper.newDispatch(null,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0));
Assert.assertNull(dispatch.getSenderCenter());
dispatch.setSenderCenter(senderSite);
dispatch.persist();
DispatchHelper.createdDispatches.add(dispatch);
Assert.assertEquals(senderSite, dispatch.getSenderCenter());
DispatchWrapper dispatch2 = new DispatchWrapper(appService,
dispatch.getWrappedObject());
Assert.assertEquals(senderSite, dispatch2.getSenderCenter());
}
@Test
public void testGetSetReceiver() throws Exception {
String name = "testGetSetReceiver" + r.nextInt();
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
SiteWrapper[] allSites = new SiteWrapper[] { senderSite, receiverSite };
for (SiteWrapper site : allSites) {
site.persist();
site.reload();
}
DispatchWrapper dispatch = DispatchHelper.newDispatch(senderSite, null,
ShippingMethodWrapper.getShippingMethods(appService).get(0));
Assert.assertNull(dispatch.getReceiverCenter());
dispatch.setReceiverCenter(receiverSite);
dispatch.persist();
DispatchHelper.createdDispatches.add(dispatch);
Assert.assertEquals(receiverSite, dispatch.getReceiverCenter());
DispatchWrapper dispatch2 = new DispatchWrapper(appService,
dispatch.getWrappedObject());
Assert.assertEquals(receiverSite, dispatch2.getReceiverCenter());
}
@Test
public void testPersist() throws Exception {
String name = "testPersist" + r.nextInt();
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper senderSite2 = SiteHelper.addSite(name + "_sender2");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
SiteWrapper receiverSite2 = SiteHelper.addSite(name + "_receiver2");
SiteWrapper[] allSites = new SiteWrapper[] { senderSite, senderSite2,
receiverSite, receiverSite2 };
for (SiteWrapper site : allSites) {
site.persist();
site.reload();
}
ShippingMethodWrapper method = ShippingMethodWrapper
.getShippingMethods(appService).get(0);
DispatchHelper.addDispatch(senderSite, receiverSite, method, name,
Utils.getRandomDate());
// test no sender
DispatchWrapper dispatch = DispatchHelper.newDispatch(null,
receiverSite, method, TestCommon.getNewWaybill(r),
Utils.getRandomDate());
try {
dispatch.persist();
dispatch.delete();
Assert
.fail("should not be allowed to persist a dispatch shipment without a sender");
} catch (BiobankSessionException e) {
Assert.assertTrue(true);
}
// test no receiver
dispatch = DispatchHelper.newDispatch(senderSite, null, method,
TestCommon.getNewWaybill(r), Utils.getRandomDate());
try {
dispatch.persist();
dispatch.delete();
Assert
.fail("should not be allowed to persist a dispatch shipment without a receiver");
} catch (BiobankSessionException e) {
Assert.assertTrue(true);
}
// test duplicate waybill
String waybill = TestCommon.getNewWaybill(r);
DispatchWrapper dispatch2 = DispatchHelper.newDispatch(senderSite,
senderSite, method, waybill, Utils.getRandomDate());
dispatch2.persist();
DispatchWrapper dispatch3 = DispatchHelper.newDispatch(senderSite,
senderSite, method, waybill, Utils.getRandomDate());
try {
dispatch3.persist();
dispatch3.delete();
Assert
.fail("should not be allowed to persist a dispatch with a used waybill");
} catch (BiobankCheckException e) {
Assert.assertTrue(true);
} finally {
dispatch2.delete();
}
}
@Test
public void testCompareTo() throws Exception {
String name = "testCompareTo" + r.nextInt();
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
SiteWrapper[] allSites = new SiteWrapper[] { senderSite, receiverSite };
for (SiteWrapper site : allSites) {
site.persist();
site.reload();
}
ShippingMethodWrapper method = ShippingMethodWrapper
.getShippingMethods(appService).get(0);
DispatchWrapper dispatch1 = DispatchHelper.addDispatch(senderSite,
receiverSite, method);
dispatch1.getShipmentInfo().setReceivedAt(
DateFormatter.parseToDate("2010-02-01 23:00"));
DispatchWrapper dispatch2 = DispatchHelper.addDispatch(senderSite,
receiverSite, method);
dispatch2.getShipmentInfo().setReceivedAt(
DateFormatter.parseToDate("2009-12-01 23:00"));
Assert.assertTrue(dispatch1.compareTo(dispatch2) < 0);
Assert.assertTrue(dispatch2.compareTo(dispatch1) > 0);
}
@Test
public void testReset() throws Exception {
String name = "testReset" + r.nextInt();
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
SiteWrapper[] allSites = new SiteWrapper[] { senderSite, receiverSite };
for (SiteWrapper site : allSites) {
site.persist();
site.reload();
}
ShippingMethodWrapper method = ShippingMethodWrapper
.getShippingMethods(appService).get(0);
// test reset for a new object
DispatchWrapper dispatch = DispatchHelper.newDispatch(senderSite,
receiverSite, method, name, Utils.getRandomDate());
dispatch.reset();
Assert.assertEquals(0, dispatch.getCommentCollection(false).size());
// test reset for an object already in database
dispatch = DispatchHelper.addDispatch(senderSite, receiverSite, method,
name, Utils.getRandomDate());
// dispatch.addToCommentCollection(Utils.getRandomComments());
dispatch.reset();
Assert.assertEquals(0, dispatch.getCommentCollection(false).size());
}
@Test
public void testReload() throws Exception {
String name = "testReload" + r.nextInt();
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
SiteWrapper[] allSites = new SiteWrapper[] { senderSite, receiverSite };
for (SiteWrapper site : allSites) {
site.persist();
site.reload();
}
DispatchWrapper shipment = DispatchHelper.addDispatch(senderSite,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0), name, Utils.getRandomDate());
try {
shipment.reload();
Assert.assertTrue(true);
} catch (Exception e) {
Assert.fail("cannot reload shipment");
}
}
@Test
public void testGetWrappedClass() throws Exception {
DispatchWrapper dispatch = DispatchHelper.newDispatch(null, null,
ShippingMethodWrapper.getShippingMethods(appService).get(0));
Assert.assertEquals(Dispatch.class, dispatch.getWrappedClass());
}
@Test
public void testDelete() throws Exception {
String name = "testDelete" + r.nextInt();
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
SiteWrapper[] allSites = new SiteWrapper[] { senderSite, receiverSite };
for (SiteWrapper site : allSites) {
site.persist();
site.reload();
}
DispatchWrapper dispatch = DispatchHelper.addDispatch(senderSite,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0), name, Utils.getRandomDate());
int countBefore = appService.search(Dispatch.class, new Dispatch())
.size();
dispatch.delete();
DispatchHelper.createdDispatches.remove(dispatch);
int countAfter = appService.search(Dispatch.class, new Dispatch())
.size();
Assert.assertEquals(countBefore - 1, countAfter);
}
private List<SpecimenWrapper> addSpecimensToContainerRow(
ContainerWrapper container, int row,
List<SpecimenTypeWrapper> sampleTypes) throws Exception {
int numSampletypes = sampleTypes.size();
int colCapacity = container.getColCapacity();
SpecimenWrapper parentSpc = SpecimenHelper.addParentSpecimen();
OriginInfoWrapper oi = new OriginInfoWrapper(appService);
oi.setCenter(container.getSite());
oi.persist();
ProcessingEventWrapper pevent = ProcessingEventHelper
.addProcessingEvent(container.getSite(), Utils.getRandomDate());
List<SpecimenWrapper> spcs = new ArrayList<SpecimenWrapper>();
for (int i = 0; i < colCapacity; ++i) {
spcs.add(SpecimenHelper.addSpecimen(parentSpc,
sampleTypes.get(r.nextInt(numSampletypes)), pevent, container,
row, i));
}
container.reload();
return spcs;
}
@Test
public void testGetSetSpecimenCollection() throws Exception {
String name = "testGetSetSpecimenCollection" + r.nextInt();
StudyWrapper study = StudyHelper.addStudy(name);
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
DispatchWrapper dispatch = DispatchHelper.addDispatch(senderSite,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0));
List<SpecimenTypeWrapper> sampleTypes = SpecimenTypeWrapper
.getAllSpecimenTypes(appService, false);
ContainerTypeWrapper containerType = ContainerTypeHelper
.addContainerType(senderSite, name, name, 1, 8, 12, false);
containerType.addToSpecimenTypeCollection(sampleTypes);
containerType.persist();
containerType.reload();
ContainerTypeWrapper topContainerType = ContainerTypeHelper
.addContainerTypeRandom(senderSite, name + "top", true);
topContainerType.addToChildContainerTypeCollection(Arrays
.asList(containerType));
topContainerType.persist();
topContainerType.reload();
ContainerWrapper topContainer = ContainerHelper.addContainer(
String.valueOf(r.nextInt()), name + "top", senderSite,
topContainerType);
ContainerWrapper container = ContainerHelper.addContainer(null, name,
topContainer, senderSite, containerType, 0, 0);
PatientHelper.addPatient(name, study);
ClinicWrapper clinic = ClinicHelper.addClinic(name);
ContactWrapper contact = ContactHelper.addContact(clinic, name);
study.addToContactCollection(Arrays.asList(contact));
study.persist();
study.reload();
List<SpecimenWrapper> spcSet1 = addSpecimensToContainerRow(container,
0, sampleTypes);
List<SpecimenWrapper> spcSet2 = addSpecimensToContainerRow(container,
1, sampleTypes);
dispatch.addSpecimens(spcSet1, DispatchSpecimenState.NONE);
dispatch.persist();
dispatch.reload();
List<SpecimenWrapper> dispatchSpcs = dispatch
.getSpecimenCollection(false);
Assert.assertEquals(spcSet1.size(), dispatchSpcs.size());
// add more specimens to row 2
dispatch.addSpecimens(spcSet2, DispatchSpecimenState.NONE);
dispatch.persist();
dispatch.reload();
dispatchSpcs = dispatch.getSpecimenCollection(false);
Assert.assertEquals(spcSet1.size() + spcSet2.size(),
dispatchSpcs.size());
dispatch.removeSpecimens(spcSet1);
dispatch.persist();
dispatch.reload();
dispatchSpcs = dispatch.getSpecimenCollection(false);
Assert.assertEquals(spcSet2.size(), dispatchSpcs.size());
}
@Test
public void testRemoveDispatchAliquots() throws Exception {
String name = "testRemoveSpecs" + r.nextInt();
StudyWrapper study = StudyHelper.addStudy(name);
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
DispatchWrapper dispatch = DispatchHelper.addDispatch(senderSite,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0));
List<SpecimenTypeWrapper> sampleTypes = SpecimenTypeWrapper
.getAllSpecimenTypes(appService, false);
ContainerTypeWrapper containerType = ContainerTypeHelper
.addContainerType(senderSite, name, name, 1, 8, 12, false);
containerType.addToSpecimenTypeCollection(sampleTypes);
containerType.persist();
containerType.reload();
ContainerTypeWrapper topContainerType = ContainerTypeHelper
.addContainerTypeRandom(senderSite, name + "top", true);
topContainerType.addToChildContainerTypeCollection(Arrays
.asList(containerType));
topContainerType.persist();
topContainerType.reload();
ContainerWrapper topContainer = ContainerHelper.addContainer(
String.valueOf(r.nextInt()), name + "top", senderSite,
topContainerType);
ContainerWrapper container = ContainerHelper.addContainer(null, name,
topContainer, senderSite, containerType, 0, 0);
PatientHelper.addPatient(name, study);
ClinicWrapper clinic = ClinicHelper.addClinic(name);
ContactWrapper contact = ContactHelper.addContact(clinic, name);
study.addToContactCollection(Arrays.asList(contact));
study.persist();
study.reload();
List<SpecimenWrapper> spcSet1 = addSpecimensToContainerRow(container,
0, sampleTypes);
dispatch.addSpecimens(spcSet1, DispatchSpecimenState.NONE);
dispatch.persist();
dispatch.reload();
List<DispatchSpecimenWrapper> dispatchSpcs = dispatch
.getDispatchSpecimenCollection(false);
Assert.assertEquals(spcSet1.size(), dispatchSpcs.size());
dispatch.removeDispatchSpecimens(dispatchSpcs);
dispatch.persist();
dispatch.reload();
dispatchSpcs = dispatch.getDispatchSpecimenCollection(false);
Assert.assertEquals(0, dispatchSpcs.size());
}
@Test
public void testStringOutputs() throws Exception {
String name = "testRandomStrings" + r.nextInt();
StudyHelper.addStudy(name);
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
ClinicWrapper senderClinic = ClinicHelper.addClinic("Fake");
DispatchWrapper dispatch = DispatchHelper.addDispatch(senderClinic,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0));
Date date = DateFormatter.parseToDate("2011-08-17");
ShipmentInfoWrapper info = new ShipmentInfoWrapper(appService);
info.setWaybill("testWaybill");
info.setShippingMethod(ShippingMethodWrapper.getShippingMethods(
appService).get(0));
info.setReceivedAt(date);
dispatch.setShipmentInfo(info);
Assert.assertEquals("2011-08-17 00:00",
dispatch.getFormattedReceivedAt());
Assert.assertEquals(
senderClinic.getNameShort() + "/" + receiverSite.getNameShort()
+ "/" + dispatch.getFormattedReceivedAt(), dispatch.toString());
}
@Test
public void testRandomGetters() throws Exception {
String name = "testRandomGetters" + r.nextInt();
StudyWrapper study = StudyHelper.addStudy(name);
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
ClinicWrapper senderClinic = ClinicHelper.addClinic("Fake");
SpecimenWrapper spec = SpecimenHelper.addParentSpecimen(senderClinic,
study, PatientHelper.addPatient(Utils.getRandomString(10), study));
DispatchWrapper dispatch = DispatchHelper.addDispatch(senderClinic,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0));
dispatch.addSpecimens(Arrays.asList(spec), DispatchSpecimenState.NONE);
Assert.assertTrue(!dispatch.hasSpecimenStatesChanged());
Assert.assertTrue(dispatch.hasNewSpecimens());
dispatch.setState(DispatchState.CLOSED);
Assert.assertTrue(dispatch.isInClosedState());
Assert.assertTrue(dispatch.hasBeenReceived());
dispatch.setState(DispatchState.CREATION);
Assert.assertTrue(dispatch.isInCreationState());
dispatch.setState(DispatchState.LOST);
Assert.assertTrue(dispatch.isInLostState());
dispatch.setState(DispatchState.RECEIVED);
Assert.assertTrue(dispatch.isInReceivedState());
Assert.assertTrue(dispatch.hasBeenReceived());
dispatch.setState(DispatchState.IN_TRANSIT);
Assert.assertTrue(dispatch.isInTransitState());
dispatch.getDispatchSpecimenCollection(false).get(0)
.setDispatchSpecimenState(DispatchSpecimenState.MISSING);
Assert.assertTrue(dispatch.hasErrors());
Assert.assertTrue(!dispatch.hasSpecimenStatesChanged());
Assert.assertTrue(dispatch.hasDispatchSpecimens());
dispatch.removeDispatchSpecimens(dispatch
.getDispatchSpecimenCollection(false));
Assert.assertTrue(!dispatch.hasDispatchSpecimens());
UserWrapper currentUser = UserWrapper.getUser(appService, "testuser");
Assert.assertTrue(!dispatch.canBeSentBy(currentUser));
Assert.assertTrue(!dispatch.canBeReceivedBy(currentUser));
Assert.assertTrue(!dispatch.canBeClosedBy(currentUser));
}
@Test
public void testReceiveSpecimens() throws Exception {
String name = "testReceiveSpecimens" + r.nextInt();
StudyWrapper study = StudyHelper.addStudy(name + "_study");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_site");
ClinicWrapper clinic = ClinicHelper.addClinic(name + "_clinic");
SpecimenWrapper spec = SpecimenHelper.addParentSpecimen(clinic, study,
PatientHelper.addPatient(Utils.getRandomString(10), study));
DispatchWrapper dispatch = DispatchHelper.addDispatch(clinic,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0));
dispatch.addSpecimens(Arrays.asList(spec), DispatchSpecimenState.NONE);
Assert.assertTrue(dispatch.getNonProcessedDispatchSpecimenCollection()
.size() == 1);
dispatch.receiveSpecimens(Arrays.asList(spec));
Assert.assertTrue(dispatch.getReceivedDispatchSpecimens().get(0)
.getSpecimen().equals(spec));
Assert.assertTrue(dispatch.getNonProcessedDispatchSpecimenCollection()
.size() == 0);
Assert.assertEquals(0, dispatch.getMissingDispatchSpecimens().size());
DispatchSpecimenWrapper dspec = dispatch.getDispatchSpecimen(spec
.getInventoryId());
dspec.setDispatchSpecimenState(DispatchSpecimenState.MISSING);
dspec.persist();
dispatch.reload();
Assert.assertEquals(1, dispatch.getMissingDispatchSpecimens().size());
Assert.assertEquals(1,
dispatch.getMap().get(DispatchSpecimenState.MISSING).size());
dspec.setDispatchSpecimenState(DispatchSpecimenState.EXTRA);
dspec.persist();
dispatch.reload();
Assert.assertEquals(1, dispatch.getExtraDispatchSpecimens().size());
Assert.assertEquals(1,
dispatch.getMap().get(DispatchSpecimenState.EXTRA).size());
}
@Test
public void testGetDispatchesByWaybill() throws Exception {
Assert.assertTrue(DispatchWrapper.getDispatchesByWaybill(appService,
"testWaybill").size() == 0);
String name = "testGetDispatchesByWaybill" + r.nextInt();
SiteWrapper site = SiteHelper.addSite(name);
ClinicWrapper clinic = ClinicHelper.addClinic(name + "_clinic");
DispatchWrapper testDispatch = DispatchHelper.addDispatch(site, clinic,
ShippingMethodWrapper.getShippingMethods(appService).get(0));
ShipmentInfoWrapper info = new ShipmentInfoWrapper(appService);
info.setWaybill("testWaybill");
info.setShippingMethod(ShippingMethodWrapper.getShippingMethods(
appService).get(0));
testDispatch.setShipmentInfo(info);
testDispatch.persist();
Assert.assertTrue(DispatchWrapper
.getDispatchesByWaybill(appService, "testWaybill").get(0)
.equals(testDispatch));
}
@Test
public void testGetDispatchesInSite() throws Exception {
String name = "testGetDispatchesInSite" + r.nextInt();
SiteWrapper site = SiteHelper.addSite(name);
ClinicWrapper clinic = ClinicHelper.addClinic(name + "_clinic");
DispatchWrapper testDispatch = DispatchHelper.addDispatch(site, clinic,
ShippingMethodWrapper.getShippingMethods(appService).get(0));
site.reload();
clinic.reload();
Assert.assertTrue(site.getSrcDispatchCollection(false).size() == 1);
Assert.assertTrue(clinic.getDstDispatchCollection(false).size() == 1);
testDispatch.setSenderCenter(clinic);
testDispatch.setReceiverCenter(site);
testDispatch.persist();
site.reload();
clinic.reload();
Assert.assertTrue(clinic.getSrcDispatchCollection(false).size() == 1);
Assert.assertTrue(site.getDstDispatchCollection(false).size() == 1);
}
@Test
public void testGetDispatchesInSiteByDateSent() throws Exception {
String name = "testGetDispatchesInSiteByDateSent" + r.nextInt();
Date date = new Date();
SiteWrapper site = SiteHelper.addSite(name);
ClinicWrapper clinic = ClinicHelper.addClinic(name + "_clinic");
DispatchWrapper testDispatch = DispatchHelper.addDispatch(site, clinic,
ShippingMethodWrapper.getShippingMethods(appService).get(0));
testDispatch.getShipmentInfo().setPackedAt(date);
testDispatch.getShipmentInfo().persist();
testDispatch.reload();
Assert.assertTrue(DispatchWrapper.getDispatchesByDateSent(appService,
date, site).size() == 1);
Assert.assertTrue(DispatchWrapper.getDispatchesByDateReceived(
appService, date, site).size() == 0);
testDispatch.setSenderCenter(clinic);
testDispatch.setReceiverCenter(site);
}
@Test
public void testGetDispatchesInSiteByDateReceived() throws Exception {
String name = "testGetDispatchesInSiteByDateReceived" + r.nextInt();
Date date = new Date();
SiteWrapper site = SiteHelper.addSite(name);
ClinicWrapper clinic = ClinicHelper.addClinic(name + "_clinic");
DispatchWrapper testDispatch = DispatchHelper.addDispatch(site, clinic,
ShippingMethodWrapper.getShippingMethods(appService).get(0));
testDispatch.getShipmentInfo().setReceivedAt(date);
testDispatch.getShipmentInfo().persist();
testDispatch.reload();
Assert.assertTrue(DispatchWrapper.getDispatchesByDateReceived(
appService, date, site).size() == 1);
Assert.assertTrue(DispatchWrapper.getDispatchesByDateSent(appService,
date, site).size() == 0);
testDispatch.setSenderCenter(clinic);
testDispatch.setReceiverCenter(site);
}
@Test
public void testSwitchToTransit() throws Exception {
// expect specimen with position to have their position removed.
String name = "testSwitchToTransit" + r.nextInt();
StudyWrapper study = StudyHelper.addStudy(name);
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
DispatchWrapper dispatch = DispatchHelper.addDispatch(senderSite,
receiverSite, ShippingMethodWrapper.getShippingMethods(appService)
.get(0));
// create specimens with position.
List<SpecimenTypeWrapper> specTypes = SpecimenTypeWrapper
.getAllSpecimenTypes(appService, false);
ContainerTypeWrapper containerType = ContainerTypeHelper
.addContainerType(senderSite, name, name, 1, 8, 12, false);
containerType.addToSpecimenTypeCollection(specTypes);
containerType.persist();
containerType.reload();
ContainerTypeWrapper topContainerType = ContainerTypeHelper
.addContainerTypeRandom(senderSite, name + "top", true);
topContainerType.addToChildContainerTypeCollection(Arrays
.asList(containerType));
topContainerType.persist();
topContainerType.reload();
ContainerWrapper topContainer = ContainerHelper.addContainer(
String.valueOf(r.nextInt()), name + "top", senderSite,
topContainerType);
ContainerWrapper container = ContainerHelper.addContainer(null, name,
topContainer, senderSite, containerType, 0, 0);
PatientHelper.addPatient(name, study);
ClinicWrapper clinic = ClinicHelper.addClinic(name);
ContactWrapper contact = ContactHelper.addContact(clinic, name);
study.addToContactCollection(Arrays.asList(contact));
study.persist();
study.reload();
List<SpecimenWrapper> spcSet1 = addSpecimensToContainerRow(container,
0, specTypes);
dispatch.addSpecimens(spcSet1, DispatchSpecimenState.NONE);
dispatch.persist();
dispatch.reload();
for (SpecimenWrapper sp : spcSet1) {
sp.reload();
Assert.assertNotNull(sp.getPosition());
}
dispatch.setState(DispatchState.IN_TRANSIT);
dispatch.persist();
for (SpecimenWrapper sp : spcSet1) {
sp.reload();
Assert.assertNull(sp.getPosition());
}
}
@Test
public void testDispatchSpecimenCompareTo() {
SpecimenWrapper s1 = new SpecimenWrapper(appService);
s1.setInventoryId("a");
SpecimenWrapper s2 = new SpecimenWrapper(appService);
s2.setInventoryId("b");
DispatchSpecimenWrapper ds1 = new DispatchSpecimenWrapper(appService);
ds1.setSpecimen(s1);
DispatchSpecimenWrapper ds2 = new DispatchSpecimenWrapper(appService);
ds2.setSpecimen(s1);
Assert.assertTrue(ds1.compareTo(ds2) == 0);
ds2.setSpecimen(s2);
Assert.assertTrue(ds1.compareTo(ds2) < 0);
DispatchSpecimenWrapper2 ds3 = new DispatchSpecimenWrapper2(appService);
Assert.assertTrue(ds1.compareTo(ds3) == 0);
}
private static final class DispatchSpecimenWrapper2 extends
ModelWrapper<DispatchSpecimen> {
public DispatchSpecimenWrapper2(WritableApplicationService appService) {
super(appService);
}
@Override
public Property<Integer, ? super DispatchSpecimen> getIdProperty() {
return DispatchSpecimenPeer.ID;
}
@Override
protected List<Property<?, ? super DispatchSpecimen>> getProperties() {
return new ArrayList<Property<?, ? super DispatchSpecimen>>();
}
@Override
public Class<DispatchSpecimen> getWrappedClass() {
return DispatchSpecimen.class;
}
}
@Test
public void testDispatchSpecimenState() throws Exception {
DispatchSpecimenWrapper ds = new DispatchSpecimenWrapper(appService);
DispatchSpecimenState[] states = DispatchSpecimenState.values();
for (DispatchSpecimenState state : states) {
ds.setState(state.getId());
Assert
.assertTrue(ds.getStateDescription().equals(state.getLabel()));
Assert.assertTrue(ds.getSpecimenState().equals(state));
}
}
/**
* Related to issue #1438: should insert with no problem the dispatch if no
* shipmentinfo is set + can insert more than one dispatch with an empty
* waybill, with the same sender.
*/
@Test
public void testPersistWaybillEmpty() throws Exception {
String name = "testPersistWaybillUnique" + r.nextInt();
SiteWrapper senderSite = SiteHelper.addSite(name + "_sender");
SiteWrapper receiverSite = SiteHelper.addSite(name + "_receiver");
ShippingMethodWrapper method = ShippingMethodWrapper
.getShippingMethods(appService).get(0);
DispatchWrapper dispatch1 = DispatchHelper.newDispatch(senderSite,
receiverSite, method, "", Utils.getRandomDate());
dispatch1.persist();
DispatchHelper.createdDispatches.add(dispatch1);
// Test with no shipment info:
DispatchWrapper dispatch2 = DispatchHelper.newDispatch(senderSite,
receiverSite, method, "", Utils.getRandomDate());
dispatch2.setShipmentInfo(null);
try {
dispatch2.persist();
DispatchHelper.createdDispatches.add(dispatch2);
} catch (BiobankCheckException e) {
Assert.fail("Persist should succeed");
}
Assert.assertNull(dispatch2.getShipmentInfo());
// Test with another dispatch with waybill empty
DispatchWrapper dispatch3 = DispatchHelper.newDispatch(senderSite,
receiverSite, method, "", Utils.getRandomDate());
try {
dispatch3.persist();
DispatchHelper.createdDispatches.add(dispatch3);
} catch (BiobankCheckException e) {
Assert.fail("Persist should succeed");
}
Assert.assertEquals("", dispatch3.getShipmentInfo().getWaybill());
Assert.assertEquals(dispatch1.getShipmentInfo().getWaybill(), dispatch3
.getShipmentInfo().getWaybill());
}
}