From 51c7a3430ca5ca9edb4498ebb0368dab38aea89b Mon Sep 17 00:00:00 2001 From: alaskowski <alaskowski@ethz.ch> Date: Fri, 23 Jun 2023 11:57:11 +0200 Subject: [PATCH] SSDM-13637: changed logic for set() method of update metadata procedure. Amended tests. --- .../UpdateMetaDataForEntityExecutor.java | 13 ++-- .../asapi/v3/UpdateDataSetTest.java | 31 ++++++++ .../asapi/v3/UpdateDataSetTypeTest.java | 21 ++++++ .../asapi/v3/UpdateExperimentTest.java | 35 +++++++++ .../asapi/v3/UpdateExperimentTypeTest.java | 23 ++++++ .../systemtest/asapi/v3/UpdateSampleTest.java | 72 +++++++++++++++++++ .../asapi/v3/UpdateSampleTypeTest.java | 24 +++++++ 7 files changed, 212 insertions(+), 7 deletions(-) diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/metadata/UpdateMetaDataForEntityExecutor.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/metadata/UpdateMetaDataForEntityExecutor.java index e0000744937..ff5a7fa3a25 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/metadata/UpdateMetaDataForEntityExecutor.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/metadata/UpdateMetaDataForEntityExecutor.java @@ -68,7 +68,6 @@ public class UpdateMetaDataForEntityExecutor<ENTITY_UPDATE extends IMetaDataUpda { metaData.putAll(entity.getMetaData()); } - ListUpdateValue.ListUpdateActionSet<?> lastSetAction = null; AtomicBoolean metaDataChanged = new AtomicBoolean(false); for (ListUpdateValue.ListUpdateAction<Object> action : update.getMetaData().getActions()) { @@ -84,14 +83,14 @@ public class UpdateMetaDataForEntityExecutor<ENTITY_UPDATE extends IMetaDataUpda } } else if (action instanceof ListUpdateValue.ListUpdateActionSet<?>) { - lastSetAction = (ListUpdateValue.ListUpdateActionSet<?>) action; + metaDataChanged.set(true); + Collection<Map<String, String>> items = (Collection<Map<String, String>>) action.getItems(); + for (Map<String, String> item : items) + { + metaData = item; + } } } - if (lastSetAction != null) - { - metaData.clear(); - addTo(metaData, lastSetAction, metaDataChanged); - } if (metaDataChanged.get()) { entity.setMetaData(metaData.isEmpty() ? null : metaData); diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java index 2d70380580d..9cf63e3679a 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java @@ -1348,6 +1348,37 @@ public class UpdateDataSetTest extends AbstractDataSetTest assertEquals(dataSet.getMetaData(), Map.of("key_modify", "new_value", "key_add", "value_add")); } + @Test + public void testUpdateMetaDataSetEmpty() + { + // Prepare + String sessionToken = v3api.login(TEST_USER, PASSWORD); + + DataSetCreation dataSetCreation = new DataSetCreation(); + dataSetCreation.setCode("DATA_SET_META_1"); + dataSetCreation.setTypeId(new EntityTypePermId("DELETION_TEST_CONTAINER", EntityKind.DATA_SET)); + dataSetCreation.setDataStoreId(new DataStorePermId("STANDARD")); + dataSetCreation.setDataSetKind(DataSetKind.CONTAINER); + dataSetCreation.setExperimentId(new ExperimentIdentifier("/CISD/NEMO/EXP-TEST-1")); + dataSetCreation.setMetaData(Map.of("key_modify", "value_modify", "key_delete", "value_delete")); + DataSetPermId id = v3api.createDataSets(sessionToken, Arrays.asList(dataSetCreation)).get(0); + + // Act + DataSetUpdate update = new DataSetUpdate(); + update.setDataSetId(id); + update.getMetaData().add(Map.of()); + v3api.updateDataSets(sessionToken, Arrays.asList(update)); + + // Verify + DataSetFetchOptions fetchOptions = new DataSetFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + fetchOptions.withHistory().withAuthor(); + DataSet dataSet = v3api.getDataSets(sessionToken, Arrays.asList(id), fetchOptions).get(id); + + assertEquals(dataSet.getMetaData(), Map.of()); + } + @Test(dataProvider = USER_ROLES_PROVIDER) public void testUpdateWithDifferentRolesExperimentDataSet(RoleWithHierarchy role) { diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTypeTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTypeTest.java index 63197e1a381..72cc68609b9 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTypeTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTypeTest.java @@ -201,4 +201,25 @@ public class UpdateDataSetTypeTest extends UpdateEntityTypeTest<DataSetTypeCreat assertEquals(type.getMetaData(), Map.of("key_modify", "new_value", "key_add", "value_add")); } + @Test + public void testUpdateMetaDataSetEmpty() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + // Prepare + DataSetTypeCreation creation = new DataSetTypeCreation(); + creation.setCode("DATA_SET_META_DATA_TEST"); + creation.setMetaData(Map.of("key_modify", "value_modify", "key_delete", "value_delete")); + createTypes(sessionToken, List.of(creation)); + + // Act + DataSetTypeUpdate update = new DataSetTypeUpdate(); + update.setTypeId(new EntityTypePermId("DATA_SET_META_DATA_TEST")); + update.getMetaData().add(Map.of()); + v3api.updateDataSetTypes(sessionToken, Arrays.asList(update)); + + // Verify + DataSetType type = getType(sessionToken, new EntityTypePermId("DATA_SET_META_DATA_TEST")); + assertEquals(type.getMetaData(), Map.of()); + } + } diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java index 6a820cc6767..c9ae2d6da11 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java @@ -1317,6 +1317,41 @@ public class UpdateExperimentTest extends AbstractExperimentTest Map.of("key_modify", "new_value", "key_add", "value_add")); } + @Test + public void testUpdateMetaDataSetEmpty() + { + final String sessionToken = v3api.login(TEST_USER, PASSWORD); + + // Prepare + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("TEST_EXPERIMENT_META_DATA"); + creation.setTypeId(new EntityTypePermId("SIRNA_HCS")); + creation.setProjectId(new ProjectIdentifier("/CISD/NEMO")); + creation.setProperty("DESCRIPTION", "a description"); + creation.setMetaData(Map.of("key_modify", "value_modify", "key_delete", "value_delete")); + + List<ExperimentPermId> ids = v3api.createExperiments(sessionToken, Arrays.asList(creation)); + + final ExperimentPermId permId = ids.get(0); + + // Act + final ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(permId); + update.getMetaData().add(Map.of()); + + v3api.updateExperiments(sessionToken, Arrays.asList(update)); + + // Verify + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + fetchOptions.withHistory().withAuthor(); + Experiment experiment = + v3api.getExperiments(sessionToken, Arrays.asList(permId), fetchOptions).get(permId); + + assertEquals(experiment.getMetaData(), Map.of()); + } + @Test(dataProvider = USER_ROLES_PROVIDER) public void testUpdateWithDifferentRoles(RoleWithHierarchy role) { diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTypeTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTypeTest.java index a04f34dab06..d54f378cbc3 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTypeTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTypeTest.java @@ -181,4 +181,27 @@ public class UpdateExperimentTypeTest extends UpdateEntityTypeTest<ExperimentTyp assertEquals(type.getMetaData(), Map.of("key_modify", "new_value", "key_add", "value_add")); } + @Test + public void testUpdateMetaDataSetEmpty() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + + // Prepare + ExperimentTypeCreation creation = new ExperimentTypeCreation(); + creation.setCode("EXPERIMENT_TYPE_META_DATA_TEST"); + creation.setMetaData(Map.of("key_modify", "value_modify", "key_delete", "value_delete")); + createTypes(sessionToken, List.of(creation)); + + // Act + ExperimentTypeUpdate update = new ExperimentTypeUpdate(); + update.setTypeId(new EntityTypePermId("EXPERIMENT_TYPE_META_DATA_TEST")); + update.getMetaData().add(Map.of()); + v3api.updateExperimentTypes(sessionToken, Arrays.asList(update)); + + // Verify + ExperimentType type = getType(sessionToken, new EntityTypePermId("EXPERIMENT_TYPE_META_DATA_TEST")); + + assertEquals(type.getMetaData(), Map.of()); + } + } diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java index f5b1797792a..44a32afc172 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java @@ -214,6 +214,78 @@ public class UpdateSampleTest extends AbstractSampleTest assertEquals(sample.getMetaData(), Map.of("key_modify", "new_value", "key_add", "value_add")); } + @Test + public void testUpdateSampleMetaDataSetEmpty() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + + SampleCreation creation = new SampleCreation(); + creation.setCode("SAMPLE"); + creation.setTypeId(new EntityTypePermId("CELL_PLATE")); + creation.setSpaceId(new SpacePermId("CISD")); + creation.setMetaData(Map.of("key_modify", "value_modify", "key_delete", "value_delete")); + + List<SamplePermId> ids = v3api.createSamples(sessionToken, Arrays.asList(creation)); + + SampleUpdate update = new SampleUpdate(); + update.setSampleId(ids.get(0)); + update.setSpaceId(new SpacePermId("TEST-SPACE")); + update.setExperimentId(new ExperimentPermId("201206190940555-1032")); + update.getMetaData().set(Map.of()); + + v3api.updateSamples(sessionToken, Arrays.asList(update)); + + SampleFetchOptions fetchOptions = new SampleFetchOptions(); + fetchOptions.withSpace(); + fetchOptions.withExperiment(); + + Map<ISampleId, Sample> map = v3api.getSamples(sessionToken, ids, fetchOptions); + List<Sample> samples = new ArrayList<Sample>(map.values()); + + AssertionUtil.assertCollectionSize(samples, 1); + + Sample sample = samples.get(0); + assertEquals(sample.getSpace().getCode(), "TEST-SPACE"); + assertEquals(sample.getExperiment().getIdentifier().getIdentifier(), "/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST"); + assertEquals(sample.getMetaData(), Map.of()); + } + + @Test + public void testUpdateSampleMetaDataLastSetMatters() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + + SampleCreation creation = new SampleCreation(); + creation.setCode("SAMPLE"); + creation.setTypeId(new EntityTypePermId("CELL_PLATE")); + creation.setSpaceId(new SpacePermId("CISD")); + creation.setMetaData(Map.of("key_modify", "value_modify", "key_delete", "value_delete")); + + List<SamplePermId> ids = v3api.createSamples(sessionToken, Arrays.asList(creation)); + + SampleUpdate update = new SampleUpdate(); + update.setSampleId(ids.get(0)); + update.setSpaceId(new SpacePermId("TEST-SPACE")); + update.setExperimentId(new ExperimentPermId("201206190940555-1032")); + update.getMetaData().set(Map.of("a", "b"), Map.of()); + + v3api.updateSamples(sessionToken, Arrays.asList(update)); + + SampleFetchOptions fetchOptions = new SampleFetchOptions(); + fetchOptions.withSpace(); + fetchOptions.withExperiment(); + + Map<ISampleId, Sample> map = v3api.getSamples(sessionToken, ids, fetchOptions); + List<Sample> samples = new ArrayList<Sample>(map.values()); + + AssertionUtil.assertCollectionSize(samples, 1); + + Sample sample = samples.get(0); + assertEquals(sample.getSpace().getCode(), "TEST-SPACE"); + assertEquals(sample.getExperiment().getIdentifier().getIdentifier(), "/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST"); + assertEquals(sample.getMetaData(), Map.of()); + } + @Test public void testUpdateWithSampleNonexistent() { diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTypeTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTypeTest.java index 6472c18e166..b05901248df 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTypeTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTypeTest.java @@ -202,4 +202,28 @@ public class UpdateSampleTypeTest extends UpdateEntityTypeTest<SampleTypeCreatio } + @Test + public void testUpdateMetaDataSetEmpty() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + + // Prepare + SampleTypeCreation creation = new SampleTypeCreation(); + creation.setCode("META_DATA_UPDATE_TEST_1"); + creation.setMetaData(Map.of("key_modify", "value_modify", "key_delete", "value_delete")); + createTypes(sessionToken, List.of(creation)); + + // Act + SampleTypeUpdate update = new SampleTypeUpdate(); + update.setTypeId(new EntityTypePermId("META_DATA_UPDATE_TEST_1")); + update.getMetaData().set(Map.of()); + + v3api.updateSampleTypes(sessionToken, Arrays.asList(update)); + + // Verify + SampleType type = getType(sessionToken, new EntityTypePermId("META_DATA_UPDATE_TEST_1")); + + assertEquals(type.getMetaData(), Map.of()); + } + } -- GitLab