From 370bd9a992d0a985b02245a59d05ae6a81ed57a7 Mon Sep 17 00:00:00 2001 From: felmer <franz-josef.elmer@id.ethz.ch> Date: Tue, 21 Apr 2020 07:19:01 +0200 Subject: [PATCH] SSDM-9367: UpdateExperimentTest and DeleteExperimentTest extended --- .../asapi/v3/DeleteExperimentTest.java | 68 +++++- .../asapi/v3/UpdateExperimentTest.java | 212 ++++++++++++++++++ 2 files changed, 279 insertions(+), 1 deletion(-) diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java index 39b066f04b8..c5ec68864b3 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java @@ -29,16 +29,19 @@ import org.testng.annotations.Test; import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.delete.ExperimentDeletionOptions; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectIdentifier; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.PropertyTypePermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleDeletionOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId; import ch.ethz.sis.openbis.systemtest.asapi.v3.index.RemoveFromIndexState; import ch.systemsx.cisd.common.action.IDelegatedAction; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.systemtest.authorization.ProjectAuthorizationUser; - import junit.framework.Assert; /** @@ -250,4 +253,67 @@ public class DeleteExperimentTest extends AbstractDeletionTest "delete-experiments EXPERIMENT_IDS('[TEST-LOGGING-1, TEST-LOGGING-2]') DELETION_OPTIONS('ExperimentDeletionOptions[reason=test-reason]')"); } + @Test + public void testDeleteSampleOfASampleProperty() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createASamplePropertyType(sessionToken, null); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, true, propertyType); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + SamplePermId propertySamplePermId = createCisdSample(createCisdExperiment()); + creation.setSampleProperty(propertyType.getPermId(), propertySamplePermId); + ExperimentPermId experimentPermId = v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + SampleDeletionOptions deletionOptions = new SampleDeletionOptions(); + deletionOptions.setReason("a test"); + + // When + IDeletionId deletionId = v3api.deleteSamples(sessionToken, Arrays.asList(propertySamplePermId), deletionOptions); + + // Then + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Experiment experiment = v3api.getExperiments(sessionToken, Arrays.asList(experimentPermId), fetchOptions).get(experimentPermId); + assertEquals(experiment.getSampleProperties().toString(), "{}"); + assertEquals(experiment.getProperties().toString(), "{}"); + + v3api.confirmDeletions(sessionToken, Arrays.asList(deletionId)); + experiment = v3api.getExperiments(sessionToken, Arrays.asList(experimentPermId), fetchOptions).get(experimentPermId); + assertEquals(experiment.getSampleProperties().toString(), "{}"); + assertEquals(experiment.getProperties().toString(), "{}"); + } + + @Test + public void testDeleteSampleWithSampleProperty() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createASamplePropertyType(sessionToken, null); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, true, propertyType); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + SamplePermId propertySamplePermId = createCisdSample(createCisdExperiment()); + creation.setSampleProperty(propertyType.getPermId(), propertySamplePermId); + ExperimentPermId experimentPermId = v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + ExperimentDeletionOptions deletionOptions = new ExperimentDeletionOptions(); + deletionOptions.setReason("a test"); + + // When + IDeletionId deletionId = v3api.deleteExperiments(sessionToken, Arrays.asList(experimentPermId), deletionOptions); + + // Then + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + assertEquals(v3api.getExperiments(sessionToken, Arrays.asList(experimentPermId), fetchOptions).toString(), "{}"); + v3api.confirmDeletions(sessionToken, Arrays.asList(deletionId)); + assertEquals(v3api.getExperiments(sessionToken, Arrays.asList(experimentPermId), fetchOptions).toString(), "{}"); + } + } diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java index d0722b2bde6..b1cb6e8107e 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java @@ -48,6 +48,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.update.ExperimentUpda import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.id.PersonPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.IProjectId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectIdentifier; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.id.PropertyTypePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.Role; import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.create.RoleAssignmentCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample; @@ -55,7 +56,9 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleDeletionOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.ISampleId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SampleIdentifier; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.update.SampleUpdate; import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.tag.id.ITagId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.tag.id.TagCode; @@ -994,6 +997,215 @@ public class UpdateExperimentTest extends AbstractExperimentTest "update-experiments EXPERIMENT_UPDATES('[ExperimentUpdate[experimentId=/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST], ExperimentUpdate[experimentId=200811050940555-1032]]')"); } + @Test + public void testUpdateWithUnknownPropertyOfTypeSample() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(new EntityTypePermId("DELETION_TEST")); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + ExperimentPermId experimentPermId = v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(experimentPermId); + update.setSampleProperty("PLATE", new SamplePermId("200811050924898-997")); + + // When + assertUserFailureException(Void -> v3api.updateExperiments(sessionToken, Arrays.asList(update)), + // Then + "Not a property of data type SAMPLE: PLATE"); + } + + @Test + public void testUpdateWithPropertyOfTypeSampleWithUnknownSample() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createASamplePropertyType(sessionToken, null); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, false, propertyType); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + creation.setSampleProperty(propertyType.getPermId(), new SampleIdentifier("/CISD/CL1")); + ExperimentPermId experimentPermId = v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(experimentPermId); + update.setSampleProperty(propertyType.getPermId(), new SampleIdentifier("/CISD/UNKNOWN")); + + // When + assertUserFailureException(Void -> v3api.updateExperiments(sessionToken, Arrays.asList(update)), + // Then + "Unknown sample: /CISD/UNKNOWN"); + } + + @Test + public void testUpdateWithPropertyOfTypeSampleWithSampleOfWrongType() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createASamplePropertyType(sessionToken, + new EntityTypePermId("WELL", EntityKind.SAMPLE)); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, false, propertyType); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + creation.setSampleProperty(propertyType.getPermId(), new SamplePermId("200811050917877-438")); + ExperimentPermId experimentPermId = v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(experimentPermId); + update.setSampleProperty(propertyType.getPermId(), new SamplePermId("200811050919915-8")); + + // When + assertUserFailureException(Void -> v3api.updateExperiments(sessionToken, Arrays.asList(update)), + // Then + "Property " + propertyType.getPermId() + " is not a sample of type WELL but of type CONTROL_LAYOUT"); + } + + @Test + public void testUpdateWithPropertyOfTypeSampleWithSampleNotAccessable() + { + // Given + String adminSessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createASamplePropertyType(adminSessionToken, null); + EntityTypePermId experimentType = createAnExperimentType(adminSessionToken, false, propertyType); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + creation.setSampleProperty(propertyType.getPermId(), new SampleIdentifier("/CISD/CL1")); + ExperimentPermId experimentPermId = v3api.createExperiments(adminSessionToken, Arrays.asList(creation)).get(0); + + String sessionToken = v3api.login(TEST_SPACE_USER, PASSWORD); + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(experimentPermId); + update.setSampleProperty(propertyType.getPermId(), new SampleIdentifier("/CISD/CL1")); + + // When + assertUserFailureException(Void -> v3api.updateExperiments(sessionToken, Arrays.asList(update)), + // Then + "Unknown sample: /CISD/CL1"); + } + + @Test + public void testUpdateAddSampleProperty() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createASamplePropertyType(sessionToken, null); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, false, propertyType); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + ExperimentPermId experimentPermId = v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(experimentPermId); + update.setSampleProperty(propertyType.getPermId(), new SamplePermId("200811050924898-997")); + + // When + v3api.updateExperiments(sessionToken, Arrays.asList(update)); + + // Then + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Experiment experiment = v3api.getExperiments(sessionToken, Arrays.asList(experimentPermId), fetchOptions).get(experimentPermId); + assertEquals(experiment.getProperties().toString(), "{" + propertyType.getPermId() + "=200811050924898-997}"); + assertEquals(experiment.getSampleProperties().toString(), "{" + propertyType.getPermId() + "=Sample 200811050924898-997}"); + } + + @Test + public void testUpdateChangeSampleProperty() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createASamplePropertyType(sessionToken, null); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, false, propertyType); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + creation.setSampleProperty(propertyType.getPermId(), new SamplePermId("200811050919915-8")); + ExperimentPermId experimentPermId = v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(experimentPermId); + update.setSampleProperty(propertyType.getPermId(), new SamplePermId("200811050924898-997")); + + // When + v3api.updateExperiments(sessionToken, Arrays.asList(update)); + + // Then + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Experiment experiment = v3api.getExperiments(sessionToken, Arrays.asList(experimentPermId), fetchOptions).get(experimentPermId); + assertEquals(experiment.getProperties().toString(), "{" + propertyType.getPermId() + "=200811050924898-997}"); + assertEquals(experiment.getSampleProperties().toString(), "{" + propertyType.getPermId() + "=Sample 200811050924898-997}"); + } + + @Test + public void testUpdateRemoveSampleProperty() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createASamplePropertyType(sessionToken, null); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, false, propertyType); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + creation.setSampleProperty(propertyType.getPermId(), new SamplePermId("200811050919915-8")); + ExperimentPermId experimentPermId = v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(experimentPermId); + update.setSampleProperty(propertyType.getPermId(), null); + + // When + v3api.updateExperiments(sessionToken, Arrays.asList(update)); + + // Then + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Experiment experiment = v3api.getExperiments(sessionToken, Arrays.asList(experimentPermId), fetchOptions).get(experimentPermId); + assertEquals(experiment.getProperties().toString(), "{}"); + assertEquals(experiment.getSampleProperties().toString(), "{}"); + } + + @Test + public void testUpdateRemoveMandatorySampleProperty() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createASamplePropertyType(sessionToken, null); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, true, propertyType); + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + creation.setSampleProperty(propertyType.getPermId(), new SamplePermId("200811050919915-8")); + ExperimentPermId experimentPermId = v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + + ExperimentUpdate update = new ExperimentUpdate(); + update.setExperimentId(experimentPermId); + update.setSampleProperty(propertyType.getPermId(), null); + + // When + assertUserFailureException(Void -> v3api.updateExperiments(sessionToken, Arrays.asList(update)), + "Property " + propertyType + " of entity type " + experimentType.getPermId() + + " can not be deleted because it is mandatory."); + } + + @Test private ExperimentPermId createExperimentWithoutAttachments() { final String sessionToken = v3api.login(TEST_USER, PASSWORD); -- GitLab