From 427a3c51c8419fd6fbe2065d149b6381cc2a737d Mon Sep 17 00:00:00 2001
From: pkupczyk <pkupczyk>
Date: Sat, 2 Sep 2017 09:33:33 +0000
Subject: [PATCH] SSDM-5619 : Project Authorization - modify @RolesAllowed
 annotations at data set related methods

SVN: 38694
---
 .../predicate/NewSamplePredicateTest.java     | 15 +++++
 .../openbis/systemtest/CommonServerTest.java  | 56 ++++++++++---------
 .../systemtest/EntityOperationTest.java       |  2 +-
 ...GeneralInformationChangingServiceTest.java | 15 +++--
 4 files changed, 57 insertions(+), 31 deletions(-)

diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewSamplePredicateTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewSamplePredicateTest.java
index 7668b71de2f..a71cb39e6f9 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewSamplePredicateTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/NewSamplePredicateTest.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server.authorization.predicate;
 import java.util.Arrays;
 import java.util.List;
 
+import org.jmock.Expectations;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.common.exceptions.Status;
@@ -107,6 +108,20 @@ public class NewSamplePredicateTest extends AuthorizationTestCase
         prepareProvider(groups);
         predicate.init(provider);
 
+        SpacePE space = new SpacePE();
+        space.setCode(ANOTHER_SPACE_CODE);
+
+        context.checking(new Expectations()
+            {
+                {
+                    one(provider).tryGetSpace(ANOTHER_SPACE_CODE);
+                    will(returnValue(space));
+
+                    one(provider).tryGetSampleBySpaceAndCode(space, "S1");
+                    will(returnValue(null));
+                }
+            });
+
         Status status = predicate.evaluate(createPerson(), createRoles(false), sample);
 
         assertEquals(true, status.isError());
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/CommonServerTest.java
index d7a54ab1fbd..c0e525b47f3 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/CommonServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/CommonServerTest.java
@@ -34,6 +34,7 @@ import javax.sql.DataSource;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
 import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.testng.annotations.Test;
@@ -43,6 +44,7 @@ import ch.systemsx.cisd.common.exceptions.AuthorizationFailureException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicEntityInformationHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
@@ -73,8 +75,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentUpdateResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MetaprojectAssignmentsIds;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAuthorizationGroup;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
@@ -87,14 +87,16 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleParentWithDerived
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleUpdateResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SearchCriteriaConnection;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.id.dataset.DataSetCodeId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.id.experiment.ExperimentIdentifierId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.id.metaproject.MetaprojectIdentifierId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.id.sample.SampleIdentifierId;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUpdatesDTO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUploadContext;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentUpdatesDTO;
+import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectUpdatesDTO;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleUpdatesDTO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
@@ -110,6 +112,9 @@ import junit.framework.Assert;
 public class CommonServerTest extends SystemTestCase
 {
 
+    @Autowired
+    private IDAOFactory daoFactory;
+
     private Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, getClass());
 
     @Test
@@ -1133,27 +1138,26 @@ public class CommonServerTest extends SystemTestCase
     {
         SessionContextDTO session = commonServer.tryAuthenticate(user.getUserId(), PASSWORD);
 
-        Metaproject metaproject = new Metaproject();
+        PersonPE person = daoFactory.getPersonDAO().tryFindPersonByUserId(user.getUserId());
+        MetaprojectPE metaproject = new MetaprojectPE();
         metaproject.setName("TEST_LIST_METAPROJECT_EXPERIMENTS");
-        metaproject = commonServer.registerMetaproject(session.getSessionToken(), metaproject);
+        metaproject.setOwner(person);
+
+        ExperimentPE experiment = daoFactory.getExperimentDAO().tryGetByTechId(new TechId(23L));
+        experiment.addMetaproject(metaproject);
 
-        MetaprojectAssignmentsIds assignments = new MetaprojectAssignmentsIds();
-        assignments.addExperiment(new ExperimentIdentifierId("/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST"));
+        daoFactory.getMetaprojectDAO().createOrUpdateMetaproject(metaproject, person);
 
-        commonServer.addToMetaproject(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()), assignments);
+        List<Experiment> experiments =
+                commonServer.listMetaprojectExperiments(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
 
         if (user.isInstanceUserOrTestSpaceUserOrEnabledTestProjectUser())
         {
-            List<Experiment> experiments =
-                    commonServer.listMetaprojectExperiments(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
-
             assertEquals(experiments.size(), 1);
             assertEquals(experiments.get(0).isStub(), false);
             assertEquals(experiments.get(0).getIdentifier(), "/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST");
         } else
         {
-            List<Experiment> experiments =
-                    commonServer.listMetaprojectExperiments(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
             assertEquals(experiments.size(), 1);
             assertEquals(experiments.get(0).isStub(), true);
         }
@@ -1164,14 +1168,15 @@ public class CommonServerTest extends SystemTestCase
     {
         SessionContextDTO session = commonServer.tryAuthenticate(user.getUserId(), PASSWORD);
 
-        Metaproject metaproject = new Metaproject();
+        PersonPE person = daoFactory.getPersonDAO().tryFindPersonByUserId(user.getUserId());
+        MetaprojectPE metaproject = new MetaprojectPE();
         metaproject.setName("TEST_LIST_METAPROJECT_SAMPLES");
-        metaproject = commonServer.registerMetaproject(session.getSessionToken(), metaproject);
+        metaproject.setOwner(person);
 
-        MetaprojectAssignmentsIds assignments = new MetaprojectAssignmentsIds();
-        assignments.addSample(new SampleIdentifierId("/TEST-SPACE/EV-TEST"));
+        SamplePE sample = daoFactory.getSampleDAO().tryGetByTechId(new TechId(1055L)); // /TEST-SPACE/EV-TEST
+        sample.addMetaproject(metaproject);
 
-        commonServer.addToMetaproject(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()), assignments);
+        daoFactory.getMetaprojectDAO().createOrUpdateMetaproject(metaproject, person);
 
         List<Sample> samples =
                 commonServer.listMetaprojectSamples(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
@@ -1193,14 +1198,15 @@ public class CommonServerTest extends SystemTestCase
     {
         SessionContextDTO session = commonServer.tryAuthenticate(user.getUserId(), PASSWORD);
 
-        Metaproject metaproject = new Metaproject();
+        PersonPE person = daoFactory.getPersonDAO().tryFindPersonByUserId(user.getUserId());
+        MetaprojectPE metaproject = new MetaprojectPE();
         metaproject.setName("TEST_LIST_METAPROJECT_DATASETS");
-        metaproject = commonServer.registerMetaproject(session.getSessionToken(), metaproject);
+        metaproject.setOwner(person);
 
-        MetaprojectAssignmentsIds assignments = new MetaprojectAssignmentsIds();
-        assignments.addDataSet(new DataSetCodeId("20120628092259000-41"));
+        DataPE dataSet = daoFactory.getDataDAO().tryToFindDataSetByCode("20120628092259000-41");
+        dataSet.addMetaproject(metaproject);
 
-        commonServer.addToMetaproject(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()), assignments);
+        daoFactory.getMetaprojectDAO().createOrUpdateMetaproject(metaproject, person);
 
         List<AbstractExternalData> dataSets =
                 commonServer.listMetaprojectExternalData(session.getSessionToken(), new MetaprojectIdentifierId(metaproject.getIdentifier()));
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java
index 4dfbf138922..86f16f4b4f7 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityOperationTest.java
@@ -766,7 +766,7 @@ public class EntityOperationTest extends SystemTestCase
                         .getDataSet()).create();
 
         performFailingEntityOperations(sessionToken, eo, "Authorization failure: ERROR: \"None of method roles "
-                + "'[SPACE_USER, SPACE_POWER_USER, SPACE_ADMIN, INSTANCE_ADMIN, SPACE_ETL_SERVER, INSTANCE_ETL_SERVER]' "
+                + "'[PROJECT_USER, PROJECT_POWER_USER, PROJECT_ADMIN, SPACE_ADMIN, INSTANCE_ADMIN, SPACE_POWER_USER, SPACE_USER, SPACE_ETL_SERVER, INSTANCE_ETL_SERVER]' "
                 + "could be found in roles of user 'EO_OBSERVER'.\".");
     }
     
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationChangingServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationChangingServiceTest.java
index d5de1ccb7fd..4895a5d732a 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationChangingServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationChangingServiceTest.java
@@ -34,9 +34,9 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.common.exceptions.AuthorizationFailureException;
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.test.AssertionUtil;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.OpenBISHibernateTransactionManager;
 import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationChangingService;
@@ -692,8 +692,13 @@ public class GeneralInformationChangingServiceTest extends SystemTestCase
         {
             generalInformationChangingService.deleteDataSets(session, Arrays.asList(dataSetCode), reason, DeletionType.TRASH);
 
-            dataSets = generalInformationService.getDataSetMetaData(adminSession, Arrays.asList(dataSetCode));
-            assertEquals(0, dataSets.size());
+            try
+            {
+                dataSets = generalInformationService.getDataSetMetaData(adminSession, Arrays.asList(dataSetCode));
+            } catch (UserFailureException e)
+            {
+                assertEquals("Unknown data set " + dataSetCode, e.getMessage());
+            }
         } else
         {
             try
@@ -806,7 +811,7 @@ public class GeneralInformationChangingServiceTest extends SystemTestCase
             {
                 generalInformationChangingService.registerSamples(session.getSessionID(), sampleType, SESSION_KEY, null);
                 fail();
-            } catch (UserFailureException e)
+            } catch (ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException e)
             {
                 AssertionUtil.assertMatches(".*does not have enough privileges.*", e.getMessage());
             }
@@ -833,7 +838,7 @@ public class GeneralInformationChangingServiceTest extends SystemTestCase
             {
                 generalInformationChangingService.updateSamples(session.getSessionID(), sampleType, SESSION_KEY, null);
                 fail();
-            } catch (UserFailureException e)
+            } catch (ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException e)
             {
                 AssertionUtil.assertMatches(".*does not have enough privileges.*", e.getMessage());
             }
-- 
GitLab