diff --git a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/main.js b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/main.js index b2dd49456e407ca084e592ac5df4ec3b1bc71828..3eb92302d604483ae24d4da6bdee7afb6552eee1 100644 --- a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/main.js +++ b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/main.js @@ -1,7 +1,9 @@ define([ 'test/test-login', 'test/test-jsVSjava', - 'test/test-create', 'test/test-update', 'test/test-search', + 'test/test-create', + 'test/test-update', + 'test/test-search', 'test/test-freezing', 'test/test-get', diff --git a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-create.js b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-create.js index ac42300ab7c9f905515435103b1119f28ad04683..bba5587fe768cccaa6b522bff2d6479b90aef043 100644 --- a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-create.js +++ b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-create.js @@ -199,11 +199,99 @@ define( c.assertEqual(experiment.getProject().getSpace().getCode(), "TEST", "Space code"); c.assertEqual(experiment.getProperties()[propertyTypeCodeSample], "20130412140147735-20", "Sample property id"); c.assertEqual(experiment.getProperties()[propertyTypeCodeDate], "2013-04-12", "Date property"); - c.assertEqual(experiment.getSampleProperties()[propertyTypeCodeSample].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-1", "Sample property"); + c.assertEqual(experiment.getSampleProperties()[propertyTypeCodeSample][0].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-1", "Sample property"); } testCreate(c, fCreate, c.findExperiment, fCheck); }); + + QUnit.test("createExperiment() with multi-value property of type SAMPLE", function(assert) { + var c = new common(assert, openbis); + var propertyTypeCodeSample = c.generateId("PROPERTY_TYPE"); + + var experimentTypeCode = c.generateId("EXPERIMENT_TYPE"); + var code = c.generateId("EXPERIMENT"); + + var fCreate = function(facade) { + var propertyTypeCreation1 = new c.PropertyTypeCreation(); + propertyTypeCreation1.setCode(propertyTypeCodeSample); + propertyTypeCreation1.setDescription("hello"); + propertyTypeCreation1.setDataType(c.DataType.SAMPLE); + propertyTypeCreation1.setLabel("Test Property Type"); + propertyTypeCreation1.setMultiValue(true); + return facade.createPropertyTypes([ propertyTypeCreation1 ]).then(function(results) { + var assignmentCreation1 = new c.PropertyAssignmentCreation(); + assignmentCreation1.setPropertyTypeId(new c.PropertyTypePermId(propertyTypeCodeSample)); + var experimentTypeCreation = new c.ExperimentTypeCreation(); + experimentTypeCreation.setCode(experimentTypeCode); + experimentTypeCreation.setPropertyAssignments([ assignmentCreation1 ]); + return facade.createExperimentTypes([ experimentTypeCreation ]).then(function(results) { + var creation = new c.ExperimentCreation(); + creation.setTypeId(new c.EntityTypePermId(experimentTypeCode)); + creation.setCode(code); + creation.setProjectId(new c.ProjectIdentifier("/TEST/TEST-PROJECT")); + creation.setProperty(propertyTypeCodeSample, ["20130412140147735-20", "20130424134657597-433"]); + return facade.createExperiments([ creation ]); + }); + }); + } + + var fCheck = function(experiment) { + c.assertEqual(experiment.getCode(), code, "Experiment code"); + c.assertEqual(experiment.getType().getCode(), experimentTypeCode, "Type code"); + c.assertEqual(experiment.getProject().getCode(), "TEST-PROJECT", "Project code"); + c.assertEqual(experiment.getProject().getSpace().getCode(), "TEST", "Space code"); + + var identifiers = experiment.getSampleProperties()[propertyTypeCodeSample].map(x => x.getIdentifier().getIdentifier()).sort(); + c.assertEqual(identifiers.toString(), ['/PLATONIC/SCREENING-EXAMPLES/PLATE-1', '/TEST/TEST-SAMPLE-1'].toString(), "Sample properties"); + c.assertEqual(experiment.getProperties()[propertyTypeCodeSample].sort().toString(), ["20130412140147735-20", "20130424134657597-433"].toString(), "Sample property ids"); + } + + testCreate(c, fCreate, c.findExperiment, fCheck); + }); + + QUnit.test("createExperiment() with multi-value property of type CONTROLLEDVOCABULARY", function(assert) { + var c = new common(assert, openbis); + var propertyTypeCodeVocab = c.generateId("PROPERTY_TYPE"); + + var experimentTypeCode = c.generateId("EXPERIMENT_TYPE"); + var code = c.generateId("EXPERIMENT"); + + var fCreate = function(facade) { + var propertyTypeCreation1 = new c.PropertyTypeCreation(); + propertyTypeCreation1.setCode(propertyTypeCodeVocab); + propertyTypeCreation1.setDescription("hello"); + propertyTypeCreation1.setDataType(c.DataType.CONTROLLEDVOCABULARY); + propertyTypeCreation1.setLabel("Test Property Type"); + propertyTypeCreation1.setMultiValue(true); + propertyTypeCreation1.setVocabularyId(new c.VocabularyPermId("ANTIBODY.HOST")); + return facade.createPropertyTypes([ propertyTypeCreation1 ]).then(function(results) { + var assignmentCreation1 = new c.PropertyAssignmentCreation(); + assignmentCreation1.setPropertyTypeId(new c.PropertyTypePermId(propertyTypeCodeVocab)); + var experimentTypeCreation = new c.ExperimentTypeCreation(); + experimentTypeCreation.setCode(experimentTypeCode); + experimentTypeCreation.setPropertyAssignments([ assignmentCreation1 ]); + return facade.createExperimentTypes([ experimentTypeCreation ]).then(function(results) { + var creation = new c.ExperimentCreation(); + creation.setTypeId(new c.EntityTypePermId(experimentTypeCode)); + creation.setCode(code); + creation.setProjectId(new c.ProjectIdentifier("/TEST/TEST-PROJECT")); + creation.setProperty(propertyTypeCodeVocab, ["RAT", "MOUSE"]); + return facade.createExperiments([ creation ]); + }); + }); + } + + var fCheck = function(experiment) { + c.assertEqual(experiment.getCode(), code, "Experiment code"); + c.assertEqual(experiment.getType().getCode(), experimentTypeCode, "Type code"); + c.assertEqual(experiment.getProject().getCode(), "TEST-PROJECT", "Project code"); + c.assertEqual(experiment.getProject().getSpace().getCode(), "TEST", "Space code"); + c.assertEqual(experiment.getProperties()[propertyTypeCodeVocab].sort().toString(), ["MOUSE", "RAT"].toString(), "Vocabulary property ids"); + } + + testCreate(c, fCreate, c.findExperiment, fCheck); + }); QUnit.test("createExperimentTypes()", function(assert) { var c = new common(assert, openbis); @@ -375,12 +463,93 @@ define( c.assertEqual(sample.getCode(), code, "Sample code"); c.assertEqual(sample.getType().getCode(), sampleTypeCode, "Type code"); c.assertEqual(sample.getSpace().getCode(), "TEST", "Space code"); - c.assertEqual(sample.getSampleProperties()[propertyTypeCode].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-1", "Sample property"); + c.assertEqual(sample.getSampleProperties()[propertyTypeCode][0].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-1", "Sample property"); c.assertEqual(sample.getProperties()[propertyTypeCode], "20130412140147735-20", "Sample property id"); } testCreate(c, fCreate, c.findSample, fCheck); }); + + QUnit.test("createSamples() with multi-value property of type SAMPLE", function(assert) { + var c = new common(assert, openbis); + var propertyTypeCode = c.generateId("PROPERTY_TYPE"); + var sampleTypeCode = c.generateId("SAMPLE_TYPE"); + var code = c.generateId("SAMPLE"); + + var fCreate = function(facade) { + var propertyTypeCreation = new c.PropertyTypeCreation(); + propertyTypeCreation.setCode(propertyTypeCode); + propertyTypeCreation.setDescription("hello"); + propertyTypeCreation.setDataType(c.DataType.SAMPLE); + propertyTypeCreation.setLabel("Test Property Type"); + propertyTypeCreation.setMultiValue(true); + return facade.createPropertyTypes([ propertyTypeCreation ]).then(function(results) { + var assignmentCreation = new c.PropertyAssignmentCreation(); + assignmentCreation.setPropertyTypeId(new c.PropertyTypePermId(propertyTypeCode)); + var sampleTypeCreation = new c.SampleTypeCreation(); + sampleTypeCreation.setCode(sampleTypeCode); + sampleTypeCreation.setPropertyAssignments([ assignmentCreation ]); + return facade.createSampleTypes([ sampleTypeCreation ]).then(function(results) { + var creation = new c.SampleCreation(); + creation.setTypeId(new c.EntityTypePermId(sampleTypeCode)); + creation.setCode(code); + creation.setSpaceId(new c.SpacePermId("TEST")); + creation.setProperty(propertyTypeCode, ["20130412140147735-20", "20130424134657597-433"]); + return facade.createSamples([ creation ]); + }); + }); + } + + var fCheck = function(sample) { + c.assertEqual(sample.getCode(), code, "Sample code"); + c.assertEqual(sample.getType().getCode(), sampleTypeCode, "Type code"); + c.assertEqual(sample.getSpace().getCode(), "TEST", "Space code"); + var identifiers = sample.getSampleProperties()[propertyTypeCode].map(x => x.getIdentifier().getIdentifier()).sort(); + c.assertEqual(identifiers.toString(), ['/PLATONIC/SCREENING-EXAMPLES/PLATE-1', '/TEST/TEST-SAMPLE-1'].toString(), "Sample properties"); + c.assertEqual(sample.getProperties()[propertyTypeCode].sort().toString(), ["20130412140147735-20", "20130424134657597-433"].toString(), "Sample property ids"); + } + testCreate(c, fCreate, c.findSample, fCheck); + }); + + QUnit.test("createSamples() with multi-value property of type CONTROLLEDVOCABULARY", function(assert) { + var c = new common(assert, openbis); + var propertyTypeCode = c.generateId("PROPERTY_TYPE"); + var sampleTypeCode = c.generateId("SAMPLE_TYPE"); + var code = c.generateId("SAMPLE"); + + var fCreate = function(facade) { + var propertyTypeCreation = new c.PropertyTypeCreation(); + propertyTypeCreation.setCode(propertyTypeCode); + propertyTypeCreation.setDescription("hello"); + propertyTypeCreation.setDataType(c.DataType.CONTROLLEDVOCABULARY); + propertyTypeCreation.setLabel("Test Property Type"); + propertyTypeCreation.setMultiValue(true); + propertyTypeCreation.setVocabularyId(new c.VocabularyPermId("ANTIBODY.HOST")); + return facade.createPropertyTypes([ propertyTypeCreation ]).then(function(results) { + var assignmentCreation = new c.PropertyAssignmentCreation(); + assignmentCreation.setPropertyTypeId(new c.PropertyTypePermId(propertyTypeCode)); + var sampleTypeCreation = new c.SampleTypeCreation(); + sampleTypeCreation.setCode(sampleTypeCode); + sampleTypeCreation.setPropertyAssignments([ assignmentCreation ]); + return facade.createSampleTypes([ sampleTypeCreation ]).then(function(results) { + var creation = new c.SampleCreation(); + creation.setTypeId(new c.EntityTypePermId(sampleTypeCode)); + creation.setCode(code); + creation.setSpaceId(new c.SpacePermId("TEST")); + creation.setProperty(propertyTypeCode, ["RAT", "MOUSE"]); + return facade.createSamples([ creation ]); + }); + }); + } + + var fCheck = function(sample) { + c.assertEqual(sample.getCode(), code, "Sample code"); + c.assertEqual(sample.getType().getCode(), sampleTypeCode, "Type code"); + c.assertEqual(sample.getSpace().getCode(), "TEST", "Space code"); + c.assertEqual(sample.getProperties()[propertyTypeCode].sort().toString(), ["MOUSE", "RAT"].toString(), "Vocabulary property ids"); + } + testCreate(c, fCreate, c.findSample, fCheck); + }); QUnit.test("createSampleTypes()", function(assert) { var c = new common(assert, openbis); @@ -556,7 +725,7 @@ define( c.assertEqual(dataSet.getCode(), code, "Data set code"); c.assertEqual(dataSet.getType().getCode(), dataSetTypeCode, "Type code"); c.assertEqual(dataSet.getProperties()[propertyTypeCode], "20130412140147735-20", "Sample property id"); - c.assertEqual(dataSet.getSampleProperties()[propertyTypeCode].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-1", "Sample property"); + c.assertEqual(dataSet.getSampleProperties()[propertyTypeCode][0].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-1", "Sample property"); var metaData = dataSet.getMetaData(); c.assertEqual(metaData["dataset_key"], "dataset_value", "Metadata"); @@ -565,6 +734,100 @@ define( testCreate(c, fCreate, c.findDataSet, fCheck); }); + + QUnit.test("createDataSet() with multi-value property of type SAMPLE", function(assert) { + var c = new common(assert, openbis); + var propertyTypeCode = c.generateId("PROPERTY_TYPE"); + var dataSetTypeCode = c.generateId("DATA_SET_TYPE"); + var code = c.generateId("DATA_SET"); + + var fCreate = function(facade) { + var propertyTypeCreation = new c.PropertyTypeCreation(); + propertyTypeCreation.setCode(propertyTypeCode); + propertyTypeCreation.setDescription("hello"); + propertyTypeCreation.setDataType(c.DataType.SAMPLE); + propertyTypeCreation.setLabel("Test Property Type"); + propertyTypeCreation.setMultiValue(true); + return facade.createPropertyTypes([ propertyTypeCreation ]).then(function(results) { + var assignmentCreation = new c.PropertyAssignmentCreation(); + assignmentCreation.setPropertyTypeId(new c.PropertyTypePermId(propertyTypeCode)); + var dataSetTypeCreation = new c.DataSetTypeCreation(); + dataSetTypeCreation.setCode(dataSetTypeCode); + dataSetTypeCreation.setPropertyAssignments([ assignmentCreation ]); + return facade.createDataSetTypes([ dataSetTypeCreation ]).then(function(results) { + var creation = new c.DataSetCreation(); + creation.setTypeId(new c.EntityTypePermId(dataSetTypeCode)); + creation.setCode(code); + creation.setDataSetKind(c.DataSetKind.CONTAINER); + creation.setDataStoreId(new c.DataStorePermId("DSS1")); + creation.setExperimentId(new c.ExperimentIdentifier("/TEST/TEST-PROJECT/TEST-EXPERIMENT")); + creation.setProperty(propertyTypeCode, ["20130412140147735-20", "20130424134657597-433"]); + creation.setMetaData({"dataset_key":"dataset_value"}); + return facade.createDataSets([ creation ]); + }); + }); + } + + var fCheck = function(dataSet) { + c.assertEqual(dataSet.getCode(), code, "Data set code"); + c.assertEqual(dataSet.getType().getCode(), dataSetTypeCode, "Type code"); + + var identifiers = dataSet.getSampleProperties()[propertyTypeCode].map(x => x.getIdentifier().getIdentifier()).sort(); + c.assertEqual(identifiers.toString(), ['/PLATONIC/SCREENING-EXAMPLES/PLATE-1', '/TEST/TEST-SAMPLE-1'].toString(), "Sample properties"); + c.assertEqual(dataSet.getProperties()[propertyTypeCode].sort().toString(), ["20130412140147735-20", "20130424134657597-433"].toString(), "Sample property ids"); + + var metaData = dataSet.getMetaData(); + c.assertEqual(metaData["dataset_key"], "dataset_value", "Metadata"); + + } + + testCreate(c, fCreate, c.findDataSet, fCheck); + }); + + QUnit.test("createDataSet() with multi-value property of type CONTROLLEDVOCABULARY", function(assert) { + var c = new common(assert, openbis); + var propertyTypeCode = c.generateId("PROPERTY_TYPE"); + var dataSetTypeCode = c.generateId("DATA_SET_TYPE"); + var code = c.generateId("DATA_SET"); + + var fCreate = function(facade) { + var propertyTypeCreation = new c.PropertyTypeCreation(); + propertyTypeCreation.setCode(propertyTypeCode); + propertyTypeCreation.setDescription("hello"); + propertyTypeCreation.setDataType(c.DataType.CONTROLLEDVOCABULARY); + propertyTypeCreation.setLabel("Test Property Type"); + propertyTypeCreation.setMultiValue(true); + propertyTypeCreation.setVocabularyId(new c.VocabularyPermId("ANTIBODY.HOST")); + return facade.createPropertyTypes([ propertyTypeCreation ]).then(function(results) { + var assignmentCreation = new c.PropertyAssignmentCreation(); + assignmentCreation.setPropertyTypeId(new c.PropertyTypePermId(propertyTypeCode)); + var dataSetTypeCreation = new c.DataSetTypeCreation(); + dataSetTypeCreation.setCode(dataSetTypeCode); + dataSetTypeCreation.setPropertyAssignments([ assignmentCreation ]); + return facade.createDataSetTypes([ dataSetTypeCreation ]).then(function(results) { + var creation = new c.DataSetCreation(); + creation.setTypeId(new c.EntityTypePermId(dataSetTypeCode)); + creation.setCode(code); + creation.setDataSetKind(c.DataSetKind.CONTAINER); + creation.setDataStoreId(new c.DataStorePermId("DSS1")); + creation.setExperimentId(new c.ExperimentIdentifier("/TEST/TEST-PROJECT/TEST-EXPERIMENT")); + creation.setProperty(propertyTypeCode, ["RAT", "MOUSE"]); + creation.setMetaData({"dataset_key":"dataset_value"}); + return facade.createDataSets([ creation ]); + }); + }); + } + + var fCheck = function(dataSet) { + c.assertEqual(dataSet.getCode(), code, "Data set code"); + c.assertEqual(dataSet.getType().getCode(), dataSetTypeCode, "Type code"); + c.assertEqual(dataSet.getProperties()[propertyTypeCode].sort().toString(), ["MOUSE", "RAT"].toString(), "Vocabulary property ids"); + var metaData = dataSet.getMetaData(); + c.assertEqual(metaData["dataset_key"], "dataset_value", "Metadata"); + } + + testCreate(c, fCreate, c.findDataSet, fCheck); + }); QUnit.test("createDataSetTypes()", function(assert) { var c = new common(assert, openbis); diff --git a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-search.js b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-search.js index 86163a252444a76305fb580a3b0d2792e22a12bb..5e16a056a0199f76ed0fc3daca9c7f8232fbba1e 100644 --- a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-search.js +++ b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-search.js @@ -3682,7 +3682,6 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', ' } var fCleanup = function(facade, samples) { - debugger; if (samples) { cleanup(c, facade, samples[0].getPermId(), propertyTypeId, sampleTypeId); } @@ -3723,7 +3722,6 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', ' } var fCleanup = function(facade, samples) { - debugger; if (samples) { cleanup(c, facade, samples[0].getPermId(), propertyTypeId, sampleTypeId); } @@ -3775,7 +3773,6 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', ' } var testDataType = function(i) { - debugger; var dataType = dataTypes[i]; var fSearch = function(facade) { return createPropertyType(c, facade, dataType).then(function(propertyTypeIds) { @@ -3785,13 +3782,11 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', ' } var fCheck = function() { - debugger; c.fail("Expected exception not thrown for data type " + dataType + "."); fRecursion(i); } testSearch(c, fSearch, fCheck, function(e) { - debugger; c.ok("Expected exception thrown for data type " + dataType + "."); fRecursion(i); }); diff --git a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-update.js b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-update.js index 9c1cc46217e561cfc7308d8292c5db17d9ad23d9..6dd6b2aa1b5af3a5c6ad1f93e22e2775840f562b 100644 --- a/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-update.js +++ b/test-api-openbis-javascript/servers/common/core-plugins/tests/1/as/webapps/openbis-v3-api-test/html/test/test-update.js @@ -386,13 +386,66 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', ' c.assertEqual(experiment.getType().getCode(), experimentTypeCode, "Type code"); c.assertEqual(experiment.getProject().getCode(), "TEST-PROJECT", "Project code"); c.assertEqual(experiment.getProject().getSpace().getCode(), "TEST", "Space code"); - c.assertEqual(experiment.getSampleProperties()[propertyTypeCode].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property"); + c.assertEqual(experiment.getSampleProperties()[propertyTypeCode][0].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property"); c.assertEqual(experiment.getHistory()[0].getPropertyName(), propertyTypeCode, "Previous sample property name"); c.assertEqual(experiment.getHistory()[0].getPropertyValue(), "20130412140147735-20", "Previous sample property value"); } testUpdate(c, fCreate, fUpdate, c.findExperiment, fCheck); }); + + QUnit.test("updateExperiment() change multi-value property of type SAMPLE", function(assert) { + var c = new common(assert, openbis); + var propertyTypeCode = c.generateId("PROPERTY_TYPE"); + var experimentTypeCode = c.generateId("EXPERIMENT_TYPE"); + var code = c.generateId("EXPERIMENT"); + + var fCreate = function(facade) { + var propertyTypeCreation = new c.PropertyTypeCreation(); + propertyTypeCreation.setCode(propertyTypeCode); + propertyTypeCreation.setDescription("hello"); + propertyTypeCreation.setDataType(c.DataType.SAMPLE); + propertyTypeCreation.setLabel("Test Property Type"); + propertyTypeCreation.setMultiValue(true); + return facade.createPropertyTypes([ propertyTypeCreation ]).then(function(results) { + var assignmentCreation = new c.PropertyAssignmentCreation(); + assignmentCreation.setPropertyTypeId(new c.PropertyTypePermId(propertyTypeCode)); + var experimentTypeCreation = new c.ExperimentTypeCreation(); + experimentTypeCreation.setCode(experimentTypeCode); + experimentTypeCreation.setPropertyAssignments([ assignmentCreation ]); + return facade.createExperimentTypes([ experimentTypeCreation ]).then(function(results) { + var creation = new c.ExperimentCreation(); + creation.setTypeId(new c.EntityTypePermId(experimentTypeCode)); + creation.setCode(code); + creation.setProjectId(new c.ProjectIdentifier("/TEST/TEST-PROJECT")); + creation.setProperty(propertyTypeCode, ["20130412140147735-20", "20130424134657597-433"]); + return facade.createExperiments([ creation ]); + }); + }); + } + + var fUpdate = function(facade, permId) { + var update = new c.ExperimentUpdate(); + update.setExperimentId(permId); + update.setProperty(propertyTypeCode, "20130412140147736-21"); + return facade.updateExperiments([ update ]); + } + + var fCheck = function(experiment) { + c.assertEqual(experiment.getCode(), code, "Experiment code"); + c.assertEqual(experiment.getType().getCode(), experimentTypeCode, "Type code"); + c.assertEqual(experiment.getProject().getCode(), "TEST-PROJECT", "Project code"); + c.assertEqual(experiment.getProject().getSpace().getCode(), "TEST", "Space code"); + c.assertEqual(experiment.getSampleProperties()[propertyTypeCode][0].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property"); + + var history = experiment.getHistory().filter(x => x.propertyName == propertyTypeCode && x.validTo); + c.assertEqual(history.length, 2, "Previous sample property name"); + c.assertEqual(history.map(x => x.propertyValue).sort().toString(), ["20130412140147735-20", "20130424134657597-433"].toString(), "Previous sample property value"); + + } + + testUpdate(c, fCreate, fUpdate, c.findExperiment, fCheck); + }); QUnit.test("updateSampleTypes()", function(assert) { var c = new common(assert, openbis); @@ -676,13 +729,63 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', ' c.assertEqual(sample.getCode(), code, "Sample code"); c.assertEqual(sample.getType().getCode(), sampleTypeCode, "Type code"); c.assertEqual(sample.getSpace().getCode(), "TEST", "Space code"); - c.assertEqual(sample.getSampleProperties()[propertyTypeCode].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property"); + c.assertEqual(sample.getSampleProperties()[propertyTypeCode][0].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property"); c.assertEqual(sample.getHistory()[0].getPropertyName(), propertyTypeCode, "Previous sample property name"); c.assertEqual(sample.getHistory()[0].getPropertyValue(), "20130412140147735-20", "Previous sample property value"); } testUpdate(c, fCreate, fUpdate, c.findSample, fCheck); }); + + QUnit.test("updateSamples() change multi-value property of type SAMPLE", function(assert) { + var c = new common(assert, openbis); + var propertyTypeCode = c.generateId("PROPERTY_TYPE"); + var sampleTypeCode = c.generateId("SAMPLE_TYPE"); + var code = c.generateId("SAMPLE"); + + var fCreate = function(facade) { + var propertyTypeCreation = new c.PropertyTypeCreation(); + propertyTypeCreation.setCode(propertyTypeCode); + propertyTypeCreation.setDescription("hello"); + propertyTypeCreation.setDataType(c.DataType.SAMPLE); + propertyTypeCreation.setLabel("Test Property Type"); + propertyTypeCreation.setMultiValue(true); + return facade.createPropertyTypes([ propertyTypeCreation ]).then(function(results) { + var assignmentCreation = new c.PropertyAssignmentCreation(); + assignmentCreation.setPropertyTypeId(new c.PropertyTypePermId(propertyTypeCode)); + var sampleTypeCreation = new c.SampleTypeCreation(); + sampleTypeCreation.setCode(sampleTypeCode); + sampleTypeCreation.setPropertyAssignments([ assignmentCreation ]); + return facade.createSampleTypes([ sampleTypeCreation ]).then(function(results) { + var creation = new c.SampleCreation(); + creation.setTypeId(new c.EntityTypePermId(sampleTypeCode)); + creation.setCode(code); + creation.setSpaceId(new c.SpacePermId("TEST")); + creation.setProperty(propertyTypeCode, ["20130412140147735-20", "20130424134657597-433"]); + return facade.createSamples([ creation ]); + }); + }); + } + + var fUpdate = function(facade, permId) { + var update = new c.SampleUpdate(); + update.setSampleId(permId); + update.setProperty(propertyTypeCode, "20130412140147736-21"); + return facade.updateSamples([ update ]); + } + + var fCheck = function(sample) { + c.assertEqual(sample.getCode(), code, "Sample code"); + c.assertEqual(sample.getType().getCode(), sampleTypeCode, "Type code"); + c.assertEqual(sample.getSpace().getCode(), "TEST", "Space code"); + c.assertEqual(sample.getSampleProperties()[propertyTypeCode][0].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property"); + var history = sample.getHistory().filter(x => x.propertyName == propertyTypeCode && x.validTo); + c.assertEqual(history.length, 2, "Previous sample property name"); + c.assertEqual(history.map(x => x.propertyValue).sort().toString(), ["20130412140147735-20", "20130424134657597-433"].toString(), "Previous sample property value"); + } + + testUpdate(c, fCreate, fUpdate, c.findSample, fCheck); + }); QUnit.test("updateSamples() remove property of type SAMPLE", function(assert) { var c = new common(assert, openbis); @@ -887,7 +990,7 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', ' var fCheck = function(dataSet) { c.assertEqual(dataSet.getCode(), code, "Data set code"); c.assertEqual(dataSet.getType().getCode(), dataSetTypeCode, "Type code"); - c.assertEqual(dataSet.getSampleProperties()[propertyTypeCode].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property"); + c.assertEqual(dataSet.getSampleProperties()[propertyTypeCode][0].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property"); c.assertEqual(dataSet.getHistory()[0].getPropertyName(), propertyTypeCode, "Previous sample property name"); c.assertEqual(dataSet.getHistory()[0].getPropertyValue(), "20130412140147735-20", "Previous sample property value"); @@ -899,6 +1002,66 @@ define([ 'jquery', 'underscore', 'openbis', 'test/openbis-execute-operations', ' testUpdate(c, fCreate, fUpdate, c.findDataSet, fCheck); }); + + QUnit.test("updateDataSet() change multi-value property of type SAMPLE", function(assert) { + var c = new common(assert, openbis); + var propertyTypeCode = c.generateId("PROPERTY_TYPE"); + var dataSetTypeCode = c.generateId("DATA_SET_TYPE"); + var code = c.generateId("DATA_SET"); + + var fCreate = function(facade) { + var propertyTypeCreation = new c.PropertyTypeCreation(); + propertyTypeCreation.setCode(propertyTypeCode); + propertyTypeCreation.setDescription("hello"); + propertyTypeCreation.setDataType(c.DataType.SAMPLE); + propertyTypeCreation.setLabel("Test Property Type"); + propertyTypeCreation.setMultiValue(true); + return facade.createPropertyTypes([ propertyTypeCreation ]).then(function(results) { + var assignmentCreation = new c.PropertyAssignmentCreation(); + assignmentCreation.setPropertyTypeId(new c.PropertyTypePermId(propertyTypeCode)); + var dataSetTypeCreation = new c.DataSetTypeCreation(); + dataSetTypeCreation.setCode(dataSetTypeCode); + dataSetTypeCreation.setPropertyAssignments([ assignmentCreation ]); + return facade.createDataSetTypes([ dataSetTypeCreation ]).then(function(results) { + var creation = new c.DataSetCreation(); + creation.setTypeId(new c.EntityTypePermId(dataSetTypeCode)); + creation.setCode(code); + creation.setDataSetKind(c.DataSetKind.CONTAINER); + creation.setDataStoreId(new c.DataStorePermId("DSS1")); + creation.setExperimentId(new c.ExperimentIdentifier("/TEST/TEST-PROJECT/TEST-EXPERIMENT")); + creation.setProperty(propertyTypeCode, ["20130412140147735-20", "20130424134657597-433"]); + creation.setMetaData({"dataset_update":"old_value", "dataset_delete":"del_value"}); + return facade.createDataSets([ creation ]); + }); + }); + } + + var fUpdate = function(facade, permId) { + var update = new c.DataSetUpdate(); + update.setDataSetId(permId); + update.setProperty(propertyTypeCode, "20130412140147736-21"); + update.getMetaData().put("dataset_update", "new_value"); + update.getMetaData().add({"dataset_add":"add_value"}); + update.getMetaData().remove("dataset_delete"); + return facade.updateDataSets([ update ]); + } + + var fCheck = function(dataSet) { + c.assertEqual(dataSet.getCode(), code, "Data set code"); + c.assertEqual(dataSet.getType().getCode(), dataSetTypeCode, "Type code"); + c.assertEqual(dataSet.getSampleProperties()[propertyTypeCode][0].getIdentifier().getIdentifier(), "/PLATONIC/SCREENING-EXAMPLES/PLATE-2", "Sample property"); + var history = dataSet.getHistory().filter(x => x.propertyName == propertyTypeCode && x.validTo); + c.assertEqual(history.length, 2, "Previous sample property name"); + c.assertEqual(history.map(x => x.propertyValue).sort().toString(), ["20130412140147735-20", "20130424134657597-433"].toString(), "Previous sample property value"); + + var metaData = dataSet.getMetaData(); + c.assertEqual(metaData["dataset_update"], "new_value", "Metadata update"); + c.assertEqual(metaData["dataset_add"], "add_value", "Metadata add"); + c.assertEqual(metaData["dataset_delete"], undefined, "Metadata delete"); + } + + testUpdate(c, fCreate, fUpdate, c.findDataSet, fCheck); + }); QUnit.test("updateDataSets() link data set", function(assert) { var c = new common(assert, openbis);