From 8f8f14f74614d77b7394ad645eef21b9f23edabf Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Fri, 27 May 2011 11:01:29 +0000
Subject: [PATCH] [LMS-2282] changed misleading tests of DataBO and added tests
 for the new BO rule

SVN: 21491
---
 .../generic/server/business/bo/DataBO.java    |   2 +-
 .../server/business/bo/DataBOTest.java        | 124 ++++++++++--------
 2 files changed, 68 insertions(+), 58 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
index 9c2c8824595..bb5debc0096 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
@@ -218,7 +218,7 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO
         {
             throw UserFailureException.fromTemplate(
                     "Contained data sets need to be in the same space ('%s') as the container.",
-                    containerSpace);
+                    containerSpace.getCode());
         } else
         {
             if (experiment.equals(data.getExperiment()))
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java
index 509f200754a..3ef8ec0ada9 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBOTest.java
@@ -94,9 +94,9 @@ public class DataBOTest extends AbstractBOTest
 
     private static final String DATA_STORE_CODE = "dss1";
 
-    private static final String PARENT_CODE = "parent";
+    private static final String PARENT_CODE = "parent1";
 
-    private static final String COMPONENT_CODE = "component";
+    private static final String COMPONENT_CODE = "component1";
 
     private static final Date PRODUCTION_DATE = new Date(1001);
 
@@ -401,24 +401,24 @@ public class DataBOTest extends AbstractBOTest
     }
 
     @Test
-    public void testDefineWithExistingContainerDataSet()
+    public void testDefineContainerWithExistingComponent()
     {
         final DataSetTypePE dataSetType = new DataSetTypePE();
         ExperimentPE experimentPE = createExperiment("EXP1");
         DataStorePE dataStore = new DataStorePE();
         prepareDefineData(dataSetType, dataStore);
-        final DataPE data = new DataPE();
-        data.setExperiment(experimentPE);
+        final DataPE component = new DataPE();
+        component.setExperiment(createExperiment("EXP2")); // different experiment, same space
         context.checking(new Expectations()
             {
                 {
-                    one(dataDAO).tryToFindDataSetByCode(PARENT_CODE);
-                    will(returnValue(data));
+                    one(dataDAO).tryToFindDataSetByCode(COMPONENT_CODE);
+                    will(returnValue(component));
                 }
             });
 
         IDataBO dataBO = createDataBO();
-        NewContainerDataSet newData = createContainerDataSet(PARENT_CODE);
+        NewContainerDataSet newData = createContainerDataSetWithComponents(COMPONENT_CODE);
         dataBO.define(newData, experimentPE, SourceType.MEASUREMENT);
         dataBO.setContainedDataSets(experimentPE, newData);
         DataPE loadedData = dataBO.getData();
@@ -428,38 +428,38 @@ public class DataBOTest extends AbstractBOTest
         assertSame(true, loadedData.isMeasured());
         assertSame(dataStore, loadedData.getDataStore());
         assertEquals(1, loadedData.getContainedDataSets().size());
-        assertSame(data, loadedData.getContainedDataSets().iterator().next());
+        assertSame(component, loadedData.getContainedDataSets().iterator().next());
         context.assertIsSatisfied();
     }
 
     @Test
-    public void testDefineWithNonExistingContainerDataSet()
+    public void testDefineContainerWithNonExistingComponent()
     {
         final DataSetTypePE dataSetType = new DataSetTypePE();
         final ExperimentPE experiment = createExperiment("EXP1");
         final DataStorePE dataStore = new DataStorePE();
         prepareDefineData(dataSetType, dataStore);
         final DataSetTypePE dataSetTypeUnknown = new DataSetTypePE();
-        final DataPE containerData = new DataPE();
-        containerData.setCode(PARENT_CODE);
-        containerData.setDataSetType(dataSetTypeUnknown);
-        containerData.setExperiment(experiment);
-        containerData.setPlaceholder(true);
+        final DataPE component = new DataPE();
+        component.setCode(COMPONENT_CODE);
+        component.setDataSetType(dataSetTypeUnknown);
+        component.setExperiment(experiment);
+        component.setPlaceholder(true);
         context.checking(new Expectations()
             {
                 {
-                    one(dataDAO).tryToFindDataSetByCode(PARENT_CODE);
+                    one(dataDAO).tryToFindDataSetByCode(COMPONENT_CODE);
                     will(returnValue(null));
 
                     one(dataSetTypeDAO).tryToFindDataSetTypeByCode("UNKNOWN");
                     will(returnValue(dataSetTypeUnknown));
 
-                    one(dataDAO).createDataSet(containerData);
+                    one(dataDAO).createDataSet(component);
                 }
             });
 
         IDataBO dataBO = createDataBO();
-        NewContainerDataSet newData = createContainerDataSet(PARENT_CODE);
+        NewContainerDataSet newData = createContainerDataSetWithComponents(COMPONENT_CODE);
         dataBO.define(newData, experiment, SourceType.MEASUREMENT);
         dataBO.setContainedDataSets(experiment, newData);
         DataPE data = dataBO.getData();
@@ -469,48 +469,56 @@ public class DataBOTest extends AbstractBOTest
         assertSame(true, data.isMeasured());
         assertSame(dataStore, data.getDataStore());
         assertEquals(1, data.getContainedDataSets().size());
-        assertEquals(containerData, data.getContainedDataSets().iterator().next());
+        assertEquals(component, data.getContainedDataSets().iterator().next());
         context.assertIsSatisfied();
     }
 
     @Test
-    public void testDefineWithNonExistingContainerDataSetAndNonExistingExperiment()
+    public void testDefineContainerWithComponentFromDifferentSpaceFails()
     {
-        final DataSetTypePE dataSetType = createDataSetType();
-        final DataStorePE dataStore = new DataStorePE();
+        final DataSetTypePE dataSetType = new DataSetTypePE();
+        ExperimentPE experiment1 = createExperiment("EXP1", "S1");
+        ExperimentPE experiment2 = createExperiment("EXP2", "S2");
+        DataStorePE dataStore = new DataStorePE();
         prepareDefineData(dataSetType, dataStore);
-        final DataSetTypePE dataSetTypeUnknown = new DataSetTypePE();
-        final DataPE containerData = new DataPE();
-        containerData.setCode(PARENT_CODE);
-        containerData.setDataSetType(dataSetTypeUnknown);
-        ExperimentPE experiment = createExperiment("EXP1");
-        containerData.setExperiment(experiment);
-        containerData.setPlaceholder(true);
+        final DataPE data = new DataPE();
+        data.setCode(COMPONENT_CODE);
+        data.setExperiment(createExperiment("EXP1", "S2"));
+
+        IDataBO dataBO = createDataBO();
+        NewContainerDataSet newData = createContainerDataSetWithComponents(COMPONENT_CODE);
+        dataBO.define(newData, experiment1, SourceType.MEASUREMENT);
+
+        // sanity check
+        try
+        {
+            dataBO.setContainedDataSets(experiment2, newData);
+            fail("Expected UserFailureException");
+        } catch (UserFailureException ex)
+        {
+            assertEquals(
+                    "Contained data sets need to be in the same space ('S1') as the container.",
+                    ex.getMessage());
+        }
+
+        // existing data set from different space
         context.checking(new Expectations()
             {
                 {
-                    one(dataDAO).tryToFindDataSetByCode(PARENT_CODE);
-                    will(returnValue(null));
-
-                    one(dataSetTypeDAO).tryToFindDataSetTypeByCode(
-                            DataSetTypeCode.UNKNOWN.getCode());
-                    will(returnValue(dataSetTypeUnknown));
-
-                    one(dataDAO).createDataSet(containerData);
+                    one(dataDAO).tryToFindDataSetByCode(COMPONENT_CODE);
+                    will(returnValue(data));
                 }
             });
+        try
+        {
+            dataBO.setContainedDataSets(experiment1, newData);
+            fail("Expected UserFailureException");
+        } catch (UserFailureException ex)
+        {
+            assertEquals("Data set's '" + COMPONENT_CODE + "' space ('S2') needs to be the same"
+                    + " as its container's 'DS1' space ('S1').", ex.getMessage());
+        }
 
-        IDataBO dataBO = createDataBO();
-        NewContainerDataSet newData = createContainerDataSet(PARENT_CODE);
-        dataBO.define(newData, experiment, SourceType.MEASUREMENT);
-        dataBO.setContainedDataSets(experiment, newData);
-        DataPE data = dataBO.getData();
-
-        assertSame(null, data.tryGetSample());
-        assertSame(true, data.isMeasured());
-        assertSame(dataStore, data.getDataStore());
-        assertEquals(1, data.getContainedDataSets().size());
-        assertEquals(containerData, data.getContainedDataSets().iterator().next());
         context.assertIsSatisfied();
     }
 
@@ -902,17 +910,22 @@ public class DataBOTest extends AbstractBOTest
     }
 
     private ExperimentPE createExperiment(String experimentCode)
+    {
+        return createExperiment(experimentCode, "S");
+    }
+
+    private ExperimentPE createExperiment(String experimentCode, String spaceCode)
     {
         ExperimentPE experiment = new ExperimentPE();
         experiment.setCode(experimentCode);
         ProjectPE project = new ProjectPE();
         project.setCode("P");
-        SpacePE group = new SpacePE();
-        group.setCode("G");
+        SpacePE space = new SpacePE();
+        space.setCode(spaceCode);
         DatabaseInstancePE databaseInstance = new DatabaseInstancePE();
         databaseInstance.setCode("DB");
-        group.setDatabaseInstance(databaseInstance);
-        project.setSpace(group);
+        space.setDatabaseInstance(databaseInstance);
+        project.setSpace(space);
         experiment.setProject(project);
         return experiment;
     }
@@ -976,14 +989,11 @@ public class DataBOTest extends AbstractBOTest
         return data;
     }
 
-    private NewContainerDataSet createContainerDataSet(String containedDataSetCodeOrNull)
+    private NewContainerDataSet createContainerDataSetWithComponents(String... components)
     {
         NewContainerDataSet data = new NewContainerDataSet();
         data.setCode(DATA_SET_CODE);
-        if (containedDataSetCodeOrNull != null)
-        {
-            data.setContainedDataSetCodes(Collections.singletonList(containedDataSetCodeOrNull));
-        }
+        data.setContainedDataSetCodes(Arrays.asList(components));
         data.setDataProducerCode(DATA_PRODUCER_CODE);
         data.setProductionDate(PRODUCTION_DATE);
         data.setComplete(BooleanOrUnknown.U);
-- 
GitLab