From 9e44b61930ca5ff0931c1f3e918a313020509e4f Mon Sep 17 00:00:00 2001
From: izabel <izabel>
Date: Tue, 5 Jan 2010 07:49:08 +0000
Subject: [PATCH] [LMS-1326] add tests

SVN: 14136
---
 .../server/dataaccess/db/MaterialDAOTest.java | 65 +++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MaterialDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MaterialDAOTest.java
index f8940cb6d8b..fc243dcb5c1 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MaterialDAOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MaterialDAOTest.java
@@ -16,6 +16,11 @@
 
 package ch.systemsx.cisd.openbis.generic.server.dataaccess.db;
 
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertNull;
+import static org.testng.AssertJUnit.assertTrue;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -25,8 +30,14 @@ import junit.framework.Assert;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.testng.annotations.Test;
 
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IMaterialDAO;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
 
 /**
@@ -108,4 +119,58 @@ public final class MaterialDAOTest extends AbstractDAOTest
         daoFactory.getMaterialDAO().createMaterials(newMaterials);
     }
 
+    @Test
+    public final void testDeleteWithProperties()
+    {
+        final IMaterialDAO materialDAO = daoFactory.getMaterialDAO();
+
+        // BACTERIUM2 has not been used as a property value
+        MaterialIdentifier identifier = new MaterialIdentifier("BACTERIUM2", "BACTERIUM");
+        final MaterialPE deletedMaterial = materialDAO.tryFindMaterial(identifier);
+        assertNotNull(deletedMaterial);
+        assertFalse(deletedMaterial.getProperties().isEmpty());
+
+        materialDAO.delete(deletedMaterial);
+
+        assertNull(materialDAO.tryFindMaterial(identifier));
+
+        List<EntityTypePropertyTypePE> retrievedPropertyTypes =
+                daoFactory.getEntityPropertyTypeDAO(EntityKind.MATERIAL).listEntityPropertyTypes(
+                        deletedMaterial.getEntityType());
+        for (MaterialPropertyPE property : deletedMaterial.getProperties())
+        {
+            int index = retrievedPropertyTypes.indexOf(property.getEntityTypePropertyType());
+            EntityTypePropertyTypePE retrievedPropertyType = retrievedPropertyTypes.get(index);
+            assertFalse(retrievedPropertyType.getPropertyValues().contains(property));
+        }
+    }
+
+    @Test(expectedExceptions = DataIntegrityViolationException.class)
+    public final void testFailDeleteMaterialUsedAsPropertyValue()
+    {
+        final IMaterialDAO materialDAO = daoFactory.getMaterialDAO();
+
+        String bacteriumX = "BACTERIUM-X";
+        MaterialIdentifier identifier = new MaterialIdentifier(bacteriumX, BACTERIUM);
+        final MaterialPE usedMaterial = materialDAO.tryFindMaterial(identifier);
+        assertNotNull(usedMaterial);
+
+        // Assert that BACTERIUM-X has been used as a property value
+        SamplePE sample =
+                daoFactory.getSampleDAO().tryFindByCodeAndGroup("CP-TEST-1", createGroup("CISD"));
+        assertNotNull(sample);
+        boolean bacteriumFound = false;
+        for (SamplePropertyPE property : sample.getProperties())
+        {
+            MaterialPE materialValue = property.getMaterialValue();
+            if (materialValue != null && materialValue.getCode().equals(bacteriumX)
+                    && materialValue.getMaterialType().getCode().equals(BACTERIUM))
+            {
+                bacteriumFound = true;
+            }
+        }
+        assertTrue(bacteriumFound);
+
+        materialDAO.delete(usedMaterial);
+    }
 }
\ No newline at end of file
-- 
GitLab