From f87e09555b69eb1ec5397e8d660ca44dfc2b8c29 Mon Sep 17 00:00:00 2001
From: pkupczyk <pkupczyk>
Date: Fri, 8 Mar 2013 15:56:03 +0000
Subject: [PATCH] SP-529 / BIS-151 : Provide only one version of openbis.js
 file - new generic methods covered

SVN: 28560
---
 .../applications/openbis-test/openbis-test.js | 338 +++++++++++++++++-
 1 file changed, 328 insertions(+), 10 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/applications/openbis-test/openbis-test.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/applications/openbis-test/openbis-test.js
index 2c6a109a574..b94f3dac446 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/applications/openbis-test/openbis-test.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/resources/applications/openbis-test/openbis-test.js
@@ -52,32 +52,57 @@ var createNewVocabularyTerm = function(code, previousTermOrdinal){
 	};
 }
 
+var createWebAppSettings = function(webAppId, settings){
+	return {
+		"@type" : "WebAppSettings",
+		"webAppId" : webAppId,
+		"settings" : settings
+	};
+}
+
+var createDataSetFileDTO = function(dataSetCode, path, isRecursive){
+	return {
+		"@type" : "DataSetFileDTO",
+		"dataSetCode" : dataSetCode,
+		"path" : path,
+		"isRecursive" : isRecursive 
+	};
+}
+
 var createNewMetaproject = function(facade, identifierString, action){
 	var parts = identifierString.split("/");
 	var ownerId = parts[1];
 	var name = parts[2];
 
 	facade.listMetaprojects(function(response){
-		var exists = response.result.some(function(metaproject){
-			return metaproject.ownerId == ownerId && metaproject.name == name;
-		});
+		var metaproject = findMetaproject(response.result, identifierString);
 		
-		if(exists){
+		if(metaproject){
 			var id = createMetaprojectIdentifierId(identifierString);
 			
 			facade.deleteMetaproject(id, function(response){
 				facade.createMetaproject(name, null, function(response){
-					action();
+					action(response);
 				});
 			});
 		}else{
 			facade.createMetaproject(name, null, function(response){
-				action();
+				action(response);
 			});
 		}
 	});
 }
 
+var findMetaproject = function(metaprojects, identifierString){
+	var parts = identifierString.split("/");
+	var ownerId = parts[1];
+	var name = parts[2];
+	
+	return metaprojects.filter(function(metaproject){
+		return metaproject.ownerId == ownerId && metaproject.name == name;
+	})[0];
+}
+
 var findVocabulary = function(vocabularies, code){
 	return vocabularies.filter(function(vocabulary){
 		return vocabulary.code == code;
@@ -98,6 +123,17 @@ var findVocabularyMaxOrdinal = function(vocabulary){
 	return max;
 };
 
+var downloadFile = function(url, action){
+	$.ajax({
+		url: url,
+		cache: false
+	}).done(function(data) {
+		action(data);
+	}).fail(function(){
+		action(null);
+	});
+}
+
 test("logout", function(){
 	createFacade(function(facade){
 		facade.logout(function(){
@@ -623,7 +659,7 @@ test("searchForMaterials()", function(){
 	});
 });
 
-test("listMetaprojects()", function(){
+test("createMetaproject(), listMetaprojects()", function(){
 	createFacadeAndLogin(function(facade){
 		createNewMetaproject(facade, "/admin/JS_TEST_METAPROJECT", function(response){
 			facade.listMetaprojects(function(response){
@@ -635,7 +671,7 @@ test("listMetaprojects()", function(){
 	});
 });
 
-test("getMetaproject()", function(){
+test("createMetaproject(), getMetaproject()", function(){
 	createFacadeAndLogin(function(facade){
 		var metaprojectIdentifier = "/admin/JS_TEST_METAPROJECT";
 		
@@ -650,6 +686,82 @@ test("getMetaproject()", function(){
 	});
 });
 
+test("createMetaproject(), updateMetaproject()", function(){
+	createFacadeAndLogin(function(facade){
+		var metaprojectIdentifier = "/admin/JS_TEST_METAPROJECT";
+		
+		createNewMetaproject(facade, metaprojectIdentifier, function(response){
+			var metaproject = response.result;
+			var metaprojectId = createMetaprojectIdentifierId(metaprojectIdentifier);
+			var description = new Date().getTime().toString();
+			
+			ok(!metaproject.description, "Metaproject description was empty");
+			
+			facade.updateMetaproject(metaprojectId, metaproject.name, description, function(response){
+				facade.getMetaproject(metaprojectId, function(response){
+					equal(response.result.metaproject.description, description, "Metaproject description properly updated");
+					facade.close();
+				});
+			})
+		});
+	});
+});
+
+test("createMetaproject(), deleteMetaproject()", function(){
+	createFacadeAndLogin(function(facade){
+		var metaprojectIdentifier = "/admin/JS_TEST_METAPROJECT";
+		
+		createNewMetaproject(facade, metaprojectIdentifier, function(response){
+			var metaprojectId = createMetaprojectIdentifierId(metaprojectIdentifier);
+			
+			facade.deleteMetaproject(metaprojectId, function(response){
+				facade.listMetaprojects(function(response){
+					ok(!findMetaproject(response.result, metaprojectIdentifier), "Metaproject has been deleted");
+					facade.close();
+				});
+			})
+		});
+	});
+});
+
+test("createMetaproject(), addToMetaproject(), removeFromMetaproject()", function(){
+	createFacadeAndLogin(function(facade){
+		var metaprojectIdentifier = "/admin/JS_TEST_METAPROJECT";
+		
+		createNewMetaproject(facade, metaprojectIdentifier, function(response){
+			var metaprojectId = createMetaprojectIdentifierId(metaprojectIdentifier);
+			
+			facade.getMetaproject(metaprojectId, function(response){
+				var assignments = response.result;
+				assertObjectsCount(response.result.samples, 0);
+				
+				var assignmentsIds = {
+					"@type" : "MetaprojectAssignmentsIds",
+					"samples" : [ createSampleIdentifierId("/PLATONIC/PLATE-1") ]
+				};
+				
+				facade.addToMetaproject(metaprojectId, assignmentsIds, function(response){
+					facade.getMetaproject(metaprojectId, function(response){
+						var assignments = response.result;
+						assertObjectsCount(assignments.samples, 1);
+						assertObjectsWithCodes(assignments.samples, ['PLATE-1']);
+						
+						facade.removeFromMetaproject(metaprojectId, assignmentsIds, function(response){
+							facade.getMetaproject(metaprojectId, function(response){
+								var assignments = response.result;
+								assertObjectsCount(assignments.samples, 0);
+								facade.close();
+							});
+						});
+					});
+				});
+			});
+		});
+	});
+});
+
+
+
 test("listAttachmentsForProject()", function(){
 	createFacadeAndLogin(function(facade){
 		var projectId = createProjectIdentifierId("/TEST/TEST-PROJECT");
@@ -696,7 +808,7 @@ test("listAttachmentsForSample()", function(){
 
 */
 
-test("updateSampleProperties()", function(){
+test("updateSampleProperties(), searchForSamples()", function(){
 	createFacadeAndLogin(function(facade){
 		var sampleCodes = ['PLATE-1'];
 		var searchCriteria = createSearchCriteriaForCodes(sampleCodes);
@@ -719,7 +831,7 @@ test("updateSampleProperties()", function(){
 	});
 });
 
-test("addUnofficialVocabularyTerm()", function(){
+test("addUnofficialVocabularyTerm(), listVocabularies()", function(){
 	createFacadeAndLogin(function(facade){
 		var vocabularyCode = "MICROSCOPE";
 		var termCode = new Date().getTime().toString();
@@ -746,3 +858,209 @@ test("addUnofficialVocabularyTerm()", function(){
 		});
 	});
 });
+
+test("setWebAppSettings(), getWebAppSettings()", function(){
+	createFacadeAndLogin(function(facade){
+		var webAppId = new Date().getTime().toString();
+		
+		facade.getWebAppSettings(webAppId, function(response){
+			deepEqual(response.result.settings, {}, 'Web app settings are empty');
+			
+			var settings = {
+				"param1" : "value1",
+				"param2" : "value2"
+			};
+			var webAppSettings = createWebAppSettings(webAppId, settings);
+			
+			facade.setWebAppSettings(webAppSettings, function(response){
+				facade.getWebAppSettings(webAppId, function(response){
+					deepEqual(response.result.settings, settings, "Web app settings properly updated");
+					facade.close();
+				});
+			});
+		});
+	});
+});
+
+
+/*
+
+TODO add queries
+
+test("listQueries()", function(){
+	createFacadeAndLogin(function(facade){
+		facade.listQueries(function(response){
+		});
+	});
+});
+
+*/
+
+/*
+
+TODO add queries
+
+test("executeQuery()", function(){
+	createFacadeAndLogin(function(facade){
+		facade.executeQuery(queryId, parameterBindings, function(response){
+		});
+	});
+});
+
+*/
+
+test("listTableReportDescriptions()", function(){
+	createFacadeAndLogin(function(facade){
+		facade.listTableReportDescriptions(function(response){
+			assertObjectsCount(response.result, 3);
+			facade.close();
+		});
+	});
+});
+
+test("createReportFromDataSets()", function(){
+	createFacadeAndLogin(function(facade){
+		var dataStoreCode = "DSS-SCREENING";
+		var serviceKey = "default-plate-image-analysis";
+		var dataSetCodes = [ "20110913112215416-82999" ];
+		
+		facade.createReportFromDataSets(dataStoreCode, serviceKey, dataSetCodes, function(response){
+			ok(response.result, "Report has been created");
+			facade.close();
+		});
+	});
+});
+
+test("listAggregationServices()", function(){
+	createFacadeAndLogin(function(facade){
+		facade.listAggregationServices(function(response){
+			assertObjectsCount(response.result, 2);
+			facade.close();
+		});
+	});
+});
+
+/*
+
+TODO add aggregation service that can be called via JSON (FeatureListsAggregationServicePlugin 
+cannot be called because the required DatasetDescription parameter cannot be created in javascript)
+
+test("createReportFromAggregationService()", function(){
+	createFacadeAndLogin(function(facade){
+		facade.createReportFromAggregationService(dataStoreCode, serviceKey, parameters, function(response){
+		});
+	});
+});
+
+*/
+
+/*
+
+TODO this only works when an HTTP session exists (it is only created during login via WEB UI)
+
+test("getSessionTokenFromServer()", function(){
+	createFacadeAndLogin(function(facade){
+		facade.getSessionTokenFromServer(function(response){
+			ok(response.result, "Got session token");
+			facade.close();
+		});
+	});
+});
+
+*/
+
+test("listFilesForDataSetFile()", function(){
+	createFacadeAndLogin(function(facade){
+		var fileOrFolder = createDataSetFileDTO("20110913114645299-83009", "/original", true);
+		
+		facade.listFilesForDataSetFile(fileOrFolder, function(response){
+			assertObjectsCount(response.result, 151);
+			facade.close();
+		});
+	});
+});
+
+test("getDownloadUrlForFileForDataSetFile()", function(){
+	createFacadeAndLogin(function(facade){
+		var fileOrFolder = createDataSetFileDTO("20110913114645299-83009", "/original/SERIES-1/bPLATE_w_s1_z0_t0_cRGB.png", false);
+		
+		facade.getDownloadUrlForFileForDataSetFile(fileOrFolder, function(response){
+			ok(response.result, "Got download url");
+			
+			downloadFile(response.result, function(data){
+				ok(data, "Download url works");
+				facade.close();
+			});
+		});
+	});
+});
+
+test("getDownloadUrlForFileForDataSetFileWithTimeout()", function(){
+	createFacadeAndLogin(function(facade){
+		var fileOrFolder = createDataSetFileDTO("20110913114645299-83009", "/original/SERIES-1/bPLATE_w_s1_z0_t0_cRGB.png", false);
+		var validityDurationInSeconds = 10;
+		
+		facade.getDownloadUrlForFileForDataSetFileWithTimeout(fileOrFolder, validityDurationInSeconds, function(response){
+			ok(response.result, "Got download url");
+
+			downloadFile(response.result, function(data){
+				ok(data, "Download url works once");
+				
+				downloadFile(response.result, function(data){
+					ok(!data, "Download url does not work anymore");
+					facade.close();	
+				});
+			});
+		});
+	});
+});
+
+test("listFilesForDataSet()", function(){
+	createFacadeAndLogin(function(facade){
+		var dataSetCode = "20110913114645299-83009";
+		var path = "/original";
+		var recursive = true;
+		
+		facade.listFilesForDataSet(dataSetCode, path, recursive, function(response){
+			assertObjectsCount(response.result, 151);
+			facade.close();
+		});
+	});
+});
+
+test("getDownloadUrlForFileForDataSet()", function(){
+	createFacadeAndLogin(function(facade){
+		var dataSetCode = "20110913114645299-83009";
+		var path = "/original/SERIES-1/bPLATE_w_s1_z0_t0_cRGB.png";
+		
+		facade.getDownloadUrlForFileForDataSet(dataSetCode, path, function(response){
+			ok(response.result, "Got download url");
+			
+			downloadFile(response.result, function(data){
+				ok(data, "Download url works");
+				facade.close();
+			});
+		});
+	});
+});
+
+test("getDownloadUrlForFileForDataSetWithTimeout()", function(){
+	createFacadeAndLogin(function(facade){
+		var dataSetCode = "20110913114645299-83009";
+		var path = "/original/SERIES-1/bPLATE_w_s1_z0_t0_cRGB.png";
+		var validityDurationInSeconds = 10;
+		
+		facade.getDownloadUrlForFileForDataSetWithTimeout(dataSetCode, path, validityDurationInSeconds, function(response){
+			ok(response.result, "Got download url");
+
+			downloadFile(response.result, function(data){
+				ok(data, "Download url works once");
+				
+				downloadFile(response.result, function(data){
+					ok(!data, "Download url does not work anymore");
+					facade.close();	
+				});
+			});
+		});
+	});
+});
-- 
GitLab