From f7b80fc002c227070fbce75dca377d077485b106 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 29 Apr 2015 12:55:32 +0000
Subject: [PATCH] SSDM-1804: tests fixed. Tiny improvements in TrashBO.

SVN: 33923
---
 .../generic/server/business/bo/TrashBO.java   |  26 +++--
 .../systemtest/api/v3/EntityDeletionTest.java | 100 ++++++++++++++++++
 .../generic/server/CommonServerTest.java      |   2 -
 .../server/business/bo/TrashBOTest.java       |  31 ++++++
 .../server/business/bo/entitygraph/Utils.java |  12 +++
 .../systemtest/EntityDeletionTest.java        |  14 +++
 6 files changed, 173 insertions(+), 12 deletions(-)
 create mode 100644 openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/EntityDeletionTest.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java
index c7147e20c61..aa8cf903755 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java
@@ -177,8 +177,6 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO
         TrashOperationsManager trashManager = new TrashOperationsManager(session, deletion, this);
         Set<TechId> allSampleIds 
                 = trashSamples(trashManager, sampleIds, CascadeSampleDependentComponents.TRUE, true);
-        Set<TechId> dependentSampleIds = new HashSet<TechId>(allSampleIds);
-        dependentSampleIds.removeAll(sampleIds);
         Set<TechId> experimentsOfSamples = getExperimentsOfSamples(sampleIds);
         trashSampleDependentDataSets(trashManager, experimentsOfSamples, allSampleIds);
         trashManager.trash();
@@ -523,7 +521,7 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO
             {
                 entityIdsByKind.get(entityKind).addAll(entityIds);
                 IDeletionDAO deletionDAO = daoFactory.getDeletionDAO();
-                operations.add(new TrashBatchOperation(entityKind, entityIds, deletion, deletionDAO, isOriginalDeletion));
+                operations.add(0, new TrashBatchOperation(entityKind, entityIds, deletion, deletionDAO, isOriginalDeletion));
             }
         }
         
@@ -541,23 +539,31 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO
         private void updateModificationDateAndModifierOfRelatedProjectsOfExperiments()
         {
             List<Long> ids = TechId.asLongs(entityIdsByKind.get(EntityKind.EXPERIMENT));
-            List<ExperimentPE> experiments = daoFactory.getExperimentDAO().listByIDs(ids);
-            RelationshipUtils.updateModificationDateAndModifierOfRelatedProjectsOfExperiments(experiments, session);
+            if (ids.isEmpty() == false)
+            {
+                List<ExperimentPE> experiments = daoFactory.getExperimentDAO().listByIDs(ids);
+                RelationshipUtils.updateModificationDateAndModifierOfRelatedProjectsOfExperiments(experiments, session);
+            }
         }
         
         private void updateModificationDateAndModifierOfRelatedEntitiesOfSamples()
         {
             List<Long> ids = TechId.asLongs(entityIdsByKind.get(EntityKind.SAMPLE));
-            List<SamplePE> samples = daoFactory.getSampleDAO().listByIDs(ids);
-            RelationshipUtils.updateModificationDateAndModifierOfRelatedEntitiesOfSamples(samples, session);
+            if (ids.isEmpty() == false)
+            {
+                List<SamplePE> samples = daoFactory.getSampleDAO().listByIDs(ids);
+                RelationshipUtils.updateModificationDateAndModifierOfRelatedEntitiesOfSamples(samples, session);
+            }
         }
         
         private void updateModificationDateAndModifierOfRelatedEntitiesOfDataSets()
         {
             List<Long> ids = TechId.asLongs(entityIdsByKind.get(EntityKind.DATA_SET));
-            List<DataPE> dataSets = daoFactory.getDataDAO().listByIDs(ids);
-            RelationshipUtils.updateModificationDateAndModifierOfRelatedEntitiesOfDataSets(dataSets, session);
-
+            if (ids.isEmpty() == false)
+            {
+                List<DataPE> dataSets = daoFactory.getDataDAO().listByIDs(ids);
+                RelationshipUtils.updateModificationDateAndModifierOfRelatedEntitiesOfDataSets(dataSets, session);
+            }
         }
     }
 
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/EntityDeletionTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/EntityDeletionTest.java
new file mode 100644
index 00000000000..49165fb055b
--- /dev/null
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/EntityDeletionTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2015 ETH Zuerich, SIS
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.ethz.sis.openbis.systemtest.api.v3;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.testng.annotations.Test;
+
+import ch.ethz.sis.openbis.generic.shared.api.v3.IApplicationServerApi;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.dataset.DataSetDeletionOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.experiment.ExperimentDeletionOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.sample.SampleDeletionOptions;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.DataSetPermId;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.experiment.ExperimentIdentifier;
+import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.sample.SamplePermId;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.EntityNode;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.SampleNode;
+
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+@Test(groups = { "system-cleandb" })
+public class EntityDeletionTest extends ch.systemsx.cisd.openbis.systemtest.EntityDeletionTest
+{
+
+    private static final String CONTEXT_DESCRIPTION = " (Context: [])";
+    @Autowired
+    protected IApplicationServerApi v3api;
+
+    @Override
+    protected String createExpectedErrorMessage(SampleNode relatedSample, EntityNode outsiderNode)
+    {
+        return super.createExpectedErrorMessage(relatedSample, outsiderNode) + CONTEXT_DESCRIPTION;
+    }
+
+    @Override
+    protected String createExpectedErrorMessage(EntityNode originalNode, EntityNode relatedEntity, EntityNode outsiderNode)
+    {
+        return super.createExpectedErrorMessage(originalNode, relatedEntity, outsiderNode) + CONTEXT_DESCRIPTION;
+    }
+
+    @Override
+    protected void deleteExperiments(List<String> experimentIdentifiers, String userSessionToken)
+    {
+        List<ExperimentIdentifier> experimentIds = new ArrayList<ExperimentIdentifier>();
+        for (String identifier : experimentIdentifiers)
+        {
+            experimentIds.add(new ExperimentIdentifier(identifier));
+        }
+        ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions();
+        deletionOptions.setReason("test");
+        v3api.deleteExperiments(userSessionToken, experimentIds, deletionOptions);
+    }
+
+    @Override
+    protected void deleteSamples(List<String> samplePermIds, String userSessionToken)
+    {
+        List<SamplePermId> sampleIds = new ArrayList<SamplePermId>();
+        for (String permId : samplePermIds)
+        {
+            sampleIds.add(new SamplePermId(permId));
+        }
+        SampleDeletionOptions deletionOptions = new SampleDeletionOptions();
+        deletionOptions.setReason("test");
+        v3api.deleteSamples(userSessionToken, sampleIds, deletionOptions);
+    }
+
+    @Override
+    protected void deleteDataSets(List<String> dataSetCodes, String userSessionToken)
+    {
+        List<DataSetPermId> dataSetIds = new ArrayList<DataSetPermId>();
+        for (String code : dataSetCodes)
+        {
+            dataSetIds.add(new DataSetPermId(code));
+        }
+        DataSetDeletionOptions deletionOptions = new DataSetDeletionOptions();
+        deletionOptions.setReason("test");
+        v3api.deleteDataSets(userSessionToken, dataSetIds, deletionOptions);
+    }
+
+}
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
index 0908f919513..b98cc4bec33 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
@@ -1813,8 +1813,6 @@ public final class CommonServerTest extends AbstractServerTestCase
                     one(trashBO).createDeletion(reason);
                     one(trashBO).trashDataSets(TechId.createList(dataSets));
 
-                    one(dataSetDAO).listByCode(new HashSet<String>(dataSetCodes));
-                    will(returnValue(Arrays.asList()));
                 }
             });
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java
index d53831d6009..89ef529b388 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java
@@ -41,6 +41,7 @@ import ch.systemsx.cisd.common.test.RecordingMatcher;
 import ch.systemsx.cisd.openbis.generic.server.business.ManagerTestTool;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.DataSetNode;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.EntityGraphGenerator;
+import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.ExperimentNode;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.SampleNode;
 import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.Utils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
@@ -51,6 +52,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListOrSearchSampleCrite
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.RelationshipTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE;
@@ -234,6 +236,7 @@ public final class TrashBOTest extends AbstractBOTest
     private void prepareEntityGraph(EntityGraphGenerator g)
     {
         g.assertConsistency();
+        prepareListExperimentsByIds(g);
         prepareListSampleIdsByExperimentIds(g);
         prepareListDataSetIdsByExperimentIds(g);
         prepareListDataSetIdsBySampleIds(g);
@@ -470,6 +473,34 @@ public final class TrashBOTest extends AbstractBOTest
             });
     }
     
+    private void prepareListExperimentsByIds(final EntityGraphGenerator g)
+    {
+        final AbstractMockHandler<Collection<Long>> handler = new AbstractMockHandler<Collection<Long>>()
+                {
+            @Override
+            public Object invoke(Invocation invocation) throws Throwable
+            {
+                List<ExperimentPE> experiments = new ArrayList<ExperimentPE>();
+                Map<Long, ExperimentNode> experimentNodes = g.getExperiments();
+                for (Long id : argument)
+                {
+                    ExperimentNode experimentNode = experimentNodes.get(id);
+                    experiments.add(Utils.createExperimentPE(experimentNode));
+                }
+                print("listByExperimentIds(" + argument + ") = " + experiments);
+                return experiments;
+            }
+                };
+                context.checking(new Expectations()
+                {
+                    {
+                        allowing(experimentDAO).listByIDs(with(handler));
+                        will(handler);
+                    }
+                });
+
+    }
+    
     private void prepareListByDataSetIds(final EntityGraphGenerator g)
     {
         final AbstractMockHandler<Collection<Long>> handler = new AbstractMockHandler<Collection<Long>>()
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/entitygraph/Utils.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/entitygraph/Utils.java
index 96ffb40d88f..461510f48bc 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/entitygraph/Utils.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/entitygraph/Utils.java
@@ -133,6 +133,18 @@ public class Utils
         return experiment;
     }
     
+    public static ExperimentPE createExperimentPE(ExperimentNode experimentNode)
+    {
+        if (experimentNode == null)
+        {
+            return null;
+        }
+        ExperimentPE experiment = new ExperimentPE();
+        experiment.setId(experimentNode.getId());
+        experiment.setCode(experimentNode.getCode());
+        return experiment;
+    }
+    
     static final void appendTo(StringBuilder builder, String label, List<? extends EntityNode> entityNodes)
     {
         if (entityNodes.isEmpty())
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityDeletionTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityDeletionTest.java
index 49f1aa67278..5d308f4b0e6 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityDeletionTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityDeletionTest.java
@@ -309,6 +309,20 @@ public class EntityDeletionTest extends BaseTest
         assertUnmodifiedAndUndeleted(g);
     }
     
+    @Test
+    public final void testTrashSampleWithAnExperimentSample()
+    {
+        EntityGraphGenerator g = parseAndCreateGraph("E1, samples: S2\n"
+                + "S1, components: S2\n");
+        
+        deleteSamples(g.s(1));
+        
+        assertEquals("", renderGraph(g));
+        assertDeleted(g.s(1), g.s(2));
+        assertModified(g.e(1));
+        assertUnmodifiedAndUndeleted(g);
+    }
+    
     @Test
     public final void testTrashSampleWithAnExperimentSampleWithADataSet()
     {
-- 
GitLab