package edu.ualberta.med.biobank.test.action; import java.util.ArrayList; 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.AddressSaveInfo; import edu.ualberta.med.biobank.common.action.info.ResearchGroupReadInfo; import edu.ualberta.med.biobank.common.action.info.ResearchGroupSaveInfo; import edu.ualberta.med.biobank.common.action.request.RequestGetSpecimenInfosAction; import edu.ualberta.med.biobank.common.action.researchGroup.RequestSubmitAction; import edu.ualberta.med.biobank.common.action.researchGroup.ResearchGroupDeleteAction; import edu.ualberta.med.biobank.common.action.researchGroup.ResearchGroupGetInfoAction; import edu.ualberta.med.biobank.common.action.researchGroup.ResearchGroupSaveAction; import edu.ualberta.med.biobank.common.action.specimen.SpecimenInfo; 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.model.Specimen; 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 TestResearchGroup extends TestAction { @Rule public TestName testname = new TestName(); private String name; private Integer studyId; @Override @Before public void setUp() throws Exception { super.setUp(); name = testname.getMethodName() + getR().nextInt(); studyId = StudyHelper .createStudy(getExecutor(), name, ActivityStatus.ACTIVE); } @Test public void saveResearchGroup() throws Exception { Integer rgId = ResearchGroupHelper.createResearchGroup(getExecutor(), name, name, studyId); ResearchGroupGetInfoAction reader = new ResearchGroupGetInfoAction(rgId); ResearchGroupReadInfo rg = exec(reader); Assert.assertTrue(rg.researchGroup.getName().equals(name + "rg")); Assert.assertTrue(rg.researchGroup.getNameShort().equals(name + "rg")); Assert.assertTrue(rg.researchGroup.getStudy().getId().equals(studyId)); Assert .assertTrue(rg.researchGroup.getActivityStatus() == ActivityStatus.ACTIVE); } @Test public void testUpload() throws Exception { Integer rgId = ResearchGroupHelper.createResearchGroup(getExecutor(), name + "rg", name + "rg", studyId); ResearchGroupGetInfoAction reader = new ResearchGroupGetInfoAction(rgId); ResearchGroupReadInfo rg = exec(reader); // 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 testDelete() throws Exception { // only one failure case specific to rg, rest are in center Integer rgId = ResearchGroupHelper.createResearchGroup(getExecutor(), name, name, studyId); Integer rId = RequestHelper.createRequest(session, getExecutor(), rgId); ResearchGroupReadInfo rg = exec(new ResearchGroupGetInfoAction(rgId)); ResearchGroupDeleteAction delete = new ResearchGroupDeleteAction(rg.researchGroup); try { exec(delete); Assert.fail(); } catch (ConstraintViolationException e) { Assert.assertTrue(true); } session.close(); session = openSession(); session.beginTransaction(); Request r = (Request) session.load(Request.class, rId); for (RequestSpecimen rs : r.getRequestSpecimens()) { Specimen spec = rs.getSpecimen(); session.delete(rs); session.delete(spec); } r = (Request) session.load(Request.class, rId); session.delete(r); session.getTransaction().commit(); exec(delete); // should be fine } @Test public void testComment() throws Exception { AddressSaveInfo addressSaveInfo = new AddressSaveInfo(null, "test", "test", "test", "test", "test", "test", "test", "test", "test"); ResearchGroupSaveInfo save = new ResearchGroupSaveInfo(null, name + "rg", name + "rg", studyId, "comment", addressSaveInfo, ActivityStatus.ACTIVE); ResearchGroupSaveAction rgSave = new ResearchGroupSaveAction(save); Integer rgId = exec(rgSave).getId(); ResearchGroupGetInfoAction reader = new ResearchGroupGetInfoAction(rgId); ResearchGroupReadInfo rg = exec(reader); save.id = rgId; Assert.assertEquals(1, rg.researchGroup.getComments().size()); exec(rgSave); rg = exec(reader); Assert.assertEquals(2, rg.researchGroup.getComments().size()); exec(rgSave); rg = exec(reader); Assert.assertEquals(3, rg.researchGroup.getComments().size()); } }