From 89e286a92cda8ad9fc8098668c36d3118ef8f61b Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 30 May 2017 16:49:46 +0200
Subject: [PATCH] setZoom and setCenter minerva api methods

---
 .../src/main/js/map/AbstractCustomMap.js      |  6 +-
 frontend-js/src/main/js/minerva.js            | 14 ++++
 frontend-js/src/test/js/google-map-mock.js    |  4 +-
 frontend-js/src/test/js/minerva-test.js       | 83 ++++++++++++++-----
 frontend-js/src/test/js/mocha-config.js       |  2 +
 5 files changed, 86 insertions(+), 23 deletions(-)

diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index c2b258c9df..ed71b6879e 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -965,9 +965,10 @@ AbstractCustomMap.prototype.setCenter = function(coordinates) {
     coordinates = this.fromPointToLatLng(coordinates);
   }
   if (this.initialized) {
-    this.getGoogleMap().setCenter(coordinates);
+    return Promise.resolve(this.getGoogleMap().setCenter(coordinates));
   } else {
     logger.warn("cannot center map that is not opened yet");
+    return Promise.resolve();
   }
 };
 
@@ -981,9 +982,10 @@ AbstractCustomMap.prototype.setCenter = function(coordinates) {
  */
 AbstractCustomMap.prototype.setZoom = function(zoom) {
   if (this.initialized) {
-    this.getGoogleMap().setZoom(zoom);
+    return Promise.resolve(this.getGoogleMap().setZoom(zoom));
   } else {
     logger.warn("cannot center map that is not opened yet");
+    return Promise.resolve();
   }
 };
 
diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js
index fbfa2cc700..e0902caddd 100644
--- a/frontend-js/src/main/js/minerva.js
+++ b/frontend-js/src/main/js/minerva.js
@@ -237,6 +237,20 @@ function createResult(customMap) {
         return customMap.getOverlayByName("user").removeSurface(surfaceElements);
       })
     },
+    setCenter : function(params) {
+      var submap = customMap.getSubmapById(params.modelId);
+      if (submap === null) {
+        throw new Error("Unknown modelId: " + params.modelId);
+      }
+      return submap.setCenter(new google.maps.Point(params.x, params.y));
+    },
+    setZoom : function(params) {
+      var submap = customMap.getSubmapById(params.modelId);
+      if (submap === null) {
+        throw new Error("Unknown modelId: " + params.modelId);
+      }
+      return submap.setZoom(params.zoom);
+    },
   };
 }
 
diff --git a/frontend-js/src/test/js/google-map-mock.js b/frontend-js/src/test/js/google-map-mock.js
index 365bef56a1..4c30bd8636 100644
--- a/frontend-js/src/test/js/google-map-mock.js
+++ b/frontend-js/src/test/js/google-map-mock.js
@@ -186,14 +186,14 @@ var google = {
         },
         setZoom : function(zoom) {
           data.zoom = zoom;
-          google.maps.event.trigger(this, "zoom_changed", zoom);
+          return google.maps.event.trigger(this, "zoom_changed", zoom);
         },
         getCenter : function() {
           return data.center;
         },
         setCenter : function(center) {
           data.center = center;
-          google.maps.event.trigger(this, "center_changed", center);
+          return google.maps.event.trigger(this, "center_changed", center);
         },
         getBounds : function() {
           return data.bounds;
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index 772c4724ce..af1eec90f6 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -265,26 +265,26 @@ describe('minerva global', function() {
     };
     var globalResult;
     var elementToShow = {
-        element : {
-          id : 329171,
-          modelId : 15781,
-          type : "ALIAS"
-        },
-        options : {
-          type: "ICON"
-        }
-      };
-    
+      element : {
+        id : 329171,
+        modelId : 15781,
+        type : "ALIAS"
+      },
+      options : {
+        type : "ICON"
+      }
+    };
+
     var elementToShow2 = {
-        element : {
-          id : 329171,
-          modelId : 15781,
-          type : "ALIAS"
-        },
-        options : {
-          type: "SURFACE"
-        }
-      };
+      element : {
+        id : 329171,
+        modelId : 15781,
+        type : "ALIAS"
+      },
+      options : {
+        type : "SURFACE"
+      }
+    };
     return minerva.create(options).then(function(result) {
       globalResult = result;
       return globalResult.showElement(elementToShow);
@@ -299,4 +299,49 @@ describe('minerva global', function() {
     });
   });
 
+  it("setCenter", function() {
+    var options = {
+      projectId : "sample",
+      element : testDiv
+    };
+    var globalResult;
+    return minerva.create(options).then(function(result) {
+      globalResult = result;
+      return result.setCenter({
+        modelId : 15781,
+        x : 10,
+        y : 20,
+      });
+    }).then(function() {
+      var sessionData = ServerConnectorMock.getSessionData(globalResult.getProject());
+      var center = sessionData.getCenter(globalResult.getProject().getModel());
+      assert.ok(center instanceof google.maps.Point);
+      assert.closeTo(parseFloat(center.x), 10, EPSILON);
+      assert.closeTo(parseFloat(center.y), 20, EPSILON);
+    }).then(function() {
+      globalResult.destroy();
+    });
+  });
+
+  it("setZoom", function() {
+    var options = {
+      projectId : "sample",
+      element : testDiv
+    };
+    var globalResult;
+    return minerva.create(options).then(function(result) {
+      globalResult = result;
+      return result.setZoom({
+        modelId : 15781,
+        zoom : 10,
+      });
+    }).then(function() {
+      var sessionData = ServerConnectorMock.getSessionData(globalResult.getProject());
+      var zoom = sessionData.getZoomLevel(globalResult.getProject().getModel());
+      assert.equal(zoom, 10);
+    }).then(function() {
+      globalResult.destroy();
+    });
+  });
+
 });
diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js
index 9267f89710..b1db324c21 100644
--- a/frontend-js/src/test/js/mocha-config.js
+++ b/frontend-js/src/test/js/mocha-config.js
@@ -21,6 +21,8 @@ global.$ = require('jQuery');
 global.jQuery = $;
 global.window.$ = $;
 
+global.EPSILON = 1e-6;
+
 // additions to jsdom implementations:
 global.Option = window.Option;
 window.open = function() {
-- 
GitLab