From ff5b3089b3466afbdc5a4db28815dc06bb29da6f Mon Sep 17 00:00:00 2001
From: jakubs <jakubs>
Date: Fri, 7 Nov 2014 16:55:46 +0000
Subject: [PATCH] SSDM-1187 fix the test for unarchiving in openbis. Minor
 improvement in unarchiving mechanism

SVN: 32762
---
 .../server/business/bo/DataSetTable.java      |  2 +-
 .../server/business/bo/DataSetTableTest.java  | 72 ++++++++++++++++++-
 2 files changed, 72 insertions(+), 2 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
index 8a79d7f7418..9214d3acb64 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
@@ -914,7 +914,7 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
                     dataSetCodes, tryGetLoggedUserId());
             result.addAll(enhancedCodes);
 
-            if (new HashSet<String>(enhancedCodes).containsAll(dataSetCodes))
+            if (false == new HashSet<String>(dataSetCodes).containsAll(enhancedCodes))
             {
                 enhancementsFound = true;
             }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java
index 54bf94d6d48..acfacc42482 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTableTest.java
@@ -699,6 +699,9 @@ public final class DataSetTableTest extends AbstractBOTest
                 {
                     prepareFindFullDatasets(allDataSets, false, true);
 
+                    preparePrepareForUnarchiving(dataStoreService2, dss2, d2Archived1, d2Archived2, d2NonArchived1, d2NonArchived2, d2NonAvailable3);
+                    preparePrepareForUnarchiving(dataStoreService3, dss3, d3Archived, d3NonArchived);
+
                     prepareUpdateDatasetStatuses(new ExternalDataPE[]
                     { d2Archived1, d2Archived2, d3Archived }, UNARCHIVE_PENDING);
 
@@ -708,11 +711,78 @@ public final class DataSetTableTest extends AbstractBOTest
             });
 
         DataSetTable dataSetTable = createDataSetTable();
-        dataSetTable.loadByDataSetCodes(Code.extractCodes(Arrays.asList(allDataSets)), false, true);
+        dataSetTable.loadByDataSetCodes(Code.extractCodes(allDataSets), false, true);
         int unarchived = dataSetTable.unarchiveDatasets();
         assertEquals(3, unarchived);
     }
 
+    @Test
+    public void testUnarchiveDataSetsWithEnhancedDataSets()
+    {
+        final ExternalDataPE d2Archived1 = createDataSet("d2a1", dss2, ARCHIVED);
+        final ExternalDataPE d2Archived2 = createDataSet("d2a2", dss2, ARCHIVED);
+        final ExternalDataPE[] argumentDataSets =
+        { d2Archived1 };
+        final ExternalDataPE[] allDataSets =
+        { d2Archived1, d2Archived2 };
+
+        context.checking(new Expectations()
+            {
+                {
+                    prepareFindFullDatasets(argumentDataSets, false, true);
+
+                    preparePrepareForUnarchivingWithEnhancedDataSets(dataStoreService2, dss2, d2Archived1, d2Archived2);
+
+                    prepareFindFullDatasets(allDataSets, false, true);
+
+                    prepareUpdateDatasetStatuses(new ExternalDataPE[]
+                    { d2Archived1, d2Archived2 }, UNARCHIVE_PENDING);
+
+                    prepareUnarchiving(dataStoreService2, dss2, d2Archived1, d2Archived2);
+                }
+            });
+
+        DataSetTable dataSetTable = createDataSetTable();
+        dataSetTable.loadByDataSetCodes(Code.extractCodes(argumentDataSets), false, true);
+        int unarchived = dataSetTable.unarchiveDatasets();
+        assertEquals(2, unarchived);
+    }
+
+    void preparePrepareForUnarchiving(final IDataStoreService service, final DataStorePE store, final ExternalDataPE... dataSets)
+    {
+        context.checking(new Expectations()
+            {
+                {
+                    List<String> codes = Code.extractCodes(dataSets);
+                    String userSessionToken = ManagerTestTool.EXAMPLE_SESSION.getSessionToken();
+                    one(service).getDataSetCodesForUnarchiving(with(equal(store.getSessionToken())),
+                            with(equal(userSessionToken)),
+                            with(equal(codes)),
+                            with(equal(ManagerTestTool.EXAMPLE_PERSON.getUserId())));
+                    will(returnValue(codes));
+                }
+            });
+    }
+
+    /**
+     * Gets only the first external data, but returns for unarchiving all of them.
+     */
+    void preparePrepareForUnarchivingWithEnhancedDataSets(final IDataStoreService service, final DataStorePE store, final ExternalDataPE... dataSets)
+    {
+        context.checking(new Expectations()
+            {
+                {
+                    List<String> codes = Code.extractCodes(dataSets);
+                    String userSessionToken = ManagerTestTool.EXAMPLE_SESSION.getSessionToken();
+                    one(service).getDataSetCodesForUnarchiving(with(equal(store.getSessionToken())),
+                            with(equal(userSessionToken)),
+                            with(equal(Collections.singletonList(codes.get(0)))),
+                            with(equal(ManagerTestTool.EXAMPLE_PERSON.getUserId())));
+                    will(returnValue(codes));
+                }
+            });
+    }
+
     @Test
     public void testArchiveStatusNotChangedOnLocalFailure()
     {
-- 
GitLab