From ce40fc49abc33746e518bcc0b05c452c44ef82e6 Mon Sep 17 00:00:00 2001 From: alaskowski <alaskowski@ethz.ch> Date: Thu, 25 May 2023 11:12:54 +0200 Subject: [PATCH] SSDM-13524: Added missing tests, refactored timestamp parsing for getTimestampArrayProperty method --- .../generic/asapi/v3/dto/dataset/DataSet.java | 2 +- .../dto/dataset/create/DataSetCreation.java | 2 +- .../v3/dto/dataset/update/DataSetUpdate.java | 2 +- .../asapi/v3/dto/experiment/Experiment.java | 2 +- .../experiment/create/ExperimentCreation.java | 2 +- .../experiment/update/ExperimentUpdate.java | 2 +- .../asapi/v3/dto/material/Material.java | 2 +- .../dto/material/create/MaterialCreation.java | 2 +- .../dto/material/update/MaterialUpdate.java | 2 +- .../generic/asapi/v3/dto/sample/Sample.java | 2 +- .../v3/dto/sample/create/SampleCreation.java | 2 +- .../v3/dto/sample/update/SampleUpdate.java | 2 +- .../helper/generators/AbstractGenerator.java | 2 +- .../asapi/v3/CreateDataSetTest.java | 138 ++++++++++++++++ .../asapi/v3/CreateExperimentTest.java | 148 ++++++++++++++++++ .../systemtest/asapi/v3/CreateSampleTest.java | 148 ++++++++++++++++++ 16 files changed, 447 insertions(+), 13 deletions(-) diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/DataSet.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/DataSet.java index 30cd204e6ce..c46c4ba9a46 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/DataSet.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/DataSet.java @@ -1138,7 +1138,7 @@ public class DataSet implements Serializable, ICodeHolder, IEntityTypeHolder, IE String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/create/DataSetCreation.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/create/DataSetCreation.java index 5474de75cd4..50c9fcddd07 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/create/DataSetCreation.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/create/DataSetCreation.java @@ -457,7 +457,7 @@ public class DataSetCreation implements ICreation, ICreationIdHolder, IObjectCre String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/update/DataSetUpdate.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/update/DataSetUpdate.java index 81b69d88e08..9671f970b68 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/update/DataSetUpdate.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/dataset/update/DataSetUpdate.java @@ -475,7 +475,7 @@ public class DataSetUpdate implements IUpdate, IObjectUpdate<IDataSetId>, IPrope String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/Experiment.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/Experiment.java index c5d48c8628e..c40e3996f46 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/Experiment.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/Experiment.java @@ -822,7 +822,7 @@ public class Experiment implements Serializable, IAttachmentsHolder, ICodeHolder String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/create/ExperimentCreation.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/create/ExperimentCreation.java index a3537b93f47..6097d4802ad 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/create/ExperimentCreation.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/create/ExperimentCreation.java @@ -310,7 +310,7 @@ public class ExperimentCreation implements ICreation, IObjectCreation, ICreation String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/update/ExperimentUpdate.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/update/ExperimentUpdate.java index eb09ed062d5..c577701b7ab 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/update/ExperimentUpdate.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/experiment/update/ExperimentUpdate.java @@ -352,7 +352,7 @@ public class ExperimentUpdate implements IUpdate, IObjectUpdate<IExperimentId>, String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/Material.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/Material.java index 00bc64275af..05af8f4f378 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/Material.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/Material.java @@ -488,7 +488,7 @@ public class Material implements Serializable, ICodeHolder, IEntityTypeHolder, I String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/create/MaterialCreation.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/create/MaterialCreation.java index eab2d2336d7..b09ac0ad5cd 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/create/MaterialCreation.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/create/MaterialCreation.java @@ -296,7 +296,7 @@ public class MaterialCreation implements ICreation, IObjectCreation, ICreationId String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/update/MaterialUpdate.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/update/MaterialUpdate.java index 56735bf8ad3..d1cfe873086 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/update/MaterialUpdate.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/material/update/MaterialUpdate.java @@ -280,7 +280,7 @@ public class MaterialUpdate implements IUpdate, IObjectUpdate<IMaterialId>, IPro String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/Sample.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/Sample.java index 8cd3bbe21fb..590c678864c 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/Sample.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/Sample.java @@ -1137,7 +1137,7 @@ public class Sample implements Serializable, IAttachmentsHolder, ICodeHolder, ID String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/create/SampleCreation.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/create/SampleCreation.java index 3000bb1ce98..6710ffe9a35 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/create/SampleCreation.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/create/SampleCreation.java @@ -440,7 +440,7 @@ public class SampleCreation implements ICreation, ICreationIdHolder, IProperties String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/update/SampleUpdate.java b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/update/SampleUpdate.java index 5b4203cef3d..cdb005fe94b 100644 --- a/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/update/SampleUpdate.java +++ b/api-openbis-java/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/sample/update/SampleUpdate.java @@ -508,7 +508,7 @@ public class SampleUpdate implements IUpdate, IPropertiesHolder, IObjectUpdate<I String propertyValue = getProperty(propertyName); return propertyValue == null ? null : Arrays.stream(propertyValue.split(",")) .map(String::trim) - .map(ZonedDateTime::parse) + .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X"))) .toArray(ZonedDateTime[]::new); } diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/helper/generators/AbstractGenerator.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/helper/generators/AbstractGenerator.java index ee783ed39f6..ba44d76975a 100644 --- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/helper/generators/AbstractGenerator.java +++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/helper/generators/AbstractGenerator.java @@ -326,7 +326,7 @@ public class AbstractGenerator + " String propertyValue = getProperty(propertyName);\n" + " return propertyValue == null ? null : Arrays.stream(propertyValue.split(\",\"))\n" + " .map(String::trim)\n" - + " .map(ZonedDateTime::parse)\n" + + " .map(dateTime -> ZonedDateTime.parse(dateTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm:ss X\")))\n" + " .toArray(ZonedDateTime[]::new);\n" + " }"); diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java index 4ee18d3434f..6af8e3b63c7 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java @@ -18,6 +18,7 @@ package ch.ethz.sis.openbis.systemtest.asapi.v3; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; +import java.time.ZonedDateTime; import java.util.Arrays; import java.util.Collections; import java.util.Date; @@ -2102,6 +2103,143 @@ public class CreateDataSetTest extends AbstractDataSetTest assertEquals(dataSet.getProperties().size(), 2); } + @Test + public void testCreateWithPropertyOfTypeJson() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.JSON); + EntityTypePermId dataSetType = createADataSetType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + DataSetCreation creation = physicalDataSetCreation(); + creation.setTypeId(dataSetType); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + creation.setJsonProperty(propertyType.getPermId(), "{\"key\": \"value\", \"array\":[1,2,3]}"); + + // When + List<DataSetPermId> dataSetIds = v3api.createDataSets(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(dataSetIds.size(), 1); + DataSetFetchOptions fetchOptions = new DataSetFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + DataSet dataSet = v3api.getDataSets(sessionToken, dataSetIds, fetchOptions).get(dataSetIds.get(0)); + assertEquals(dataSet.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(dataSet.getJsonProperty(propertyType.getPermId()), "{\"key\": \"value\", \"array\": [1, 2, 3]}"); + assertEquals(dataSet.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayInteger() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_INTEGER); + EntityTypePermId dataSetType = createADataSetType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + DataSetCreation creation = physicalDataSetCreation(); + creation.setTypeId(dataSetType); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + creation.setIntegerArrayProperty(propertyType.getPermId(), new Long[]{1L, 2L, 3L}); + + // When + List<DataSetPermId> dataSetIds = v3api.createDataSets(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(dataSetIds.size(), 1); + DataSetFetchOptions fetchOptions = new DataSetFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + DataSet dataSet = v3api.getDataSets(sessionToken, dataSetIds, fetchOptions).get(dataSetIds.get(0)); + assertEquals(dataSet.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(dataSet.getIntegerArrayProperty(propertyType.getPermId()), new Long[]{1L, 2L, 3L}); + assertEquals(dataSet.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayReal() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_REAL); + EntityTypePermId dataSetType = createADataSetType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + DataSetCreation creation = physicalDataSetCreation(); + creation.setTypeId(dataSetType); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + creation.setRealArrayProperty(propertyType.getPermId(), new Double[]{1.0, 2.0, 3.0}); + + // When + List<DataSetPermId> dataSetIds = v3api.createDataSets(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(dataSetIds.size(), 1); + DataSetFetchOptions fetchOptions = new DataSetFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + DataSet dataSet = v3api.getDataSets(sessionToken, dataSetIds, fetchOptions).get(dataSetIds.get(0)); + assertEquals(dataSet.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(dataSet.getRealArrayProperty(propertyType.getPermId()), new Double[]{1.0, 2.0, 3.0}); + assertEquals(dataSet.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayString() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_STRING); + EntityTypePermId dataSetType = createADataSetType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + DataSetCreation creation = physicalDataSetCreation(); + creation.setTypeId(dataSetType); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + creation.setStringArrayProperty(propertyType.getPermId(), new String[]{"a", "b", "c"}); + + // When + List<DataSetPermId> dataSetIds = v3api.createDataSets(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(dataSetIds.size(), 1); + DataSetFetchOptions fetchOptions = new DataSetFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + DataSet dataSet = v3api.getDataSets(sessionToken, dataSetIds, fetchOptions).get(dataSetIds.get(0)); + assertEquals(dataSet.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(dataSet.getStringArrayProperty(propertyType.getPermId()), new String[]{"a", "b", "c"}); + assertEquals(dataSet.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayTimestamp() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_TIMESTAMP); + EntityTypePermId dataSetType = createADataSetType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + DataSetCreation creation = physicalDataSetCreation(); + creation.setTypeId(dataSetType); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + ZonedDateTime time1 = ZonedDateTime.parse("2023-05-16T11:22:33+02"); + ZonedDateTime time2 = ZonedDateTime.parse("2023-05-18T11:17:03+02"); + creation.setTimestampArrayProperty(propertyType.getPermId(), new ZonedDateTime[]{time1, time2}); + + // When + List<DataSetPermId> dataSetIds = v3api.createDataSets(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(dataSetIds.size(), 1); + DataSetFetchOptions fetchOptions = new DataSetFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + DataSet dataSet = v3api.getDataSets(sessionToken, dataSetIds, fetchOptions).get(dataSetIds.get(0)); + assertEquals(dataSet.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(dataSet.getTimestampArrayProperty(propertyType.getPermId()), new ZonedDateTime[]{time1, time2}); + assertEquals(dataSet.getProperties().size(), 2); + } + private DataSetCreation containerDataSetCreation() { String code = UUID.randomUUID().toString(); diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java index 52e6f3f36e6..f4441dbd806 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java @@ -19,6 +19,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -860,4 +861,151 @@ public class CreateExperimentTest extends AbstractExperimentTest assertEquals(experiment2.getProperties().size(), 2); } + @Test + public void testCreateWithPropertyOfTypeJson() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.JSON); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/CISD/NEMO")); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + creation.setJsonProperty(propertyType.getPermId(), "{\"key\": \"value\", \"array\":[1,2,3]}"); + + // When + List<ExperimentPermId> experimentIds = v3api.createExperiments(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(experimentIds.size(), 1); + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Experiment experiment2 = v3api.getExperiments(sessionToken, experimentIds, fetchOptions).get(experimentIds.get(0)); + assertEquals(experiment2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(experiment2.getJsonProperty(propertyType.getPermId()), "{\"key\": \"value\", \"array\": [1, 2, 3]}"); + assertEquals(experiment2.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayInteger() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_INTEGER); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/CISD/NEMO")); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + creation.setIntegerArrayProperty(propertyType.getPermId(), new Long[]{1L, 2L, 3L}); + + // When + List<ExperimentPermId> experimentIds = v3api.createExperiments(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(experimentIds.size(), 1); + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Experiment experiment2 = v3api.getExperiments(sessionToken, experimentIds, fetchOptions).get(experimentIds.get(0)); + assertEquals(experiment2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(experiment2.getIntegerArrayProperty(propertyType.getPermId()), new Long[]{1L, 2L, 3L}); + assertEquals(experiment2.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayReal() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_REAL); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/CISD/NEMO")); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + creation.setRealArrayProperty(propertyType.getPermId(), new Double[]{1.0, 2.0, 3.0}); + + // When + List<ExperimentPermId> experimentIds = v3api.createExperiments(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(experimentIds.size(), 1); + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Experiment experiment2 = v3api.getExperiments(sessionToken, experimentIds, fetchOptions).get(experimentIds.get(0)); + assertEquals(experiment2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(experiment2.getRealArrayProperty(propertyType.getPermId()), new Double[]{1.0, 2.0, 3.0}); + assertEquals(experiment2.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayString() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_STRING); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/CISD/NEMO")); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + creation.setStringArrayProperty(propertyType.getPermId(), new String[]{"a", "b", "c"}); + + // When + List<ExperimentPermId> experimentIds = v3api.createExperiments(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(experimentIds.size(), 1); + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Experiment experiment2 = v3api.getExperiments(sessionToken, experimentIds, fetchOptions).get(experimentIds.get(0)); + assertEquals(experiment2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(experiment2.getStringArrayProperty(propertyType.getPermId()), new String[]{"a", "b", "c"}); + assertEquals(experiment2.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayTimestamp() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_TIMESTAMP); + EntityTypePermId experimentType = createAnExperimentType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(experimentType); + creation.setProjectId(new ProjectIdentifier("/CISD/NEMO")); + creation.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + ZonedDateTime time1 = ZonedDateTime.parse("2023-05-16T11:22:33+02"); + ZonedDateTime time2 = ZonedDateTime.parse("2023-05-18T11:17:03+02"); + creation.setTimestampArrayProperty(propertyType.getPermId(), new ZonedDateTime[]{time1, time2}); + + // When + List<ExperimentPermId> experimentIds = v3api.createExperiments(sessionToken, Arrays.asList(creation)); + + // Then + assertEquals(experimentIds.size(), 1); + ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Experiment experiment2 = v3api.getExperiments(sessionToken, experimentIds, fetchOptions).get(experimentIds.get(0)); + assertEquals(experiment2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(experiment2.getTimestampArrayProperty(propertyType.getPermId()), new ZonedDateTime[]{time1, time2}); + assertEquals(experiment2.getProperties().size(), 2); + } + } diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java index 0f2da44c41c..bd9981986ce 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java @@ -18,6 +18,7 @@ package ch.ethz.sis.openbis.systemtest.asapi.v3; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -1535,6 +1536,153 @@ public class CreateSampleTest extends AbstractSampleTest assertEquals(sample2.getProperties().size(), 2); } + @Test + public void testCreateWithPropertyOfTypeJson() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.JSON); + EntityTypePermId sampleType = createASampleType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + SampleCreation sample = new SampleCreation(); + sample.setCode("SAMPLE_WITH_SAMPLE_PROPERTY"); + sample.setTypeId(sampleType); + sample.setSpaceId(new SpacePermId("CISD")); + sample.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + sample.setJsonProperty(propertyType.getPermId(), "{\"key\": \"value\", \"array\":[1,2,3]}"); + + // When + List<SamplePermId> sampleIds = v3api.createSamples(sessionToken, Arrays.asList(sample)); + + // Then + assertEquals(sampleIds.size(), 1); + SampleFetchOptions fetchOptions = new SampleFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Sample sample2 = v3api.getSamples(sessionToken, sampleIds, fetchOptions).get(sampleIds.get(0)); + assertEquals(sample2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(sample2.getJsonProperty(propertyType.getPermId()), "{\"key\": \"value\", \"array\": [1, 2, 3]}"); + assertEquals(sample2.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayInteger() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_INTEGER); + EntityTypePermId sampleType = createASampleType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + SampleCreation sample = new SampleCreation(); + sample.setCode("SAMPLE_WITH_SAMPLE_PROPERTY"); + sample.setTypeId(sampleType); + sample.setSpaceId(new SpacePermId("CISD")); + sample.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + sample.setIntegerArrayProperty(propertyType.getPermId(), new Long[]{1L, 2L, 3L}); + + // When + List<SamplePermId> sampleIds = v3api.createSamples(sessionToken, Arrays.asList(sample)); + + // Then + assertEquals(sampleIds.size(), 1); + SampleFetchOptions fetchOptions = new SampleFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Sample sample2 = v3api.getSamples(sessionToken, sampleIds, fetchOptions).get(sampleIds.get(0)); + assertEquals(sample2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(sample2.getIntegerArrayProperty(propertyType.getPermId()), new Long[]{1L, 2L, 3L}); + assertEquals(sample2.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayReal() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_REAL); + EntityTypePermId sampleType = createASampleType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + SampleCreation sample = new SampleCreation(); + sample.setCode("SAMPLE_WITH_SAMPLE_PROPERTY"); + sample.setTypeId(sampleType); + sample.setSpaceId(new SpacePermId("CISD")); + sample.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + sample.setRealArrayProperty(propertyType.getPermId(), new Double[]{1.0, 2.0, 3.0}); + + // When + List<SamplePermId> sampleIds = v3api.createSamples(sessionToken, Arrays.asList(sample)); + + // Then + assertEquals(sampleIds.size(), 1); + SampleFetchOptions fetchOptions = new SampleFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Sample sample2 = v3api.getSamples(sessionToken, sampleIds, fetchOptions).get(sampleIds.get(0)); + assertEquals(sample2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(sample2.getRealArrayProperty(propertyType.getPermId()), new Double[]{1.0, 2.0, 3.0}); + assertEquals(sample2.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayString() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_STRING); + EntityTypePermId sampleType = createASampleType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + SampleCreation sample = new SampleCreation(); + sample.setCode("SAMPLE_WITH_SAMPLE_PROPERTY"); + sample.setTypeId(sampleType); + sample.setSpaceId(new SpacePermId("CISD")); + sample.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + sample.setStringArrayProperty(propertyType.getPermId(), new String[]{"a", "b", "c"}); + + // When + List<SamplePermId> sampleIds = v3api.createSamples(sessionToken, Arrays.asList(sample)); + + // Then + assertEquals(sampleIds.size(), 1); + SampleFetchOptions fetchOptions = new SampleFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Sample sample2 = v3api.getSamples(sessionToken, sampleIds, fetchOptions).get(sampleIds.get(0)); + assertEquals(sample2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(sample2.getStringArrayProperty(propertyType.getPermId()), new String[]{"a", "b", "c"}); + assertEquals(sample2.getProperties().size(), 2); + } + + @Test + public void testCreateWithPropertyOfTypeArrayTimestamp() + { + // Given + String sessionToken = v3api.login(TEST_USER, PASSWORD); + PropertyTypePermId propertyType = createAPropertyType(sessionToken, DataType.ARRAY_TIMESTAMP); + EntityTypePermId sampleType = createASampleType(sessionToken, true, propertyType, PLATE_GEOMETRY); + + SampleCreation sample = new SampleCreation(); + sample.setCode("SAMPLE_WITH_SAMPLE_PROPERTY"); + sample.setTypeId(sampleType); + sample.setSpaceId(new SpacePermId("CISD")); + sample.setProperty(PLATE_GEOMETRY.getPermId(), "384_WELLS_16X24"); + ZonedDateTime time1 = ZonedDateTime.parse("2023-05-16T11:22:33+02"); + ZonedDateTime time2 = ZonedDateTime.parse("2023-05-18T11:17:03+02"); + sample.setTimestampArrayProperty(propertyType.getPermId(), new ZonedDateTime[]{time1, time2}); + + // When + List<SamplePermId> sampleIds = v3api.createSamples(sessionToken, Arrays.asList(sample)); + + // Then + assertEquals(sampleIds.size(), 1); + SampleFetchOptions fetchOptions = new SampleFetchOptions(); + fetchOptions.withProperties(); + fetchOptions.withSampleProperties(); + Sample sample2 = v3api.getSamples(sessionToken, sampleIds, fetchOptions).get(sampleIds.get(0)); + assertEquals(sample2.getProperties().get(PLATE_GEOMETRY.getPermId()), "384_WELLS_16X24"); + assertEquals(sample2.getTimestampArrayProperty(propertyType.getPermId()), new ZonedDateTime[]{time1, time2}); + assertEquals(sample2.getProperties().size(), 2); + } + @Test public void testCreateWithMultipleSamples() { -- GitLab