From 4a63208047becd6e78f143273e76b763b3a02f57 Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Tue, 8 May 2012 14:42:30 +0000 Subject: [PATCH] SP-22 / BIS-1: Allow changing connections on dataset in the dataset bulk update function - JUNIT SVN: 25221 --- .../basic/dto/DataSetBatchUpdateDetails.java | 4 +- .../db/AbstractDAOWithoutContextTest.java | 23 ++ .../dataaccess/db/ExperimentDAOTest.java | 10 +- .../server/GenericServerDatabaseTest.java | 217 ++++++++++++++++++ 4 files changed, 248 insertions(+), 6 deletions(-) create mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerDatabaseTest.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetBatchUpdateDetails.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetBatchUpdateDetails.java index 31702f7fbff..908ebec9a5b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetBatchUpdateDetails.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DataSetBatchUpdateDetails.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto; import java.io.Serializable; +import java.util.Collections; import java.util.Set; /** @@ -38,7 +39,8 @@ public class DataSetBatchUpdateDetails implements Serializable private boolean fileFormatUpdateRequested; - private Set<String> propertiesToUpdate; // codes of properties to update + private Set<String> propertiesToUpdate = Collections.emptySet(); // codes of properties to + // update public DataSetBatchUpdateDetails() { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java index af101d70d87..9309ee71400 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAOWithoutContextTest.java @@ -40,6 +40,8 @@ import org.testng.annotations.BeforeMethod; import ch.rinn.restrictions.Friend; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataDAO; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExperimentDAO; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO; import ch.systemsx.cisd.openbis.generic.server.util.TestInitializer; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityPropertiesHolder; @@ -60,6 +62,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE; import ch.systemsx.cisd.openbis.generic.shared.dto.TableNames; @@ -280,6 +283,26 @@ public abstract class AbstractDAOWithoutContextTest extends return externalData; } + protected SamplePE findSample(String permId) + { + final ISampleDAO sampleDAO = daoFactory.getSampleDAO(); + SamplePE sample = sampleDAO.tryToFindByPermID(permId); + + assertNotNull(sample); + + return sample; + } + + protected ExperimentPE findExperiment(String permId) + { + final IExperimentDAO experimentDAO = daoFactory.getExperimentDAO(); + ExperimentPE experiment = experimentDAO.tryGetByPermID(permId); + + assertNotNull(experiment); + + return experiment; + } + protected ProjectPE findProject(String db, String group, String project) { return daoFactory.getProjectDAO().tryFindProject(db, group, project); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java index cc4d37ce4a2..d9ef2472f81 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java @@ -237,7 +237,7 @@ public class ExperimentDAOTest extends AbstractDAOTest assertEquals(1, experiment.getDataSets().size()); } - private final ExperimentPE findExperiment(String identifier) + private final ExperimentPE findExperimentByIdentifier(String identifier) { final IExperimentDAO experimentDAO = daoFactory.getExperimentDAO(); List<ExperimentPE> experiments = experimentDAO.listExperiments(); @@ -251,7 +251,7 @@ public class ExperimentDAOTest extends AbstractDAOTest public final void testDeleteWithProperties() { final IExperimentDAO experimentDAO = daoFactory.getExperimentDAO(); - final ExperimentPE deletedExperiment = findExperiment("/CISD/DEFAULT/EXP-Y"); + final ExperimentPE deletedExperiment = findExperimentByIdentifier("/CISD/DEFAULT/EXP-Y"); // Deleted experiment should have all collections which prevent it from deletion empty. assertTrue(deletedExperiment.getDataSets().isEmpty()); @@ -277,7 +277,7 @@ public class ExperimentDAOTest extends AbstractDAOTest public final void testDeleteWithAttachments() { final IExperimentDAO experimentDAO = daoFactory.getExperimentDAO(); - final ExperimentPE deletedExperiment = findExperiment("/CISD/DEFAULT/EXP-Y"); + final ExperimentPE deletedExperiment = findExperimentByIdentifier("/CISD/DEFAULT/EXP-Y"); // Deleted experiment should have attachments which prevent it from deletion. // Other connections which also prevent experiment deletion should be empty in this test. @@ -324,7 +324,7 @@ public class ExperimentDAOTest extends AbstractDAOTest createExperiment("CISD", "CISD", "DEFAULT", "EXP-13", "SIRNA_HCS"); daoFactory.getExperimentDAO().createOrUpdateExperiment(experiment); - final ExperimentPE deletedExperiment = findExperiment("/CISD/DEFAULT/EXP-13"); + final ExperimentPE deletedExperiment = findExperimentByIdentifier("/CISD/DEFAULT/EXP-13"); final ExternalDataPE dataSet = findExternalData("20110805092359990-17"); dataSet.setExperiment(deletedExperiment); daoFactory.getDataDAO().validateAndSaveUpdatedEntity(dataSet); @@ -341,7 +341,7 @@ public class ExperimentDAOTest extends AbstractDAOTest public final void testDeleteFailWithSamples() { final IExperimentDAO experimentDAO = daoFactory.getExperimentDAO(); - final ExperimentPE deletedExperiment = findExperiment("/CISD/NEMO/EXP10"); + final ExperimentPE deletedExperiment = findExperimentByIdentifier("/CISD/NEMO/EXP10"); // Deleted experiment should have samples which prevent it from deletion. // Other connections which also prevent sample deletion should be empty in this test. diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerDatabaseTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerDatabaseTest.java new file mode 100644 index 00000000000..8572394e88a --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerDatabaseTest.java @@ -0,0 +1,217 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.plugin.generic.server; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Resource; + +import junit.framework.Assert; + +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.AbstractDAOTest; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetBatchUpdateDetails; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewDataSet; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewDataSetsWithTypes; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.UpdatedDataSet; +import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO; +import ch.systemsx.cisd.openbis.plugin.generic.shared.IGenericServer; +import ch.systemsx.cisd.openbis.plugin.generic.shared.ResourceNames; + +/** + * @author pkupczyk + */ +public class GenericServerDatabaseTest extends AbstractDAOTest +{ + private static final String REUSE_EXPERIMENT_PERMID = "200811050940555-1032"; + + private static final String WELLS_EXPERIMENT_PERMID = "200811050937246-1036"; + + private static final String TEST_EXPERIMENT_PERMID = "200902091255058-1035"; + + private static final String REUSE_EXPERIMENT_SAMPLE_PERMID = "200811050929940-1018"; + + private static final String WELLS_EXPERIMENT_SAMPLE_PERMID = "200902091250077-1051"; + + private static final String TEST_EXPERIMENT_SAMPLE_PERMID = "200902091225616-1027"; + + private static final String REUSE_EXPERIMENT_CONTAINER_DATA_SET_CODE = "20110509092359990-10"; + + private static final String REUSE_EXPERIMENT_CONTAINED_DATA_SET_CODE = "20110509092359990-11"; + + private static final String TEST_EXPERIMENT_CONTAINED_DATA_SET_CODE = "20110805092359990-17"; + + @Resource(name = ResourceNames.GENERIC_PLUGIN_SERVER) + IGenericServer server; + + private SessionContextDTO session; + + @BeforeClass(alwaysRun = true) + public void init() throws SQLException + { + session = server.tryToAuthenticate("test", "password"); + } + + @Test + public void testChangingSampleShouldSetSampleAndExperiment() + { + DataPE dataset = findData(TEST_EXPERIMENT_CONTAINED_DATA_SET_CODE); + + Assert.assertEquals(TEST_EXPERIMENT_SAMPLE_PERMID, dataset.tryGetSample().getPermId()); + Assert.assertEquals(TEST_EXPERIMENT_PERMID, dataset.getExperiment().getPermId()); + + SamplePE newSample = findSample(REUSE_EXPERIMENT_SAMPLE_PERMID); + + NewDataSet newDataset = new NewDataSet(); + newDataset.setCode(dataset.getCode()); + newDataset.setSampleIdentifierOrNull(newSample.getIdentifier()); + + DataSetBatchUpdateDetails updateDetails = new DataSetBatchUpdateDetails(); + updateDetails.setSampleUpdateRequested(true); + + update(dataset, newDataset, updateDetails); + + Assert.assertEquals(REUSE_EXPERIMENT_SAMPLE_PERMID, dataset.tryGetSample().getPermId()); + Assert.assertEquals(REUSE_EXPERIMENT_PERMID, dataset.getExperiment().getPermId()); + } + + @Test + public void testChangingExperimentShouldClearSampleAndSetExperiment() + { + DataPE dataset = findData(TEST_EXPERIMENT_CONTAINED_DATA_SET_CODE); + + Assert.assertEquals(TEST_EXPERIMENT_SAMPLE_PERMID, dataset.tryGetSample().getPermId()); + Assert.assertEquals(TEST_EXPERIMENT_PERMID, dataset.getExperiment().getPermId()); + + ExperimentPE newExperiment = findExperiment(REUSE_EXPERIMENT_PERMID); + + NewDataSet newDataset = new NewDataSet(); + newDataset.setCode(dataset.getCode()); + newDataset.setExperimentIdentifier(newExperiment.getIdentifier()); + + DataSetBatchUpdateDetails updateDetails = new DataSetBatchUpdateDetails(); + updateDetails.setExperimentUpdateRequested(true); + + update(dataset, newDataset, updateDetails); + + Assert.assertNull(dataset.tryGetSample()); + Assert.assertEquals(REUSE_EXPERIMENT_PERMID, dataset.getExperiment().getPermId()); + } + + @Test + public void testChangingContainerToDataSetThatIsContainerShouldBeAllowed() + { + DataPE dataset = findData(TEST_EXPERIMENT_CONTAINED_DATA_SET_CODE); + + Assert.assertNull(dataset.getContainer()); + + DataPE newContainer = findData(REUSE_EXPERIMENT_CONTAINER_DATA_SET_CODE); + + NewDataSet newDataset = new NewDataSet(); + newDataset.setCode(dataset.getCode()); + newDataset.setContainerIdentifierOrNull(newContainer.getIdentifier()); + + DataSetBatchUpdateDetails updateDetails = new DataSetBatchUpdateDetails(); + updateDetails.setContainerUpdateRequested(true); + + update(dataset, newDataset, updateDetails); + + Assert.assertEquals(REUSE_EXPERIMENT_CONTAINER_DATA_SET_CODE, dataset.getContainer() + .getPermId()); + } + + @Test(expectedExceptions = UserFailureException.class) + public void testChangingContainerToDataSetThatIsNotContainerShouldNotBeAllowed() + { + DataPE dataset = findData(REUSE_EXPERIMENT_CONTAINER_DATA_SET_CODE); + + Assert.assertNull(dataset.getContainer()); + + DataPE newContainer = findData(REUSE_EXPERIMENT_CONTAINED_DATA_SET_CODE); + + NewDataSet newDataset = new NewDataSet(); + newDataset.setCode(dataset.getCode()); + newDataset.setContainerIdentifierOrNull(newContainer.getIdentifier()); + + DataSetBatchUpdateDetails updateDetails = new DataSetBatchUpdateDetails(); + updateDetails.setContainerUpdateRequested(true); + + update(dataset, newDataset, updateDetails); + } + + @Test + public void testClearingSampleShouldClearSampleAndLeaveExperiment() + { + DataPE dataset = findData(TEST_EXPERIMENT_CONTAINED_DATA_SET_CODE); + + Assert.assertEquals(TEST_EXPERIMENT_SAMPLE_PERMID, dataset.tryGetSample().getPermId()); + Assert.assertEquals(TEST_EXPERIMENT_PERMID, dataset.getExperiment().getPermId()); + + NewDataSet newDataset = new NewDataSet(); + newDataset.setCode(dataset.getCode()); + newDataset.setSampleIdentifierOrNull(null); + + DataSetBatchUpdateDetails updateDetails = new DataSetBatchUpdateDetails(); + updateDetails.setSampleUpdateRequested(true); + + update(dataset, newDataset, updateDetails); + + Assert.assertNull(dataset.tryGetSample()); + Assert.assertEquals(TEST_EXPERIMENT_PERMID, dataset.getExperiment().getPermId()); + } + + @Test(expectedExceptions = AssertionError.class) + public void testClearingExperimentShouldNotBeAllowed() + { + DataPE dataset = findData(TEST_EXPERIMENT_CONTAINED_DATA_SET_CODE); + + Assert.assertEquals(TEST_EXPERIMENT_SAMPLE_PERMID, dataset.tryGetSample().getPermId()); + Assert.assertEquals(TEST_EXPERIMENT_PERMID, dataset.getExperiment().getPermId()); + + NewDataSet newDataset = new NewDataSet(); + newDataset.setCode(dataset.getCode()); + newDataset.setExperimentIdentifier(null); + + DataSetBatchUpdateDetails updateDetails = new DataSetBatchUpdateDetails(); + updateDetails.setExperimentUpdateRequested(true); + + update(dataset, newDataset, updateDetails); + } + + private void update(DataPE data, NewDataSet newDataset, DataSetBatchUpdateDetails updateDetails) + { + List<NewDataSet> newDatasets = new ArrayList<NewDataSet>(); + newDatasets.add(new UpdatedDataSet(newDataset, updateDetails)); + + NewDataSetsWithTypes newDatasetsWithType = new NewDataSetsWithTypes(); + newDatasetsWithType.setDataSetType(new DataSetType(data.getDataSetType().getCode())); + newDatasetsWithType.setNewDataSets(newDatasets); + + server.updateDataSets(session.getSessionToken(), newDatasetsWithType); + sessionFactory.getCurrentSession().update(data); + } + +} -- GitLab