From c22c764d08265937c3256e3dedf14b22e1737a8d Mon Sep 17 00:00:00 2001
From: kaloyane <kaloyane>
Date: Mon, 30 May 2011 16:19:56 +0000
Subject: [PATCH] [LMS-2285] added unit test

SVN: 21512
---
 .../api/v1/impl/DataSetUpdatable.java         |  5 ++
 .../JythonTopLevelDataSetRegistratorTest.java | 88 +++++++++++++++++++
 .../transaction-with-dataset-update.py        | 15 ++++
 3 files changed, 108 insertions(+)
 create mode 100644 datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/transaction-with-dataset-update.py

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java
index a4eaa09b699..5a665bdf963 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetUpdatable.java
@@ -24,6 +24,7 @@ import ch.systemsx.cisd.etlserver.registrator.api.v1.IExperimentImmutable;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.ISampleImmutable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.util.EntityHelper;
 
 /**
@@ -37,6 +38,10 @@ public class DataSetUpdatable extends DataSetImmutable implements IDataSetUpdata
     public DataSetUpdatable(ExternalData dataSet)
     {
         super(dataSet);
+        if (dataSet.getProperties() == null)
+        {
+            dataSet.setDataSetProperties(new ArrayList<IEntityProperty>());
+        }
     }
 
     public void setExperiment(IExperimentImmutable experiment)
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java
index 7196edafb2b..c686923c74a 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetRegistratorTest.java
@@ -62,14 +62,18 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.AtomicEntityOperationDetails;
 import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DatasetLocationUtil;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.ExperimentBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.PropertyBuilder;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationResult;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUpdatesDTO;
 import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
 import ch.systemsx.cisd.openbis.generic.shared.dto.StorageFormat;
@@ -85,6 +89,8 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractFileSystemTest
 
     private static final String DATA_SET_CODE = "data-set-code";
 
+    private static final String CONTAINER_DATA_SET_CODE = "container-data-set-code";
+
     private static final String DATABASE_INSTANCE_UUID = "db-uuid";
 
     private static final DataSetType DATA_SET_TYPE = new DataSetType("O1");
@@ -527,6 +533,88 @@ public class JythonTopLevelDataSetRegistratorTest extends AbstractFileSystemTest
         context.assertIsSatisfied();
     }
 
+    // TODO KE: make me work !
+    @Test
+    public void testTransactionWithDataSetUpdate()
+    {
+        setUpHomeDataBaseExpectations();
+        Properties properties =
+                createThreadProperties(SCRIPTS_FOLDER + "transaction-with-dataset-update.py");
+        final File stagingDir = new File(workingDirectory, "staging");
+        properties.setProperty(DataSetRegistrationService.STAGING_DIR, stagingDir.getPath());
+        createHandler(properties, false, true);
+        createData();
+
+        ExperimentBuilder builder = new ExperimentBuilder().identifier(EXPERIMENT_IDENTIFIER);
+        final Experiment experiment = builder.getExperiment();
+
+        final ContainerDataSet containerDataSet = new ContainerDataSet();
+        containerDataSet.setId(1L);
+
+        final RecordingMatcher<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails> atomicOperationDetails =
+                new RecordingMatcher<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails>();
+        context.checking(new Expectations()
+            {
+                {
+                    one(openBisService).createDataSetCode();
+                    will(returnValue(DATA_SET_CODE));
+
+                    exactly(2).of(openBisService).tryToGetExperiment(
+                            new ExperimentIdentifierFactory(experiment.getIdentifier())
+                                    .createIdentifier());
+                    will(returnValue(experiment));
+
+                    one(openBisService).tryGetDataSet(CONTAINER_DATA_SET_CODE);
+                    will(returnValue(containerDataSet));
+
+                    one(dataSetValidator).assertValidDataSet(DATA_SET_TYPE,
+                            new File(new File(stagingDir, DATA_SET_CODE), "data_set"));
+
+                    one(openBisService).performEntityOperations(with(atomicOperationDetails));
+                    will(returnValue(new AtomicEntityOperationResult()));
+                }
+            });
+
+        handler.handle(markerFile);
+
+        assertEquals(1, MockStorageProcessor.instance.incomingDirs.size());
+        ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails operations =
+                atomicOperationDetails.recordedObject();
+
+        assertEquals(1, operations.getDataSetRegistrations().size());
+        assertEquals(0, operations.getExperimentUpdates().size());
+        assertEquals(0, operations.getSampleUpdates().size());
+        assertEquals(0, operations.getSampleRegistrations().size());
+        assertEquals(0, operations.getExperimentRegistrations().size());
+        assertEquals(1, operations.getDataSetUpdates().size());
+
+        NewExternalData dataSet = operations.getDataSetRegistrations().get(0);
+        assertEquals(DATA_SET_CODE, dataSet.getCode());
+        assertEquals(DATA_SET_TYPE, dataSet.getDataSetType());
+
+        DataSetUpdatesDTO dataSetUpdate = operations.getDataSetUpdates().get(0);
+        assertEquals(Arrays.asList(DATA_SET_CODE),
+                Arrays.asList(dataSetUpdate.getModifiedContainedDatasetCodesOrNull()));
+
+        EntityProperty propertyChanged =
+                new PropertyBuilder("newProp").value("newValue").getProperty();
+        assertEquals(Arrays.asList(propertyChanged).toString(), dataSetUpdate.getProperties()
+                .toString());
+
+        File datasetLocation =
+                DatasetLocationUtil.getDatasetLocationPath(workingDirectory, DATA_SET_CODE,
+                        ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID,
+                        DATABASE_INSTANCE_UUID);
+        assertEquals(FileUtilities.getRelativeFilePath(new File(workingDirectory,
+                ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID),
+                datasetLocation),
+
+        dataSet.getLocation());
+        assertEquals(1, MockStorageProcessor.instance.calledCommitCount);
+        assertEquals(datasetLocation, MockStorageProcessor.instance.rootDirs.get(0));
+        context.assertIsSatisfied();
+    }
+
     @Test
     public void testScriptDies()
     {
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/transaction-with-dataset-update.py b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/transaction-with-dataset-update.py
new file mode 100644
index 00000000000..08212defd1b
--- /dev/null
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/transaction-with-dataset-update.py
@@ -0,0 +1,15 @@
+transaction = service.transaction(incoming, factory)
+dataSet = transaction.createNewDataSet()
+dataSet.setPropertyValue('dataSetProp', 'dataSetPropValue')
+dataSet.setDataSetType('O1')
+
+experiment = transaction.getExperiment('/SPACE/PROJECT/EXP')
+dataSet.setExperiment(experiment)
+transaction.moveFile(incoming.getPath(), dataSet)
+
+container = transaction.getDataSetForUpdate("container-data-set-code")
+newContents = list(container.containedDataSetCodes)
+newContents.append(dataSet.dataSetCode)
+container.setContainedDataSetCodes(newContents)
+container.setPropertyValue("newProp", "newValue")
+
-- 
GitLab