From a7877282cb76917de971ad6e91f0d9f68da06db8 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 24 Apr 2017 11:50:04 +0000
Subject: [PATCH] SSDM-4771: Creation of link data sets and container data sets
 are allowed for SPACE_USERs. Systemtests written.

SVN: 38084
---
 .../dataset/DataSetAuthorizationExecutor.java |  6 +++
 .../asapi/v3/CreateDataSetTest.java           | 40 +++++++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java
index 05c8b8416e9..9342dc4ff9f 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/dataset/DataSetAuthorizationExecutor.java
@@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKin
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.LinkDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 
 /**
@@ -61,6 +62,11 @@ public class DataSetAuthorizationExecutor implements IDataSetAuthorizationExecut
     @DatabaseCreateOrDeleteModification(value = ObjectKind.DATA_SET)
     public void canCreate(IOperationContext context, @AuthorizationGuard(guardClass = DataPEPredicate.class) DataPE dataSet)
     {
+        if (dataSet instanceof ExternalDataPE == false)
+        {
+            return;
+        }
+        
         boolean isCreatorPersonAllowed = false;
         boolean isPersonAllowed = false;
 
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java
index 034d376539d..0bc7633ffa5 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java
@@ -78,6 +78,46 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewETPTAssignment;
  */
 public class CreateDataSetTest extends AbstractDataSetTest
 {
+    @Test
+    public void testCreateLinkDataSetWithSpaceUser()
+    {
+        String sessionToken = v3api.login(TEST_SPACE_USER, PASSWORD);
+        String code = UUID.randomUUID().toString();
+        LinkedDataCreation linkedData = new LinkedDataCreation();
+        linkedData.setExternalDmsId(new ExternalDmsPermId("DMS_1"));
+        linkedData.setExternalCode("test-"+System.currentTimeMillis());
+        DataSetCreation creation = new DataSetCreation();
+        creation.setCode(code);
+        creation.setTypeId(new EntityTypePermId("LINK_TYPE"));
+        creation.setExperimentId(new ExperimentIdentifier("/TEST-SPACE/NOE/EXP-TEST-2"));
+        creation.setDataStoreId(new DataStorePermId("STANDARD"));
+        creation.setLinkedData(linkedData);
+        creation.setCreationId(new CreationId(code));
+
+        List<DataSetPermId> dataSets = v3api.createDataSets(sessionToken, Collections.singletonList(creation));
+
+        assertEquals(dataSets.get(0).getPermId(), code.toUpperCase());
+        assertEquals(dataSets.size(), 1);
+    }
+    
+    @Test
+    public void testCreateContainerDataSetWithSpaceUser()
+    {
+        String sessionToken = v3api.login(TEST_SPACE_USER, PASSWORD);
+        String code = UUID.randomUUID().toString();
+        DataSetCreation creation = new DataSetCreation();
+        creation.setCode(code);
+        creation.setTypeId(new EntityTypePermId("CONTAINER_TYPE"));
+        creation.setExperimentId(new ExperimentIdentifier("/TEST-SPACE/NOE/EXP-TEST-2"));
+        creation.setDataStoreId(new DataStorePermId("STANDARD"));
+        creation.setCreationId(new CreationId(code));
+        
+        List<DataSetPermId> dataSets = v3api.createDataSets(sessionToken, Collections.singletonList(creation));
+        
+        assertEquals(dataSets.get(0).getPermId(), code.toUpperCase());
+        assertEquals(dataSets.size(), 1);
+    }
+    
     @Test
     public void testCreateDSWithAdminUserInBehalfOfASpaceObserver()
     {
-- 
GitLab