From e721b87d8a19bc55de389921f34d9818f834da96 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 7 Apr 2017 14:49:06 +0200
Subject: [PATCH] javascript create search panels

---
 frontend-js/src/main/js/Functions.js          |  20 +++
 .../src/main/js/gui/AbstractDbPanel.js        | 139 +++++++-----------
 frontend-js/src/main/js/gui/ChemicalPanel.js  |   4 +-
 frontend-js/src/main/js/gui/DrugPanel.js      |   3 +-
 frontend-js/src/main/js/gui/MiRnaPanel.js     |   3 +-
 frontend-js/src/main/js/gui/Panel.js          |  38 ++++-
 .../main/js/gui/PanelControlElementType.js    |  15 ++
 frontend-js/src/main/js/gui/SearchPanel.js    |  28 +++-
 .../src/test/js/gui/AbstractPanel-test.js     |  35 +++++
 .../src/test/js/gui/ChemicalPanel-test.js     |   3 +-
 frontend-js/src/test/js/gui/DrugPanel-test.js |   4 +-
 .../src/test/js/gui/MiRnaPanel-test.js        |   4 +-
 frontend-js/src/test/js/gui/Panel-test.js     |   2 +-
 13 files changed, 196 insertions(+), 102 deletions(-)
 create mode 100644 frontend-js/src/main/js/gui/PanelControlElementType.js
 create mode 100644 frontend-js/src/test/js/gui/AbstractPanel-test.js

diff --git a/frontend-js/src/main/js/Functions.js b/frontend-js/src/main/js/Functions.js
index 1d1872d068..11a23b3d32 100644
--- a/frontend-js/src/main/js/Functions.js
+++ b/frontend-js/src/main/js/Functions.js
@@ -225,4 +225,24 @@ Functions.getElementByName = function(element, name) {
   return undefined;
 };
 
+Functions.createElement = function(params) {
+  var result = document.createElement(params.type);
+  if (params.id !== null && params.id !== undefined) {
+    result.id = params.id;
+  }
+  if (params.name !== null && params.name !== undefined) {
+    result.setAttribute("name", params.name);
+  }
+  if (params.className !== null && params.className !== undefined) {
+    result.className = params.className;
+  }
+  if (params.inputType !== null && params.inputType !== undefined) {
+    result.type = params.inputType;
+  }
+  if (params.content !== null && params.content !== undefined) {
+    result.innerHTML = params.content;
+  }
+  return result;
+};
+
 module.exports = Functions;
diff --git a/frontend-js/src/main/js/gui/AbstractDbPanel.js b/frontend-js/src/main/js/gui/AbstractDbPanel.js
index 87a957301f..5fa212b5cf 100644
--- a/frontend-js/src/main/js/gui/AbstractDbPanel.js
+++ b/frontend-js/src/main/js/gui/AbstractDbPanel.js
@@ -5,8 +5,10 @@
 var Promise = require("bluebird");
 
 var Panel = require('./Panel');
+var PanelControlElementType = require('./PanelControlElementType');
 
 var logger = require('../logger');
+var Functions = require('../Functions');
 
 
 function AbstractPanel(params) {
@@ -14,34 +16,36 @@ function AbstractPanel(params) {
 
   var self = this;
 
-  if (this.getNavElement() === undefined) {
-    throw new Error("No nav-tabs div found in the search panel element");
-  }
-  if (this.getContentElement() === undefined) {
-    throw new Error("No tab-content div found in the search panel element");
-  }
-  if (this.getSearchButton() === undefined) {
-    throw new Error("No searchButton found in the search panel element");
-  }
-  if (this.getSearchInput() === undefined) {
-    throw new Error("No searchInput found in the search panel element");
-  }
-
+  this._initializeGui();
   this.setOverlayDb (self.getMap().getOverlayByName(params.panelName));
+  this._createEventHandlers()
+
+  this._tabIdCount = 0;
+}
+
+AbstractPanel.prototype = Object.create(Panel.prototype);
+AbstractPanel.prototype.constructor = AbstractPanel;
+
+
+AbstractPanel.prototype._createEventHandlers = function(){
+  var self = this;
+  var searchButton = self.getControlElement(PanelControlElementType.SEARCH_BUTTON);
+  var searchInput =self.getControlElement(PanelControlElementType.SEARCH_INPUT); 
 
   var searchByQuery = function(){
     return self.searchByQuery();
   };
   
-  self.getSearchButton().onclick = searchByQuery;
-  self.getSearchInput().onkeypress = function(event){
+
+  searchButton.onclick = searchByQuery;
+  searchInput.onkeypress = function(event){
     if (event.keyCode === 13) {
       searchByQuery();  
     }
   };
-  
-  
-  $(self.getSearchInput()).typeahead({
+
+
+  $(searchInput).typeahead({
     minLength: 1,
   },{
     source: function(query, callback){
@@ -49,7 +53,7 @@ function AbstractPanel(params) {
     }
   });
 
-  $(self.getSearchInput()).on('typeahead:select', function() {
+  $(searchInput).on('typeahead:select', function() {
     searchByQuery();  
   });
 
@@ -57,87 +61,58 @@ function AbstractPanel(params) {
   self.getOverlayDb().addListener("onSearch", function() {
     return self.refreshSearchResults();
   });
+};
 
-  this._tabIdCount = 0;
-}
+AbstractPanel.prototype._initializeGui = function(){
+  var searchQueryDiv = Functions.createElement({type:"div", name:"searchQuery", className:"searchPanel" });
+  this.getElement().appendChild(searchQueryDiv);
+  this.setControlElement(PanelControlElementType.SEARCH_DIV, searchQueryDiv);
 
-AbstractPanel.prototype = Object.create(Panel.prototype);
-AbstractPanel.prototype.constructor = AbstractPanel;
+  var searchLabel = Functions.createElement({type:"div",name:"searchLabel"} );
+  searchQueryDiv.appendChild(searchLabel);
+  this.setControlElement(PanelControlElementType.SEARCH_LABEL, searchLabel);
 
-AbstractPanel.prototype.setOverlayDb = function(overlayDb){
-  if (overlayDb === undefined) {
-    throw new Error("Undefined overlayDb");
-  }
-  this._overlayDb = overlayDb;
-};
+  var searchInput = Functions.createElement({type:"input", name:"searchInput",className: "input-field typeahead" });
+  searchQueryDiv.appendChild(searchInput);
+  this.setControlElement(PanelControlElementType.SEARCH_INPUT, searchInput);
 
-AbstractPanel.prototype.getOverlayDb = function(){
-  return this._overlayDb;
-};
+  var searchButton = Functions.createElement({type:"a", className:"searchButton",content:'<img src="resources/images/icons/search.png"/>'});
+  searchQueryDiv.appendChild(searchButton);
+  this.setControlElement(PanelControlElementType.SEARCH_BUTTON, searchButton);
 
-AbstractPanel.prototype.getSearchQueryElement = function() {
-  var children = this.getElement().children;
-  for (var i = 0; i < children.length; i++) {
-    var child = children[i];
-    if (child.getAttribute("name") === "searchQuery") {
-      return child;
-    }
-  }
-};
+  var searchResultsDiv = Functions.createElement({type:"div", name:"searchResults", className:"tabbable boxed parentTabs" });
+  this.getElement().appendChild(searchResultsDiv);
+  this.setControlElement(PanelControlElementType.SEARCH_RESULTS_DIV, searchResultsDiv);
 
-AbstractPanel.prototype.getSearchResultsElement = function() {
-  var children = this.getElement().children;
-  for (var i = 0; i < children.length; i++) {
-    var child = children[i];
-    if (child.getAttribute("name") === "searchResults") {
-      return child;
-    }
-  }
-};
+  var searchResultsNavTabDiv = Functions.createElement({type:"ul", className:"nav nav-tabs", content:'<li class="active"><a href="#set1"/></li>'} );
+  searchResultsDiv.appendChild(searchResultsNavTabDiv);
+  this.setControlElement(PanelControlElementType.SEARCH_RESULTS_NAV_TAB, searchResultsNavTabDiv);
 
-AbstractPanel.prototype.getNavElement = function() {
-  var searchResultsElement = this.getSearchResultsElement();
+  var searchResultsContentTabDiv = Functions.createElement({type:"div", className:"tab-content", content: '<div class="tab-pane fade active in" name="set1" id="set1"/>'});
+  searchResultsDiv.appendChild(searchResultsContentTabDiv);
+  this.setControlElement(PanelControlElementType.SEARCH_RESULTS_CONTENT_TAB, searchResultsContentTabDiv);
 
-  if (searchResultsElement) {
-    var children = searchResultsElement.children;
-    for (var i = 0; i < children.length; i++) {
-      var child = children[i];
-      if (child.className.indexOf("nav-tabs") !== -1) {
-        return child;
-      }
-    }
-  }
 };
 
-AbstractPanel.prototype.getSearchButton = function() {
-  return this.getElementByName(this.getSearchQueryElement(),"searchButton");
-};
 
-AbstractPanel.prototype.getSearchInput = function() {
-  return this.getElementByName(this.getSearchQueryElement(),"searchInput");
+AbstractPanel.prototype.setOverlayDb = function(overlayDb){
+  if (overlayDb === undefined) {
+    throw new Error("Undefined overlayDb");
+  }
+  this._overlayDb = overlayDb;
 };
 
-AbstractPanel.prototype.getContentElement = function() {
-  var searchResultsElement = this.getSearchResultsElement();
-
-  if (searchResultsElement) {
-    var children = searchResultsElement.children;
-    for (var i = 0; i < children.length; i++) {
-      var child = children[i];
-      if (child.className.indexOf("tab-content") !== -1) {
-        return child;
-      }
-    }
-  }
+AbstractPanel.prototype.getOverlayDb = function(){
+  return this._overlayDb;
 };
 
 AbstractPanel.prototype.clearResults = function() {
-  var navElement = this.getNavElement();
+  var navElement = this.getControlElement(PanelControlElementType.SEARCH_RESULTS_NAV_TAB);
   while (navElement.firstChild) {
     navElement.removeChild(navElement.firstChild);
   }
 
-  var contentElement = this.getContentElement();
+  var contentElement = this.getControlElement(PanelControlElementType.SEARCH_RESULTS_CONTENT_TAB);
   while (contentElement.firstChild) {
     contentElement.removeChild(contentElement.firstChild);
   }
@@ -179,8 +154,8 @@ AbstractPanel.prototype.addResultTab = function(query, elements) {
   var tabId = this.getPanelName() + "Tab_" + this._tabIdCount;
   this._tabIdCount++;
 
-  var navElement = this.getNavElement();
-  var contentElement = this.getContentElement();
+  var navElement = this.getControlElement(PanelControlElementType.SEARCH_RESULTS_NAV_TAB);
+  var contentElement = this.getControlElement(PanelControlElementType.SEARCH_RESULTS_CONTENT_TAB);
   var navClass = '';
   var contentClass = 'tab-pane';
   if (navElement.children.length === 0) {
diff --git a/frontend-js/src/main/js/gui/ChemicalPanel.js b/frontend-js/src/main/js/gui/ChemicalPanel.js
index ef4f0c0c3a..4d0f165e39 100644
--- a/frontend-js/src/main/js/gui/ChemicalPanel.js
+++ b/frontend-js/src/main/js/gui/ChemicalPanel.js
@@ -4,6 +4,7 @@
 var logger = require('../logger');
 
 var AbstractDbPanel = require('./AbstractDbPanel');
+var PanelControlElementType = require('./PanelControlElementType');
 
 function ChemicalPanel(params) {
   params.panelName = "chemical";
@@ -40,7 +41,8 @@ ChemicalPanel.prototype.createTableElement = function(target, icon) {
 
 ChemicalPanel.prototype.searchByQuery = function() {
   var self = this;
-  var query = self.getSearchInput().value;
+  var query = self.getControlElement(PanelControlElementType.SEARCH_INPUT).value;
+  
   return self.getOverlayDb().searchByQuery(query);
 };
 
diff --git a/frontend-js/src/main/js/gui/DrugPanel.js b/frontend-js/src/main/js/gui/DrugPanel.js
index 241bc72584..d30f17c058 100644
--- a/frontend-js/src/main/js/gui/DrugPanel.js
+++ b/frontend-js/src/main/js/gui/DrugPanel.js
@@ -4,6 +4,7 @@
 var logger = require('../logger');
 
 var AbstractDbPanel = require('./AbstractDbPanel');
+var PanelControlElementType = require('./PanelControlElementType');
 
 function DrugPanel(params) {
   params.panelName = "drug";
@@ -36,7 +37,7 @@ DrugPanel.prototype.createTableElement = function(target, icon) {
 
 DrugPanel.prototype.searchByQuery = function() {
   var self = this;
-  var query = self.getSearchInput().value;
+  var query = self.getControlElement(PanelControlElementType.SEARCH_INPUT).value;
   return self.getOverlayDb().searchByQuery(query);
 };
 
diff --git a/frontend-js/src/main/js/gui/MiRnaPanel.js b/frontend-js/src/main/js/gui/MiRnaPanel.js
index b32b179380..c3b8e9c4f7 100644
--- a/frontend-js/src/main/js/gui/MiRnaPanel.js
+++ b/frontend-js/src/main/js/gui/MiRnaPanel.js
@@ -4,6 +4,7 @@
 var logger = require('../logger');
 
 var AbstractDbPanel = require('./AbstractDbPanel');
+var PanelControlElementType = require('./PanelControlElementType');
 
 function MiRnaPanel(params) {
   params.panelName = "mirna";
@@ -36,7 +37,7 @@ MiRnaPanel.prototype.createTableElement = function(target, icon) {
 
 MiRnaPanel.prototype.searchByQuery = function() {
   var self = this;
-  var query = self.getSearchInput().value;
+  var query = self.getControlElement(PanelControlElementType.SEARCH_INPUT).value;
   return self.getOverlayDb().searchByQuery(query);
 };
 
diff --git a/frontend-js/src/main/js/gui/Panel.js b/frontend-js/src/main/js/gui/Panel.js
index 370fcb4096..7d02ff730e 100644
--- a/frontend-js/src/main/js/gui/Panel.js
+++ b/frontend-js/src/main/js/gui/Panel.js
@@ -4,6 +4,7 @@
 
 var GuiConnector = require('../GuiConnector');
 var AbstractGuiElement = require('./AbstractGuiElement');
+var PanelControlElementType = require('./PanelControlElementType');
 
 var logger = require('../logger');
 
@@ -16,14 +17,20 @@ function Panel(params) {
   self.setElement(params.element);
   self.setMap(params.customMap);
 
+  self._controlElements = [];
 }
 
 Panel.prototype = Object.create(AbstractGuiElement.prototype);
 Panel.prototype.constructor = Panel;
 
 Panel.prototype.disablePanel = function(message) {
-  this.getSearchQueryElement().style.visibility = "hidden";
-  this.getSearchResultsElement().style.visibility = "hidden";
+  var self = this;
+  
+  var searchQueryElement = self.getControlElement(PanelControlElementType.SEARCH_DIV);
+  var searchResultsElement = self.getControlElement(PanelControlElementType.SEARCH_RESULTS_DIV);
+  
+  searchQueryElement.style.visibility = "hidden";
+  searchResultsElement.style.visibility = "hidden";
   var hideReasonDiv = document.createElement("div");
   hideReasonDiv.className = "searchPanel";
 
@@ -33,7 +40,7 @@ Panel.prototype.disablePanel = function(message) {
   center.appendChild(messageDiv);
   hideReasonDiv.appendChild(center);
 
-  this.getElement().insertBefore(hideReasonDiv, this.getSearchQueryElement());
+  self.getElement().insertBefore(hideReasonDiv, searchQueryElement);
 };
 
 Panel.prototype.createLabel = function(value) {
@@ -362,11 +369,11 @@ Panel.prototype.openDialog = function(content, options) {
     contentDiv.removeChild(contentDiv.lastChild);
   }
   contentDiv.appendChild(content);
-  contentDiv.style.display="block";
+  contentDiv.style.display = "block";
 
   $(div).dialog({
     close : function() {
-      contentDiv.style.display="none";
+      contentDiv.style.display = "none";
       $(this).dialog('destroy');
     }
   });
@@ -376,4 +383,25 @@ Panel.prototype.openDialog = function(content, options) {
   $(div).dialog("open");
 };
 
+Panel.prototype.setControlElement = function(type, element) {
+  if (type === null || type === undefined) {
+    throw new Error("Unknown controle element type");
+  }
+  if (PanelControlElementType[type] === undefined) {
+    throw new Error("Unknown controle element type: " + type);
+  }
+
+  this._controlElements[type] = element;
+};
+Panel.prototype.getControlElement = function(type) {
+  if (type === null || type === undefined) {
+    throw new Error("Unknown controle element type");
+  }
+  if (PanelControlElementType[type] === undefined) {
+    throw new Error("Unknown controle element type: " + type);
+  }
+
+  return this._controlElements[type];
+};
+
 module.exports = Panel;
diff --git a/frontend-js/src/main/js/gui/PanelControlElementType.js b/frontend-js/src/main/js/gui/PanelControlElementType.js
new file mode 100644
index 0000000000..7bfe18a224
--- /dev/null
+++ b/frontend-js/src/main/js/gui/PanelControlElementType.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var PanelControlElementType = {
+  SEARCH_DIV : "SEARCH_DIV",
+  SEARCH_LABEL : "SEARCH_LABEL",
+  SEARCH_INPUT : "SEARCH_INPUT",
+  SEARCH_BUTTON : "SEARCH_BUTTON",
+  SEARCH_RESULTS_DIV : "SEARCH_RESULTS_DIV",
+  SEARCH_RESULTS_NAV_TAB : "SEARCH_RESULTS_NAV_TAB",
+  SEARCH_RESULTS_CONTENT_TAB : "SEARCH_RESULTS_CONTENT_TAB",
+
+  SEARCH_PERFECT_MATCH_CHECKBOX : "SEARCH_PERFECT_MATCH_CHECKBOX",
+};
+
+module.exports = PanelControlElementType;
diff --git a/frontend-js/src/main/js/gui/SearchPanel.js b/frontend-js/src/main/js/gui/SearchPanel.js
index d6de27b1ba..e7524d0dc4 100644
--- a/frontend-js/src/main/js/gui/SearchPanel.js
+++ b/frontend-js/src/main/js/gui/SearchPanel.js
@@ -4,23 +4,39 @@
 
 var AbstractDbPanel = require('./AbstractDbPanel');
 var Alias = require('../map/data/Alias');
+var PanelControlElementType = require('./PanelControlElementType');
 var Reaction = require('../map/data/Reaction');
+
 var logger = require('../logger');
+var Functions = require('../Functions');
 
 function SearchPanel(params) {
   params.panelName = "search";
   AbstractDbPanel.call(this, params);
 
-  if (this.getSearchPerfectMatch() === undefined) {
-    throw new Error("No searchPerfectMatch found in the search panel element");
-  }
+  this.createSearchGui();
 }
 
 SearchPanel.prototype = Object.create(AbstractDbPanel.prototype);
 SearchPanel.prototype.constructor = SearchPanel;
 
-SearchPanel.prototype.getSearchPerfectMatch = function() {
-  return this.getElementByName(this.getSearchQueryElement(), "searchPerfectMatch");
+SearchPanel.prototype.createSearchGui = function() {
+  var searchDiv = this.getControlElement(PanelControlElementType.SEARCH_DIV);
+
+  var perfectMatchCheckbox = Functions.createElement({
+    type : "input",
+    name : "searchPerfectMatch",
+    inputType : "checkbox",
+  });
+  searchDiv.appendChild(perfectMatchCheckbox);
+  this.setControlElement(PanelControlElementType.SEARCH_PERFECT_MATCH_CHECKBOX, perfectMatchCheckbox);
+
+  var perfectMatchLabel = Functions.createElement({
+    type : "span",
+    content : "PERFECT MATCH"
+  });
+  searchDiv.appendChild(perfectMatchCheckbox);
+
 };
 
 SearchPanel.prototype.createTableElement = function(element, icon) {
@@ -34,7 +50,7 @@ SearchPanel.prototype.createTableElement = function(element, icon) {
 };
 
 SearchPanel.prototype.createPreamble = function() {
- return document.createElement("div");
+  return document.createElement("div");
 };
 
 SearchPanel.prototype.createReactionElement = function(reaction) {
diff --git a/frontend-js/src/test/js/gui/AbstractPanel-test.js b/frontend-js/src/test/js/gui/AbstractPanel-test.js
new file mode 100644
index 0000000000..7959b1c8e9
--- /dev/null
+++ b/frontend-js/src/test/js/gui/AbstractPanel-test.js
@@ -0,0 +1,35 @@
+"use strict";
+
+/* exported logger */
+
+var Helper = require('../helper');
+
+require("../mocha-config.js");
+
+var AbstractDbPanel = require('../../../main/js/gui/AbstractDbPanel');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('AbstractDbPanel', function() {
+
+  var helper;
+  before(function() {
+    helper = new Helper();
+  });
+
+  it('contructor', function() {
+    var div = document.createElement("div");
+
+    var map = helper.createCustomMap();
+    map.registerSource(helper.createSearchDbOverlay(map))
+
+    var panel = new AbstractDbPanel({
+      element : div,
+      customMap : map,
+      panelName : "search",
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/ChemicalPanel-test.js b/frontend-js/src/test/js/gui/ChemicalPanel-test.js
index 021291cf36..99afd8632d 100644
--- a/frontend-js/src/test/js/gui/ChemicalPanel-test.js
+++ b/frontend-js/src/test/js/gui/ChemicalPanel-test.js
@@ -6,6 +6,7 @@ require("../mocha-config.js");
 
 var Chemical = require('../../../main/js/map/data/Chemical');
 var ChemicalPanel = require('../../../main/js/gui/ChemicalPanel');
+var PanelControlElementType = require('../../../main/js/gui/PanelControlElementType');
 
 
 var chai = require('chai');
@@ -88,7 +89,7 @@ describe('ChemicalPanel', function() {
       customMap : map
     });
 
-    panel.getSearchInput().value = "rotenone";
+    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "rotenone";
 
     return panel.searchByQuery().then(function() {
       assert.equal(logger.getWarnings().length, 0);
diff --git a/frontend-js/src/test/js/gui/DrugPanel-test.js b/frontend-js/src/test/js/gui/DrugPanel-test.js
index 33d2ced4c9..1a3b0760ec 100644
--- a/frontend-js/src/test/js/gui/DrugPanel-test.js
+++ b/frontend-js/src/test/js/gui/DrugPanel-test.js
@@ -6,7 +6,7 @@ require("../mocha-config.js");
 
 var Drug = require('../../../main/js/map/data/Drug');
 var DrugPanel = require('../../../main/js/gui/DrugPanel');
-
+var PanelControlElementType = require('../../../main/js/gui/PanelControlElementType');
 
 var chai = require('chai');
 var assert = chai.assert;
@@ -88,7 +88,7 @@ describe('DrugPanel', function() {
       customMap : map
     });
 
-    panel.getSearchInput().value = "aspirin";
+    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "aspirin";
 
     return panel.searchByQuery().then(function() {
       assert.equal(logger.getWarnings().length, 0);
diff --git a/frontend-js/src/test/js/gui/MiRnaPanel-test.js b/frontend-js/src/test/js/gui/MiRnaPanel-test.js
index 43f7cfda1d..0c72e413b6 100644
--- a/frontend-js/src/test/js/gui/MiRnaPanel-test.js
+++ b/frontend-js/src/test/js/gui/MiRnaPanel-test.js
@@ -6,7 +6,7 @@ require("../mocha-config.js");
 
 var MiRna = require('../../../main/js/map/data/MiRna');
 var MiRnaPanel = require('../../../main/js/gui/MiRnaPanel');
-
+var PanelControlElementType = require('../../../main/js/gui/PanelControlElementType');
 
 var chai = require('chai');
 var assert = chai.assert;
@@ -88,7 +88,7 @@ describe('MiRnaPanel', function() {
       customMap : map
     });
 
-    panel.getSearchInput().value = "hsa-miR-125a-3p";
+    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "hsa-miR-125a-3p";
 
     return panel.searchByQuery().then(function() {
       assert.equal(logger.getWarnings().length, 0);
diff --git a/frontend-js/src/test/js/gui/Panel-test.js b/frontend-js/src/test/js/gui/Panel-test.js
index 5d952b5f93..e2c2d41bb8 100644
--- a/frontend-js/src/test/js/gui/Panel-test.js
+++ b/frontend-js/src/test/js/gui/Panel-test.js
@@ -12,7 +12,7 @@ var chai = require('chai');
 var assert = chai.assert;
 var logger = require('../logger');
 
-describe('SearchPanel', function() {
+describe('Panel', function() {
 
   var helper;
   before(function() {
-- 
GitLab