package edu.ualberta.med.biobank.test.action; import junit.framework.Assert; import org.hibernate.Transaction; import org.junit.Before; import org.junit.Test; import edu.ualberta.med.biobank.common.action.container.ContainerGetInfoAction; import edu.ualberta.med.biobank.common.action.container.ContainerGetInfoAction.ContainerInfo; import edu.ualberta.med.biobank.common.action.container.ContainerMoveAction; import edu.ualberta.med.biobank.common.action.container.ContainerSaveAction; import edu.ualberta.med.biobank.model.ActivityStatus; import edu.ualberta.med.biobank.model.Container; import edu.ualberta.med.biobank.test.Utils; import edu.ualberta.med.biobank.test.action.helper.ContainerTypeHelper; import edu.ualberta.med.biobank.test.action.helper.SiteHelper; public class TestContainer extends TestAction { private String name; private Integer siteId; private Integer containerTypeId; private ContainerSaveAction containerSaveAction; @Override @Before public void setUp() throws Exception { super.setUp(); name = getMethodNameR(); siteId = exec(SiteHelper.getSaveAction( name, name, ActivityStatus.ACTIVE)).getId(); containerTypeId = exec(ContainerTypeHelper.getSaveAction( "FREEZER_3x10", "FR3x10", siteId, true, 3, 10, getContainerLabelingSchemes().get("CBSR 2 char alphabetic") .getId(), getR().nextDouble())).getId(); containerSaveAction = new ContainerSaveAction(); containerSaveAction.setActivityStatus(ActivityStatus.ACTIVE); containerSaveAction.setBarcode(Utils.getRandomString(5, 10)); containerSaveAction.setLabel("01"); containerSaveAction.setSiteId(siteId); containerSaveAction.setTypeId(containerTypeId); } @Test public void saveNew() throws Exception { } @Test public void checkGetAction() throws Exception { Integer containerId = exec(containerSaveAction).getId(); ContainerInfo containerInfo = exec(new ContainerGetInfoAction(containerId)); Assert.assertEquals("01", containerInfo.container.getLabel()); Assert.assertEquals("FREEZER_3x10", containerInfo.container .getContainerType().getName()); Assert.assertEquals(ActivityStatus.ACTIVE, containerInfo.container .getActivityStatus()); Assert.assertEquals(name, containerInfo.container.getSite().getName()); Assert.assertEquals(0, containerInfo.container .getChildPositions().size()); Assert.assertEquals(0, containerInfo.container .getSpecimenPositions().size()); Assert.assertEquals(0, containerInfo.container.getComments() .size()); } // TODO: need tests for container labels @Test public void testMoveContainer() { Transaction tx = session.beginTransaction(); factory.createTopContainer(); Container childL1Container = factory.createParentContainer(); Container[] childL2Containers = new Container[] { factory.createContainer(), factory.createContainer(), factory.createContainer(), }; Container topContainer2 = factory.createTopContainer(); tx.commit(); exec(new ContainerMoveAction(childL1Container, topContainer2, topContainer2.getLabel() + "A1")); ContainerInfo containerInfo = exec(new ContainerGetInfoAction(childL1Container.getId())); childL1Container = containerInfo.container; Assert.assertEquals(topContainer2.getId(), childL1Container.getTopContainer().getId()); Assert.assertEquals(topContainer2.getId(), childL1Container.getParentContainer().getId()); String expectedL2Path = topContainer2.getId() + "/" + childL1Container.getId(); // check that children have correct settings too for (Container child : childL2Containers) { containerInfo = exec(new ContainerGetInfoAction(child.getId())); Assert.assertEquals(topContainer2.getId(), containerInfo.container.getTopContainer().getId()); // ensure parent is still childL1Container Assert.assertEquals(childL1Container.getId(), containerInfo.container.getParentContainer().getId()); // check the path Assert .assertEquals(expectedL2Path, containerInfo.container.getPath()); } } @Test public void testMoveContainerOccupiedLocation() { Transaction tx = session.beginTransaction(); factory.createTopContainer(); Container child1Container = factory.createContainer(); Container topContainer2 = factory.createTopContainer(); // create child at position A1 factory.createContainer(); tx.commit(); try { exec(new ContainerMoveAction(child1Container, topContainer2, topContainer2.getLabel() + "A1")); Assert .fail("should not be allowed to move a containers to occupied spot"); } catch (Exception e) { Assert.assertTrue(true); } } @Test public void testMoveContainerDiffSites() { // containers are not allowed to be moved between sites Transaction tx = session.beginTransaction(); factory.createTopContainer(); Container childContainer = factory.createContainer(); factory.createSite(); factory.createTopContainerType(); Container topContainerS2 = factory.createTopContainer(); tx.commit(); try { // use default labeling scheme exec(new ContainerMoveAction(childContainer, topContainerS2, topContainerS2.getLabel() + "A1")); Assert .fail("should not be allowed to move containers between sites"); } catch (Exception e) { Assert.assertTrue(true); } } }