package edu.ualberta.med.biobank.test.action; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.validation.ConstraintViolationException; 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.collectionEvent.CollectionEventGetInfoAction; import edu.ualberta.med.biobank.common.action.collectionEvent.CollectionEventGetInfoAction.CEventInfo; import edu.ualberta.med.biobank.common.action.info.RequestReadInfo; import edu.ualberta.med.biobank.common.action.info.ResearchGroupReadInfo; import edu.ualberta.med.biobank.common.action.request.RequestClaimAction; import edu.ualberta.med.biobank.common.action.request.RequestDeleteAction; import edu.ualberta.med.biobank.common.action.request.RequestGetInfoAction; import edu.ualberta.med.biobank.common.action.request.RequestGetSpecimenInfosAction; import edu.ualberta.med.biobank.common.action.request.RequestStateChangeAction; import edu.ualberta.med.biobank.common.action.researchGroup.RequestSubmitAction; import edu.ualberta.med.biobank.common.action.researchGroup.ResearchGroupGetInfoAction; import edu.ualberta.med.biobank.common.action.specimen.SpecimenInfo; import edu.ualberta.med.biobank.common.util.RequestSpecimenState; import edu.ualberta.med.biobank.model.ActivityStatus; import edu.ualberta.med.biobank.model.Request; import edu.ualberta.med.biobank.model.RequestSpecimen; import edu.ualberta.med.biobank.test.action.helper.CollectionEventHelper; import edu.ualberta.med.biobank.test.action.helper.PatientHelper; import edu.ualberta.med.biobank.test.action.helper.RequestHelper; import edu.ualberta.med.biobank.test.action.helper.ResearchGroupHelper; import edu.ualberta.med.biobank.test.action.helper.StudyHelper; public class TestRequest extends TestAction { @Rule public TestName testname = new TestName(); private String name; private Integer studyId; private Integer rgId; @Override @Before public void setUp() throws Exception { super.setUp(); name = testname.getMethodName() + getR().nextInt(); studyId = StudyHelper .createStudy(getExecutor(), name, ActivityStatus.ACTIVE); rgId = ResearchGroupHelper.createResearchGroup(getExecutor(), name + "rg", name + "rg", studyId); } @Test public void testUpload() throws Exception { ResearchGroupGetInfoAction rgInfo = new ResearchGroupGetInfoAction(rgId); ResearchGroupReadInfo rg = exec(rgInfo); // create specs Integer p = PatientHelper.createPatient(getExecutor(), name + "_patient", rg.researchGroup.getStudy().getId()); Integer ceId = CollectionEventHelper.createCEventWithSourceSpecimens( getExecutor(), p, rgId); CollectionEventGetInfoAction ceReader = new CollectionEventGetInfoAction(ceId); CEventInfo ceInfo = exec(ceReader); List<String> specs = new ArrayList<String>(); for (SpecimenInfo specInfo : ceInfo.sourceSpecimenInfos) specs.add(specInfo.specimen.getInventoryId()); Assert.assertTrue(ceInfo.sourceSpecimenInfos.size() >= 2); specs.remove(Math.abs(getR().nextInt()) % specs.size()); specs.remove(Math.abs(getR().nextInt()) % specs.size()); // request specs RequestSubmitAction action = new RequestSubmitAction(rgId, specs); Integer rId = exec(action).getId(); // make sure you got what was requested RequestGetSpecimenInfosAction specAction = new RequestGetSpecimenInfosAction(rId); List<Object[]> specInfo = exec(specAction).getList(); for (int i = 0; i < specInfo.size(); i++) { RequestSpecimen spec = (RequestSpecimen) specInfo.get(i)[0]; Assert.assertTrue(specs.contains(spec.getSpecimen() .getInventoryId())); } } @Test public void testClaim() throws Exception { Integer rId = RequestHelper.createRequest(session, getExecutor(), rgId); RequestGetSpecimenInfosAction specAction = new RequestGetSpecimenInfosAction(rId); List<Object[]> specInfo = exec(specAction).getList(); List<Integer> ids = new ArrayList<Integer>(); for (int i = 0; i < specInfo.size(); i++) { RequestSpecimen spec = (RequestSpecimen) specInfo.get(i)[0]; ids.add(spec.getId()); } RequestClaimAction claimAction = new RequestClaimAction(ids); exec(claimAction); specInfo = exec(specAction).getList(); for (int i = 0; i < specInfo.size(); i++) { RequestSpecimen spec = (RequestSpecimen) specInfo.get(i)[0]; Assert.assertTrue(spec.getClaimedBy() != null && !spec.getClaimedBy().equals("")); } } @Test public void testStateChanges() throws Exception { Integer rId = RequestHelper.createRequest(session, getExecutor(), rgId); RequestGetSpecimenInfosAction specAction = new RequestGetSpecimenInfosAction(rId); List<Object[]> specInfo = exec(specAction).getList(); List<Integer> ids = new ArrayList<Integer>(); for (int i = 0; i < specInfo.size(); i++) { RequestSpecimen spec = (RequestSpecimen) specInfo.get(i)[0]; ids.add(spec.getId()); } RequestStateChangeAction dispatchAction = new RequestStateChangeAction(ids, RequestSpecimenState.DISPATCHED_STATE); exec(dispatchAction); specInfo = exec(specAction).getList(); for (int i = 0; i < specInfo.size(); i++) { RequestSpecimen spec = (RequestSpecimen) specInfo.get(i)[0]; Assert.assertTrue(RequestSpecimenState.getState(spec.getState()) .equals(RequestSpecimenState.DISPATCHED_STATE)); } } @Test public void testDelete() throws Exception { Integer rId = RequestHelper.createRequest(session, getExecutor(), rgId); RequestReadInfo reqInfo = exec(new RequestGetInfoAction(rId)); RequestDeleteAction delete = new RequestDeleteAction(reqInfo.request); exec(delete); rId = RequestHelper.createRequest(session, getExecutor(), rgId); session.beginTransaction(); Request r = (Request) session.get(Request.class, rId); r.setSubmitted(new Date()); session.saveOrUpdate(r); session.getTransaction().commit(); reqInfo = exec(new RequestGetInfoAction(rId)); delete = new RequestDeleteAction(reqInfo.request); try { exec(delete); Assert.fail("should not be allowed to delete the request"); } catch (ConstraintViolationException e) { // good } } }