From 33569da7a2dd869988bc2e8fd767a76b21596b9d Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 28 Sep 2018 10:45:53 +0200
Subject: [PATCH] default plugin list contains name and version

---
 frontend-js/src/main/js/gui/PluginDialog.js   | 40 +++++++----
 .../src/test/js/gui/PluginDialog-test.js      | 70 +++++++++++++++++++
 2 files changed, 95 insertions(+), 15 deletions(-)
 create mode 100644 frontend-js/src/test/js/gui/PluginDialog-test.js

diff --git a/frontend-js/src/main/js/gui/PluginDialog.js b/frontend-js/src/main/js/gui/PluginDialog.js
index ef54a43fcf..19a0b2488a 100644
--- a/frontend-js/src/main/js/gui/PluginDialog.js
+++ b/frontend-js/src/main/js/gui/PluginDialog.js
@@ -13,6 +13,7 @@ var Promise = require('bluebird');
  * @param {CustomMap} params.customMap
  * @param {Configuration} params.configuration
  * @param {Project} params.project
+ * @param {PluginManager} params.pluginManager
  * @param {ServerConnector} [params.serverConnector]
  *
  * @constructor
@@ -23,6 +24,7 @@ function PluginDialog(params) {
   AbstractGuiElement.call(this, params);
   var self = this;
   self.setPluginManager(params.pluginManager);
+  // @type {PluginData[]}
   self._knownPlugins = [];
 }
 
@@ -86,16 +88,19 @@ PluginDialog.prototype._createPluginGui = function () {
 
   for (i = 0; i < self._knownPlugins.length; i++) {
     var pluginData = self._knownPlugins[i];
-    var url = pluginData.url;
 
-    var pluginUrl = Functions.createElement({
-      type: "input",
-      value: url,
-      style: "color:#999999"
-    });
-    pluginUrl.readOnly = true;
-    var button;
-    if (!loadedPlugins[url]) {
+    if (!loadedPlugins[pluginData.getUrls()[0]]) {
+      var pluginUrl = Functions.createElement({
+        type: "input",
+        value: pluginData.getUrls()[0],
+        style: "color:#999999"
+      });
+      var pluginName = Functions.createElement({
+        type: "span",
+        content: pluginData.getName() + " (" + pluginData.getVersion() + ")"
+      });
+      pluginUrl.readOnly = true;
+      var button;
       button = Functions.createElement({
         type: "button",
         content: "LOAD",
@@ -105,10 +110,10 @@ PluginDialog.prototype._createPluginGui = function () {
           }).then(null, GuiConnector.alert);
         }
       });
-    }
-    $(button).data("url", url);
+      $(button).data("url", pluginData.getUrls()[0]);
 
-    pluginFormTab.appendChild(guiUtils.createTableRow([Functions.createElement({type: "span"}), pluginUrl, button]));
+      pluginFormTab.appendChild(guiUtils.createTableRow([pluginName, pluginUrl, button]));
+    }
   }
   for (i = 0; i < plugins.length; i++) {
     var plugin = plugins[i];
@@ -122,9 +127,14 @@ PluginDialog.prototype._createPluginGui = function () {
     })();
     pluginUrl = Functions.createElement({
       type: "input",
-      value: plugins[i].getOptions().url,
+      value: plugin.getOptions().url,
       style: "color:#999999"
     });
+    pluginName = Functions.createElement({
+      type: "span",
+      content: plugin.getName() + " (" + plugin.getVersion() + ")"
+    });
+
     pluginUrl.readOnly = true;
     button = Functions.createElement({
       type: "button",
@@ -132,7 +142,7 @@ PluginDialog.prototype._createPluginGui = function () {
       onclick: removePlugin
     });
 
-    pluginFormTab.appendChild(guiUtils.createTableRow([Functions.createElement({type: "span"}), pluginUrl, button]));
+    pluginFormTab.appendChild(guiUtils.createTableRow([pluginName, pluginUrl, button]));
 
   }
 };
@@ -147,7 +157,7 @@ PluginDialog.prototype.init = function () {
     for (var i = 0; i < pluginsData.length; i++) {
       var pluginData = pluginsData[i];
       if (pluginData.isPublic()) {
-        self._knownPlugins.push({url: self.getServerConnector().getServerBaseUrl() + pluginData.getUrls()[0]});
+        self._knownPlugins.push(pluginData);
       }
     }
   });
diff --git a/frontend-js/src/test/js/gui/PluginDialog-test.js b/frontend-js/src/test/js/gui/PluginDialog-test.js
new file mode 100644
index 0000000000..8523d0a49e
--- /dev/null
+++ b/frontend-js/src/test/js/gui/PluginDialog-test.js
@@ -0,0 +1,70 @@
+"use strict";
+
+require("../mocha-config.js");
+var ServerConnector = require('../ServerConnector-mock');
+
+var CustomMap = require('../../../main/js/map/CustomMap');
+var PluginData = require('../../../main/js/map/data/PluginData');
+var PluginDialog = require('../../../main/js/gui/PluginDialog');
+var PluginManager= require('../../../main/js/plugin/PluginManager');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('PluginDialog', function () {
+
+  it('init', function () {
+    var pluginDialog;
+    return ServerConnector.getProject().then(function (project) {
+      var map = helper.createCustomMap(project);
+
+      pluginDialog = new PluginDialog({
+        element: testDiv,
+        customMap: map,
+        pluginManager: new PluginManager({
+          project: project,
+          customMap: map,
+          element: testDiv,
+          configuration: helper.getConfiguration()
+        }),
+        configuration: helper.getConfiguration()
+      });
+      return pluginDialog.init();
+    }).then(function(){
+      return pluginDialog.destroy();
+    });
+  });
+
+  it('open', function () {
+    var pluginDialog;
+    return ServerConnector.getProject().then(function (project) {
+      var map = helper.createCustomMap(project);
+
+      pluginDialog = new PluginDialog({
+        element: testDiv,
+        customMap: map,
+        pluginManager: new PluginManager({
+          project: project,
+          customMap: map,
+          element: testDiv,
+          configuration: helper.getConfiguration()
+        }),
+        configuration: helper.getConfiguration()
+      });
+      return pluginDialog.init();
+    }).then(function(){
+      pluginDialog._knownPlugins.push(new PluginData({
+        urls: [],
+        name: "x",
+        hash: "8f2112859d40de86dacc1994a224ea3d",
+        version: "0.0.1",
+        isPublic:"true"
+      }));
+      return pluginDialog.open();
+    }).then(function(){
+      return pluginDialog.destroy();
+    });
+  });
+
+});
-- 
GitLab