From f7b80fc002c227070fbce75dca377d077485b106 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Wed, 29 Apr 2015 12:55:32 +0000 Subject: [PATCH] SSDM-1804: tests fixed. Tiny improvements in TrashBO. SVN: 33923 --- .../generic/server/business/bo/TrashBO.java | 26 +++-- .../systemtest/api/v3/EntityDeletionTest.java | 100 ++++++++++++++++++ .../generic/server/CommonServerTest.java | 2 - .../server/business/bo/TrashBOTest.java | 31 ++++++ .../server/business/bo/entitygraph/Utils.java | 12 +++ .../systemtest/EntityDeletionTest.java | 14 +++ 6 files changed, 173 insertions(+), 12 deletions(-) create mode 100644 openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/EntityDeletionTest.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java index c7147e20c61..aa8cf903755 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java @@ -177,8 +177,6 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO TrashOperationsManager trashManager = new TrashOperationsManager(session, deletion, this); Set<TechId> allSampleIds = trashSamples(trashManager, sampleIds, CascadeSampleDependentComponents.TRUE, true); - Set<TechId> dependentSampleIds = new HashSet<TechId>(allSampleIds); - dependentSampleIds.removeAll(sampleIds); Set<TechId> experimentsOfSamples = getExperimentsOfSamples(sampleIds); trashSampleDependentDataSets(trashManager, experimentsOfSamples, allSampleIds); trashManager.trash(); @@ -523,7 +521,7 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO { entityIdsByKind.get(entityKind).addAll(entityIds); IDeletionDAO deletionDAO = daoFactory.getDeletionDAO(); - operations.add(new TrashBatchOperation(entityKind, entityIds, deletion, deletionDAO, isOriginalDeletion)); + operations.add(0, new TrashBatchOperation(entityKind, entityIds, deletion, deletionDAO, isOriginalDeletion)); } } @@ -541,23 +539,31 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO private void updateModificationDateAndModifierOfRelatedProjectsOfExperiments() { List<Long> ids = TechId.asLongs(entityIdsByKind.get(EntityKind.EXPERIMENT)); - List<ExperimentPE> experiments = daoFactory.getExperimentDAO().listByIDs(ids); - RelationshipUtils.updateModificationDateAndModifierOfRelatedProjectsOfExperiments(experiments, session); + if (ids.isEmpty() == false) + { + List<ExperimentPE> experiments = daoFactory.getExperimentDAO().listByIDs(ids); + RelationshipUtils.updateModificationDateAndModifierOfRelatedProjectsOfExperiments(experiments, session); + } } private void updateModificationDateAndModifierOfRelatedEntitiesOfSamples() { List<Long> ids = TechId.asLongs(entityIdsByKind.get(EntityKind.SAMPLE)); - List<SamplePE> samples = daoFactory.getSampleDAO().listByIDs(ids); - RelationshipUtils.updateModificationDateAndModifierOfRelatedEntitiesOfSamples(samples, session); + if (ids.isEmpty() == false) + { + List<SamplePE> samples = daoFactory.getSampleDAO().listByIDs(ids); + RelationshipUtils.updateModificationDateAndModifierOfRelatedEntitiesOfSamples(samples, session); + } } private void updateModificationDateAndModifierOfRelatedEntitiesOfDataSets() { List<Long> ids = TechId.asLongs(entityIdsByKind.get(EntityKind.DATA_SET)); - List<DataPE> dataSets = daoFactory.getDataDAO().listByIDs(ids); - RelationshipUtils.updateModificationDateAndModifierOfRelatedEntitiesOfDataSets(dataSets, session); - + if (ids.isEmpty() == false) + { + List<DataPE> dataSets = daoFactory.getDataDAO().listByIDs(ids); + RelationshipUtils.updateModificationDateAndModifierOfRelatedEntitiesOfDataSets(dataSets, session); + } } } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/EntityDeletionTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/EntityDeletionTest.java new file mode 100644 index 00000000000..49165fb055b --- /dev/null +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/api/v3/EntityDeletionTest.java @@ -0,0 +1,100 @@ +/* + * Copyright 2015 ETH Zuerich, SIS + * + * 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.ethz.sis.openbis.systemtest.api.v3; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.testng.annotations.Test; + +import ch.ethz.sis.openbis.generic.shared.api.v3.IApplicationServerApi; +import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.dataset.DataSetDeletionOptions; +import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.experiment.ExperimentDeletionOptions; +import ch.ethz.sis.openbis.generic.shared.api.v3.dto.deletion.sample.SampleDeletionOptions; +import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.dataset.DataSetPermId; +import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.experiment.ExperimentIdentifier; +import ch.ethz.sis.openbis.generic.shared.api.v3.dto.id.sample.SamplePermId; +import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.EntityNode; +import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.SampleNode; + + +/** + * + * + * @author Franz-Josef Elmer + */ +@Test(groups = { "system-cleandb" }) +public class EntityDeletionTest extends ch.systemsx.cisd.openbis.systemtest.EntityDeletionTest +{ + + private static final String CONTEXT_DESCRIPTION = " (Context: [])"; + @Autowired + protected IApplicationServerApi v3api; + + @Override + protected String createExpectedErrorMessage(SampleNode relatedSample, EntityNode outsiderNode) + { + return super.createExpectedErrorMessage(relatedSample, outsiderNode) + CONTEXT_DESCRIPTION; + } + + @Override + protected String createExpectedErrorMessage(EntityNode originalNode, EntityNode relatedEntity, EntityNode outsiderNode) + { + return super.createExpectedErrorMessage(originalNode, relatedEntity, outsiderNode) + CONTEXT_DESCRIPTION; + } + + @Override + protected void deleteExperiments(List<String> experimentIdentifiers, String userSessionToken) + { + List<ExperimentIdentifier> experimentIds = new ArrayList<ExperimentIdentifier>(); + for (String identifier : experimentIdentifiers) + { + experimentIds.add(new ExperimentIdentifier(identifier)); + } + ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions(); + deletionOptions.setReason("test"); + v3api.deleteExperiments(userSessionToken, experimentIds, deletionOptions); + } + + @Override + protected void deleteSamples(List<String> samplePermIds, String userSessionToken) + { + List<SamplePermId> sampleIds = new ArrayList<SamplePermId>(); + for (String permId : samplePermIds) + { + sampleIds.add(new SamplePermId(permId)); + } + SampleDeletionOptions deletionOptions = new SampleDeletionOptions(); + deletionOptions.setReason("test"); + v3api.deleteSamples(userSessionToken, sampleIds, deletionOptions); + } + + @Override + protected void deleteDataSets(List<String> dataSetCodes, String userSessionToken) + { + List<DataSetPermId> dataSetIds = new ArrayList<DataSetPermId>(); + for (String code : dataSetCodes) + { + dataSetIds.add(new DataSetPermId(code)); + } + DataSetDeletionOptions deletionOptions = new DataSetDeletionOptions(); + deletionOptions.setReason("test"); + v3api.deleteDataSets(userSessionToken, dataSetIds, deletionOptions); + } + +} diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java index 0908f919513..b98cc4bec33 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java @@ -1813,8 +1813,6 @@ public final class CommonServerTest extends AbstractServerTestCase one(trashBO).createDeletion(reason); one(trashBO).trashDataSets(TechId.createList(dataSets)); - one(dataSetDAO).listByCode(new HashSet<String>(dataSetCodes)); - will(returnValue(Arrays.asList())); } }); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java index d53831d6009..89ef529b388 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBOTest.java @@ -41,6 +41,7 @@ import ch.systemsx.cisd.common.test.RecordingMatcher; import ch.systemsx.cisd.openbis.generic.server.business.ManagerTestTool; import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.DataSetNode; import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.EntityGraphGenerator; +import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.ExperimentNode; import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.SampleNode; import ch.systemsx.cisd.openbis.generic.server.business.bo.entitygraph.Utils; import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; @@ -51,6 +52,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListOrSearchSampleCrite import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE; import ch.systemsx.cisd.openbis.generic.shared.dto.RelationshipTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE; @@ -234,6 +236,7 @@ public final class TrashBOTest extends AbstractBOTest private void prepareEntityGraph(EntityGraphGenerator g) { g.assertConsistency(); + prepareListExperimentsByIds(g); prepareListSampleIdsByExperimentIds(g); prepareListDataSetIdsByExperimentIds(g); prepareListDataSetIdsBySampleIds(g); @@ -470,6 +473,34 @@ public final class TrashBOTest extends AbstractBOTest }); } + private void prepareListExperimentsByIds(final EntityGraphGenerator g) + { + final AbstractMockHandler<Collection<Long>> handler = new AbstractMockHandler<Collection<Long>>() + { + @Override + public Object invoke(Invocation invocation) throws Throwable + { + List<ExperimentPE> experiments = new ArrayList<ExperimentPE>(); + Map<Long, ExperimentNode> experimentNodes = g.getExperiments(); + for (Long id : argument) + { + ExperimentNode experimentNode = experimentNodes.get(id); + experiments.add(Utils.createExperimentPE(experimentNode)); + } + print("listByExperimentIds(" + argument + ") = " + experiments); + return experiments; + } + }; + context.checking(new Expectations() + { + { + allowing(experimentDAO).listByIDs(with(handler)); + will(handler); + } + }); + + } + private void prepareListByDataSetIds(final EntityGraphGenerator g) { final AbstractMockHandler<Collection<Long>> handler = new AbstractMockHandler<Collection<Long>>() diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/entitygraph/Utils.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/entitygraph/Utils.java index 96ffb40d88f..461510f48bc 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/entitygraph/Utils.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/entitygraph/Utils.java @@ -133,6 +133,18 @@ public class Utils return experiment; } + public static ExperimentPE createExperimentPE(ExperimentNode experimentNode) + { + if (experimentNode == null) + { + return null; + } + ExperimentPE experiment = new ExperimentPE(); + experiment.setId(experimentNode.getId()); + experiment.setCode(experimentNode.getCode()); + return experiment; + } + static final void appendTo(StringBuilder builder, String label, List<? extends EntityNode> entityNodes) { if (entityNodes.isEmpty()) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityDeletionTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityDeletionTest.java index 49f1aa67278..5d308f4b0e6 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityDeletionTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityDeletionTest.java @@ -309,6 +309,20 @@ public class EntityDeletionTest extends BaseTest assertUnmodifiedAndUndeleted(g); } + @Test + public final void testTrashSampleWithAnExperimentSample() + { + EntityGraphGenerator g = parseAndCreateGraph("E1, samples: S2\n" + + "S1, components: S2\n"); + + deleteSamples(g.s(1)); + + assertEquals("", renderGraph(g)); + assertDeleted(g.s(1), g.s(2)); + assertModified(g.e(1)); + assertUnmodifiedAndUndeleted(g); + } + @Test public final void testTrashSampleWithAnExperimentSampleWithADataSet() { -- GitLab