From c9da129cc198032d62b8726502a7560a2850a9ff Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 26 Apr 2018 15:33:07 +0200
Subject: [PATCH] AliasSurface/ReactionSurface create methods removed and
 functionality moved to init

---
 .../src/main/js/map/AbstractCustomMap.js      |  11 +-
 frontend-js/src/main/js/map/data/MapModel.js  |   2 +-
 .../src/main/js/map/marker/AbstractMarker.js  |   2 +-
 .../src/main/js/map/marker/AliasMarker.js     |   2 +-
 .../js/map/marker/MarkerSurfaceCollection.js  |  29 +-
 .../src/main/js/map/surface/AliasSurface.js   | 250 +++++++++++-------
 .../main/js/map/surface/ReactionSurface.js    |   2 +-
 frontend-js/src/test/js/helper.js             |  11 +
 .../src/test/js/map/AbstractCustomMap-test.js |   9 +-
 .../test/js/map/marker/AliasMarker-test.js    |  22 +-
 .../test/js/map/surface/AliasSurface-test.js  |  74 ++----
 .../js/map/surface/ReactionSurface-test.js    |  15 +-
 12 files changed, 252 insertions(+), 177 deletions(-)

diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index 3dbddf92b2..a1743a1945 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -372,11 +372,8 @@ AbstractCustomMap.prototype._showSelectedDataOverlay = function (overlayId, inde
     }).then(function () {
       return Promise.each(overlayAliases, function (overlayAlias) {
         if (overlayAlias.getModelId() === self.getId()) {
-          var surface;
-          var element;
           return self.getModel().getAliasById(overlayAlias.getId()).then(function (aliasData) {
-            element = new IdentifiedElement(aliasData);
-            return AliasSurface.create({
+            var surface = new AliasSurface({
               overlayAlias: overlayAlias,
               alias: aliasData,
               map: self,
@@ -388,8 +385,6 @@ AbstractCustomMap.prototype._showSelectedDataOverlay = function (overlayId, inde
                 return self.getTopMap().callListeners("onBioEntityClick", element);
               }]
             });
-          }).then(function (result) {
-            surface = result;
             self.selectedLayoutOverlays[overlayId].push(surface);
             return surface.show();
           });
@@ -542,8 +537,8 @@ AbstractCustomMap.prototype._refreshInfoWindows = function () {
 /**
  * Opens {@link ReactionInfoWindow} for given reaction identifier.
  *
- * @param reaction {Reaction}
- * @param marker {Marker}
+ * @param {Reaction} reaction
+ * @param {Marker} [marker]
  */
 AbstractCustomMap.prototype._openInfoWindowForReaction = function (reaction, marker) {
   var infoWindow = this.getReactionInfoWindowById(reaction.getId());
diff --git a/frontend-js/src/main/js/map/data/MapModel.js b/frontend-js/src/main/js/map/data/MapModel.js
index 7edae2a101..88a40f3794 100644
--- a/frontend-js/src/main/js/map/data/MapModel.js
+++ b/frontend-js/src/main/js/map/data/MapModel.js
@@ -100,7 +100,7 @@ MapModel.prototype.getAliases = function (params) {
  *
  * @param id
  *          identifier of the {@link Alias}
- * @returns {@link Alias} by identifier
+ * @returns {Promise<Alias>} by identifier
  */
 MapModel.prototype.getAliasById = function (id, complete) {
   var self = this;
diff --git a/frontend-js/src/main/js/map/marker/AbstractMarker.js b/frontend-js/src/main/js/map/marker/AbstractMarker.js
index f6bf87603f..48af2463f1 100644
--- a/frontend-js/src/main/js/map/marker/AbstractMarker.js
+++ b/frontend-js/src/main/js/map/marker/AbstractMarker.js
@@ -13,7 +13,7 @@ var ObjectWithListeners = require('../../ObjectWithListeners');
  *
  * @param {IdentifiedElement} params.element
  * @param {AbstractCustomMap} params.map
- * @param {function|function[]} params.onclick
+ * @param {function|function[]} [params.onClick]
  * @constructor
  */
 function AbstractMarker(params) {
diff --git a/frontend-js/src/main/js/map/marker/AliasMarker.js b/frontend-js/src/main/js/map/marker/AliasMarker.js
index 0e31a05b7c..7186290000 100644
--- a/frontend-js/src/main/js/map/marker/AliasMarker.js
+++ b/frontend-js/src/main/js/map/marker/AliasMarker.js
@@ -12,7 +12,7 @@ var logger = require('../../logger');
  *
  * @param {IdentifiedElement} params.element
  * @param {AbstractCustomMap} params.map
- * @param {function|function[]} params.onclick
+ * @param {function|function[]} [params.onClick]
  * @constructor
  * @extends AbstractMarker
  */
diff --git a/frontend-js/src/main/js/map/marker/MarkerSurfaceCollection.js b/frontend-js/src/main/js/map/marker/MarkerSurfaceCollection.js
index 5612d13d00..d73c5e1e04 100644
--- a/frontend-js/src/main/js/map/marker/MarkerSurfaceCollection.js
+++ b/frontend-js/src/main/js/map/marker/MarkerSurfaceCollection.js
@@ -192,14 +192,27 @@ MarkerSurfaceCollection.prototype.createSurfaceForDbOverlay = function (element,
     return self.getMap().getTopMap().callListeners("onBioEntityClick", element);
   }];
   if (element.getType() === "ALIAS") {
-    return AliasSurface.createFromIdentifiedElement({
-      element: element,
-      map: map,
-      onClick: onclickFunctions
-    }).then(function (surface) {
-      result = surface;
+    return map.getModel().getAliasById(element.getId()).then(function (alias) {
+      result = new AliasSurface({
+        alias: alias,
+        map: map,
+        onClick: onclickFunctions,
+        color: element.getColor(),
+        fillOpacity: element.getOpacity(),
+        strokeWeight: element.getLineWeight(),
+        strokeColor: element.getLineColor(),
+        strokeOpacity: element.getLineOpacity()
+      });
       self.putSurface({element: element, overlay: dbOverlay}, result);
-      return result;
+      if (self.getMap().isInitialized()) {
+        return result.init().then(function () {
+          return result.show();
+        }).then(function () {
+          return result;
+        });
+      } else {
+        return result;
+      }
     });
   } else if (element.getType() === "REACTION") {
     return map.getModel().getReactionById(element.getId()).then(function (reactionData) {
@@ -214,7 +227,7 @@ MarkerSurfaceCollection.prototype.createSurfaceForDbOverlay = function (element,
       if (self.getMap().isInitialized()) {
         return result.init().then(function () {
           return result.show();
-        }).then(function(){
+        }).then(function () {
           return result;
         });
       } else {
diff --git a/frontend-js/src/main/js/map/surface/AliasSurface.js b/frontend-js/src/main/js/map/surface/AliasSurface.js
index ae0f1c2369..eb26323c4a 100644
--- a/frontend-js/src/main/js/map/surface/AliasSurface.js
+++ b/frontend-js/src/main/js/map/surface/AliasSurface.js
@@ -16,11 +16,22 @@ var Point = require('../canvas/Point');
  * Class representing overlay of the alias on the map relevant for a specific
  * layout.
  *
+ * @param {LayoutAlias} [params.overlayAlias] - {@link LayoutAlias} for which overlay is created
+ * @param {number} [params.startX] - this is the ratio on OX axis that should be use as a
+ *          starting point of the overlay. For instance when there are three
+ *          overlays to visualize then
+ *          <ul>
+ *          <li>the first layout have startX=0.0; endX=0.33333</li>
+ *          <li>second layout have startX=0.33333; endX=0.66666</li>
+ *          <li>the last layout have startX=0.66666; endX=1.0</li>
+ *          </ul>
+ * @param {number} [params.endX] this is the ratio on OX axis that should be use as a
+ *          starting point of the overlay
+
  * @param {IdentifiedElement} [params.element]
  * @param {Alias} params.alias
  * @param {AbstractCustomMap} params.map
- * @param {Rectangle} params.gmapObj
- * @param {function|function[]} params.onClick
+ * @param {function|function[]} [params.onClick]
  * @constructor
  * @extends AbstractSurfaceElement
  */
@@ -28,8 +39,15 @@ function AliasSurface(params) {
   // call super constructor
   AbstractSurfaceElement.call(this, params);
 
-  // google map object associated with the alias
-  this.addMapCanvasObject(params.gmapObj);
+  this.setOverlayData(params.overlayAlias);
+  this.setStartX(params.startX);
+  this.setEndX(params.endX);
+
+  this.setColor(params.color);
+  this.setFillOpacity(params.opacity);
+  this.setStrokeWeight(params.strokeWeight);
+  this.setStrokeColor(params.strokeColor);
+  this.setStrokeOpacity(params.strokeOpacity);
 
   // original data
   this.setBioEntity(params.alias);
@@ -44,6 +62,10 @@ AliasSurface.prototype.constructor = AliasSurface;
  * @param {string} color
  */
 AliasSurface.prototype.setColor = function (color) {
+  if (color === undefined) {
+    color = "#FF0000";
+  }
+
   this._color = color;
   var mapCanvasObjects = this.getMapCanvasObjects();
   for (var i = 0; i < mapCanvasObjects.length; i++) {
@@ -53,6 +75,75 @@ AliasSurface.prototype.setColor = function (color) {
   }
 };
 
+/**
+ *
+ * @param {number} opacity
+ */
+AliasSurface.prototype.setFillOpacity = function (opacity) {
+  this._fillOpacity = opacity;
+};
+
+/**
+ *
+ * @returns {number|undefined}
+ */
+AliasSurface.prototype.getFillOpacity = function () {
+  return this._fillOpacity;
+};
+
+/**
+ *
+ * @param {number} weight
+ */
+AliasSurface.prototype.setStrokeWeight = function (weight) {
+  if (weight === undefined) {
+    weight = 1;
+  }
+  this._strokeWeight = weight;
+};
+
+/**
+ *
+ * @returns {number}
+ */
+AliasSurface.prototype.getStrokeWeight = function () {
+  return this._strokeWeight;
+};
+
+/**
+ *
+ * @param {string} color
+ */
+AliasSurface.prototype.setStrokeColor = function (color) {
+  if (color === undefined) {
+    color = "#000000";
+  }
+  this._strokeColor = color;
+};
+
+/**
+ *
+ * @returns {string}
+ */
+AliasSurface.prototype.getStrokeColor = function () {
+  return this._strokeColor;
+};
+
+/**
+ *
+ * @param {number} opacity
+ */
+AliasSurface.prototype.setStrokeOpacity = function (opacity) {
+  if (opacity === undefined) {
+    opacity = 1;
+  }
+  this._strokeOpacity = opacity;
+};
+
+AliasSurface.prototype.getStrokeOpacity = function () {
+  return this._strokeOpacity;
+};
+
 /**
  * Function used to recalculate boundaries of the {@link AliasSurface}.
  * Boundaries define how big part of original alias is taken by this layout
@@ -73,32 +164,16 @@ AliasSurface.prototype.setBoundsForAlias = function (startX, endX) {
 };
 
 /**
- * Creates {@link AliasSurface}.
  *
- * @param {Object} params
- *          dict containing set of information required for surface creation
- * @param {LayoutAlias} params.overlayAlias - {@link LayoutAlias} for which overlay is created
- * @param {Alias} params.alias - {@link Alias data} of the alias
- * @param {AbstractCustomMap} params.map - {@link AbstractCustomMap} where overlay should be placed
- * @param {number} params.startX - this is the ratio on OX axis that should be use as a
- *          starting point of the overlay. For instance when there are three
- *          overlays to visualize then
- *          <ul>
- *          <li>the first layout have startX=0.0; endX=0.33333</li>
- *          <li>second layout have startX=0.33333; endX=0.66666</li>
- *          <li>the last layout have startX=0.66666; endX=1.0</li>
- *          </ul>
- * @param {number} params.endX this is the ratio on OX axis that should be use as a
- *          starting point of the overlay
- * @param {function|function[]} params.onClick
- * @returns {AliasSurface}
+ * @returns {Bluebird<any>}
  */
-AliasSurface.create = function (params) {
-  var overlayAlias = params.overlayAlias;
-  var alias = params.alias;
-  var map = params.map;
-  var startX = params.startX;
-  var endX = params.endX;
+AliasSurface.prototype.init = function () {
+  var self = this;
+  var overlayData = self.getOverlayData();
+  var alias = self.getBioEntity();
+  var map = self.getCustomMap();
+  var startX = self.getStartX();
+  var endX = self.getEndX();
 
   var pointA = new Point(alias.getX() + startX * alias.getWidth(), alias.getY());
   var pointB = new Point(alias.getX() + endX * alias.getWidth(), alias.getY() + alias.getHeight());
@@ -106,82 +181,79 @@ AliasSurface.create = function (params) {
   var bounds = new Bounds(pointA, pointB);
   var fillOpacity;
   return ServerConnector.getConfigurationParam(ConfigurationType.OVERLAY_OPACITY).then(function (result) {
-    fillOpacity = result;
-    return functions.overlayToColor(overlayAlias);
+    fillOpacity = self.getFillOpacity();
+    if (fillOpacity === undefined) {
+      fillOpacity = result;
+    }
+    if (overlayData !== undefined) {
+      return functions.overlayToColor(overlayData);
+    } else {
+      return "#FF0000";
+    }
   }).then(function (color) {
-    var rectangle = map.getMapCanvas().createRectangle({
+    self.addMapCanvasObject(map.getMapCanvas().createRectangle({
       fillOpacity: fillOpacity,
-      strokeWeight: 1,
+      strokeColor: self.getStrokeColor(),
+      strokeOpacity: self.getStrokeOpacity(),
+      strokeWeight: self.getStrokeWeight(),
       fillColor: color,
       bounds: bounds
-    });
-    return new AliasSurface({
-      map: map,
-      gmapObj: rectangle,
-      alias: alias,
-      onClick: params.onClick
-    });
+    }));
   });
 };
 
 /**
  *
- * @param {IdentifiedElement} params.element
- * @param {AbstractCustomMap} params.map
- * @param {function|function[]} params.onClick
+ * @returns {LayoutAlias}
+ */
+AliasSurface.prototype.getOverlayData = function () {
+  return this._overlayData;
+};
+
+/**
  *
- * @returns {Bluebird<AliasSurface>}
+ * @param {LayoutAlias} overlayData
  */
-AliasSurface.createFromIdentifiedElement = function (params) {
-  var element = params.element;
-  var map = params.map;
-  var model = map.getProject().getModelById(element.getModelId());
-  var fillOpacity;
-  return ServerConnector.getConfigurationParam(ConfigurationType.OVERLAY_OPACITY).then(function (result) {
-    fillOpacity = result;
-    return model.getByIdentifiedElement(element);
-  }).then(function (alias) {
-    var pointA = new Point(alias.getX(), alias.getY());
-    var pointB = new Point(alias.getX() + alias.getWidth(), alias.getY() + alias.getHeight());
+AliasSurface.prototype.setOverlayData = function (overlayData) {
+  this._overlayData = overlayData;
+};
 
-    var bounds = new Bounds(pointA, pointB);
+/**
+ *
+ * @returns {number}
+ */
+AliasSurface.prototype.getStartX = function () {
+  return this._startX;
+};
 
-    var color = "#FF0000";
-    if (element.getColor() !== undefined) {
-      color = element.getColor();
-    }
-    if (element.getOpacity() !== undefined) {
-      fillOpacity = element.getOpacity();
-    }
-    var strokeWeight = 1;
-    if (element.getLineWeight() !== undefined) {
-      strokeWeight = element.getLineWeight();
-    }
-    var strokeColor = "#000000";
-    if (element.getLineColor() !== undefined) {
-      strokeColor = element.getLineColor();
-    }
-    var strokeOpacity = 1;
-    if (element.getLineOpacity() !== undefined) {
-      strokeOpacity = element.getLineOpacity();
-    }
+/**
+ *
+ * @param {number} startX
+ */
+AliasSurface.prototype.setStartX = function (startX) {
+  if (startX === undefined) {
+    startX = 0;
+  }
+  this._startX = startX;
+};
 
-    var rectangle = map.getMapCanvas().createRectangle({
-      bounds: bounds,
-      fillOpacity: fillOpacity,
-      fillColor: color,
-      strokeColor: strokeColor,
-      strokeOpacity: strokeOpacity,
-      strokeWeight: strokeWeight
-    });
+/**
+ *
+ * @returns {number}
+ */
+AliasSurface.prototype.getEndX = function () {
+  return this._endX;
+};
 
-    return new AliasSurface({
-      gmapObj: rectangle,
-      map: map,
-      onClick: params.onClick,
-      alias: alias
-    });
-  });
+/**
+ *
+ * @param {number} endX
+ */
+AliasSurface.prototype.setEndX = function (endX) {
+  if (endX === undefined) {
+    endX = 0;
+  }
+  this._endX = endX;
 };
 
 
diff --git a/frontend-js/src/main/js/map/surface/ReactionSurface.js b/frontend-js/src/main/js/map/surface/ReactionSurface.js
index f868a7dedd..2ad5117f09 100644
--- a/frontend-js/src/main/js/map/surface/ReactionSurface.js
+++ b/frontend-js/src/main/js/map/surface/ReactionSurface.js
@@ -17,7 +17,7 @@ var IdentifiedElement = require('../data/IdentifiedElement');
  *
  * @param {IdentifiedElement} [params.element]
  * @param {AbstractCustomMap} params.map
- * @param {function|function[]} params.onClick
+ * @param {function|function[]} [params.onClick]
  * @param {Reaction} params.reaction
  * @param {LayoutReaction} [params.layoutReaction]
  * @param {boolean} params.customized
diff --git a/frontend-js/src/test/js/helper.js b/frontend-js/src/test/js/helper.js
index 83a035daa0..61ac98ac57 100644
--- a/frontend-js/src/test/js/helper.js
+++ b/frontend-js/src/test/js/helper.js
@@ -218,6 +218,11 @@ Helper.prototype.createLayoutAlias = function (alias) {
   });
 };
 
+/**
+ *
+ * @param {Reaction} reaction
+ * @returns {LayoutReaction}
+ */
 Helper.prototype.createLayoutReaction = function (reaction) {
   var reactionId;
   var modelId;
@@ -251,6 +256,12 @@ Helper.prototype.createIdentifiedElement = function (element) {
   return new IdentifiedElement(element);
 };
 
+/**
+ *
+ * @param {AbstractCustomMap|MapModel} map
+ * @param {boolean} [complete]
+ * @returns {Reaction}
+ */
 Helper.prototype.createReaction = function (map, complete) {
   var mapId = null;
   if (map !== undefined) {
diff --git a/frontend-js/src/test/js/map/AbstractCustomMap-test.js b/frontend-js/src/test/js/map/AbstractCustomMap-test.js
index b29a3bcf33..de87cdc591 100644
--- a/frontend-js/src/test/js/map/AbstractCustomMap-test.js
+++ b/frontend-js/src/test/js/map/AbstractCustomMap-test.js
@@ -117,18 +117,17 @@ describe('AbstractCustomMap', function () {
         map: map,
         element: ie
       });
-      var markers;
-      return AliasSurface.create({
+      var surface = new AliasSurface({
         overlayAlias: helper.createLayoutAlias(alias),
         alias: alias,
         map: map,
         startX: 1,
         endX: 2
-      }).then(function (surface) {
-        markers = [marker, surface];
+      });
+      var markers = [marker, surface];
+      return surface.init().then(function () {
         return marker.init();
       }).then(function () {
-
         var center = map.getCenter();
         map.fitBounds(markers);
         var center2 = map.getCenter();
diff --git a/frontend-js/src/test/js/map/marker/AliasMarker-test.js b/frontend-js/src/test/js/map/marker/AliasMarker-test.js
index c0c617ef6d..29ce5e52d0 100644
--- a/frontend-js/src/test/js/map/marker/AliasMarker-test.js
+++ b/frontend-js/src/test/js/map/marker/AliasMarker-test.js
@@ -48,14 +48,20 @@ describe('AliasMarker', function () {
       map: map
     });
     var icon = "test.png";
-    marker.addIcon("test.png");
-    assert.equal(icon, marker.getIcon());
-    marker.addIcon("test.png");
-    assert.equal(icon, marker.getIcon());
-    marker.removeIcon("test.png");
-    assert.equal(icon, marker.getIcon());
-    marker.removeIcon("test.png");
-    assert.equal(undefined, marker.getIcon());
+    return marker.init().then(function () {
+      return marker.addIcon("test.png");
+    }).then(function () {
+      assert.equal(icon, marker.getIcon());
+      return marker.addIcon("test.png");
+    }).then(function () {
+      assert.equal(icon, marker.getIcon());
+      return marker.removeIcon("test.png");
+    }).then(function () {
+      assert.equal(icon, marker.getIcon());
+      return marker.removeIcon("test.png");
+    }).then(function () {
+      assert.equal(undefined, marker.getIcon());
+    });
   });
 
   it("click on marker", function () {
diff --git a/frontend-js/src/test/js/map/surface/AliasSurface-test.js b/frontend-js/src/test/js/map/surface/AliasSurface-test.js
index 723e6832da..5658cfd950 100644
--- a/frontend-js/src/test/js/map/surface/AliasSurface-test.js
+++ b/frontend-js/src/test/js/map/surface/AliasSurface-test.js
@@ -4,88 +4,64 @@ require("../../mocha-config");
 var logger = require('../../logger');
 
 var AliasSurface = require('../../../../main/js/map/surface/AliasSurface');
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
 var ServerConnector = require('../../ServerConnector-mock');
 
 var assert = require('assert');
 
 describe('AliasSurface', function () {
-  it("constructor", function () {
+  it("init", function () {
     var map = helper.createCustomMap();
     var alias = helper.createAlias(map);
     var layoutAlias = helper.createLayoutAlias(alias);
 
-    return AliasSurface.create({
+    var result = new AliasSurface({
       overlayAlias: layoutAlias,
       alias: alias,
       map: map,
       startX: 1,
       endX: 2
-    }).then(function (result) {
-      assert.ok(result instanceof AliasSurface);
-      assert.equal(logger.getWarnings.length, 0);
-      assert.ok(result.getIdentifiedElement());
     });
-  });
-
-  it("createFromIdentifiedElement", function () {
-    var map;
-    var alias;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      return map.getModel().getAliasById(329171);
-    }).then(function (result) {
-      alias = result;
-      var identifiedElement = new IdentifiedElement(alias);
-
-      return AliasSurface.createFromIdentifiedElement({
-        element: identifiedElement,
-        map: map
-      });
-    }).then(function (result) {
-      assert.ok(result instanceof AliasSurface);
+    return result.init().then(function () {
       assert.equal(logger.getWarnings.length, 0);
       assert.ok(result.getIdentifiedElement());
     });
   });
+
   describe("setBoundsForAlias", function () {
-    it("from createFromIdentifiedElement", function () {
+    it("from simple element", function () {
       var map;
-      var alias;
+      var alias, surface;
       return ServerConnector.getProject().then(function (project) {
         map = helper.createCustomMap(project);
         return map.getModel().getAliasById(329171);
       }).then(function (result) {
         alias = result;
-        var identifiedElement = new IdentifiedElement(alias);
-
-        return AliasSurface.createFromIdentifiedElement({
-          element: identifiedElement,
+        surface = new AliasSurface({
+          alias: result,
           map: map
         });
-      }).then(function (result) {
-        var bounds = result.getBounds();
-        result.setBoundsForAlias(1, 3);
-        var bounds2 = result.getBounds();
+        return surface.init();
+      }).then(function () {
+        var bounds = surface.getBounds();
+        surface.setBoundsForAlias(1, 3);
+        var bounds2 = surface.getBounds();
         assert.equal(bounds.getRightBottom().y, bounds2.getRightBottom().y);
         assert.ok(bounds.getRightBottom().x !== bounds2.getRightBottom().x);
       });
     });
 
-    it("from create", function () {
+    it("from element with data overlay", function () {
       var map = helper.createCustomMap();
       var alias = helper.createAlias(map);
-      var surface;
-
-      return AliasSurface.create({
+      var surface = new AliasSurface({
         overlayAlias: helper.createLayoutAlias(alias),
         alias: alias,
         map: map,
         startX: 1,
         endX: 2
-      }).then(function (result) {
-        surface = result;
-        return result.setBoundsForAlias(0, 1);
+      });
+      return surface.init().then(function () {
+        return surface.setBoundsForAlias(0, 1);
       }).then(function () {
         assert.ok(surface.getBounds());
       });
@@ -95,28 +71,26 @@ describe('AliasSurface', function () {
   describe('click', function () {
     it("default", function () {
       var map;
-      var alias;
+      var alias, surface;
       var clicked = false;
       return ServerConnector.getProject().then(function (project) {
         map = helper.createCustomMap(project);
         return map.getModel().getAliasById(329171);
       }).then(function (result) {
         alias = result;
-        var identifiedElement = new IdentifiedElement(alias);
-        return AliasSurface.createFromIdentifiedElement({
-          element: identifiedElement,
+        surface = new AliasSurface({
+          alias: result,
           map: map,
           onClick: function () {
             clicked = true;
           }
         });
-      }).then(function (result) {
-        return result.onClickHandler();
+        return surface.init();
+      }).then(function () {
+        return surface.onClickHandler();
       }).then(function () {
         assert.ok(clicked);
       });
     });
-
   });
-
 });
diff --git a/frontend-js/src/test/js/map/surface/ReactionSurface-test.js b/frontend-js/src/test/js/map/surface/ReactionSurface-test.js
index 957393063b..cbe48656eb 100644
--- a/frontend-js/src/test/js/map/surface/ReactionSurface-test.js
+++ b/frontend-js/src/test/js/map/surface/ReactionSurface-test.js
@@ -2,6 +2,7 @@
 
 require("../../mocha-config");
 var ReactionSurface = require('../../../../main/js/map/surface/ReactionSurface');
+// noinspection JSUnusedLocalSymbols
 var ServerConnector = require('../../ServerConnector-mock');
 
 var assert = require('assert');
@@ -67,17 +68,21 @@ describe('ReactionSurface', function () {
       customized: false
     });
     return reactionOverlay.init().then(function () {
-      reactionOverlay.show();
+      return reactionOverlay.show();
+    }).then(function () {
       assert.equal(reactionOverlay.isShown(), true);
-      reactionOverlay.hide();
+      return reactionOverlay.hide();
+    }).then(function () {
       assert.equal(reactionOverlay.isShown(), false);
 
-      reactionOverlay.show();
+      return reactionOverlay.show();
+    }).then(function () {
       assert.ok(reactionOverlay.isShown());
 
       assert.equal(logger.getWarnings().length, 0);
 
-      reactionOverlay.show();
+      return reactionOverlay.show();
+    }).then(function () {
       assert.ok(reactionOverlay.isShown());
       assert.equal(logger.getWarnings().length, 1);
     });
@@ -112,7 +117,7 @@ describe('ReactionSurface', function () {
       end: {
         x: 100,
         y: 100
-      },
+      }
     }, "#000000", 3, map);
 
     assert.ok(line);
-- 
GitLab