From c6489b26cefe08a2d19139baf1d822fba104f3ad Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 19 Mar 2018 16:49:57 +0100
Subject: [PATCH] unit tests for remove confirmation button

---
 .../main/js/gui/admin/CommentsAdminPanel.js   | 14 ++--
 .../js/gui/admin/CommentsAdminPanel-test.js   | 78 +++++++++++++++++++
 .../src/test/js/map/AbstractCustomMap-test.js |  1 -
 frontend-js/src/test/js/mocha-config.js       | 10 +++
 4 files changed, 97 insertions(+), 6 deletions(-)
 create mode 100644 frontend-js/src/test/js/gui/admin/CommentsAdminPanel-test.js

diff --git a/frontend-js/src/main/js/gui/admin/CommentsAdminPanel.js b/frontend-js/src/main/js/gui/admin/CommentsAdminPanel.js
index d17ed86cb0..9bb28be683 100644
--- a/frontend-js/src/main/js/gui/admin/CommentsAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/CommentsAdminPanel.js
@@ -139,7 +139,7 @@ CommentsAdminPanel.prototype.onProjectChange = function () {
     dataTable.clear().rows.add(data).draw();
     $("[name='commentsTable']", self.getElement()).on("click", "[name='removeComment']", function () {
       var button = this;
-      return self.askConfirmRemoval().then(function (param) {
+      return self.askConfirmRemoval({title: "Why do you want to remove this comment?"}).then(function (param) {
         if (param.status) {
           return ServerConnector.removeComment({
             commentId: $(button).attr("data"),
@@ -211,18 +211,22 @@ CommentsAdminPanel.prototype.destroy = function () {
   }
 };
 
-CommentsAdminPanel.prototype.askConfirmRemoval = function () {
+CommentsAdminPanel.prototype.askConfirmRemoval = function (params) {
   return new Promise(function (resolve) {
     $('<form><input type="text" style="z-index:10000" name="name"><br></form>').dialog({
       modal: true,
-      title: "Why do you want to remove this comment?",
+      title: params.title,
+      close: function () {
+        $(this).dialog('destroy').remove();
+        resolve({status: false});
+      },
       buttons: {
         'OK': function () {
-          $(this).dialog('close');
+          $(this).dialog('destroy').remove();
           resolve({reason: $('input[name="name"]').val(), status: true});
         },
         'Cancel': function () {
-          $(this).dialog('close');
+          $(this).dialog('destroy').remove();
           resolve({status: false});
         }
       }
diff --git a/frontend-js/src/test/js/gui/admin/CommentsAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/CommentsAdminPanel-test.js
new file mode 100644
index 0000000000..c7875b3427
--- /dev/null
+++ b/frontend-js/src/test/js/gui/admin/CommentsAdminPanel-test.js
@@ -0,0 +1,78 @@
+"use strict";
+
+require("../../mocha-config");
+
+var CommentsAdminPanel = require('../../../../main/js/gui/admin/CommentsAdminPanel');
+var ServerConnector = require('../../ServerConnector-mock');
+
+
+var logger = require('../../logger');
+
+var fs = require("fs");
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('CommentsAdminPanel', function () {
+  function createDialog() {
+    return ServerConnector.getConfiguration().then(function (configuration) {
+      return new CommentsAdminPanel({
+        element: testDiv,
+        configuration: configuration,
+        customMap: null
+      });
+    });
+  }
+
+  describe('askConfirmRemoval', function () {
+    it('check question', function () {
+      helper.loginAsAdmin();
+      return createDialog().then(function (dialog) {
+        var title = "Question?";
+        dialog.askConfirmRemoval({title: title});
+        assert.ok($(".ui-dialog-title").html().indexOf(title) >= 0);
+        $("button:contains(Cancel)").click();
+
+        return dialog.destroy();
+      });
+    });
+    it('check ok status', function () {
+      helper.loginAsAdmin();
+      var dialog;
+      return createDialog().then(function (result) {
+        dialog = result;
+        var promise = dialog.askConfirmRemoval({title: "Question?"});
+        $("button:contains(OK)").click();
+        return promise;
+      }).then(function (result) {
+        assert.ok(result.status);
+        return dialog.destroy();
+      });
+    });
+    it('check cancel status', function () {
+      helper.loginAsAdmin();
+      var dialog;
+      return createDialog().then(function (result) {
+        dialog = result;
+        var promise = dialog.askConfirmRemoval({title: "Question?"});
+        $("button:contains(Cancel)").click();
+        return promise;
+      }).then(function (result) {
+        assert.notOk(result.status);
+        return dialog.destroy();
+      });
+    });
+    it('check close confirmation status', function () {
+      helper.loginAsAdmin();
+      var dialog;
+      return createDialog().then(function (result) {
+        dialog = result;
+        var promise = dialog.askConfirmRemoval({title: "Question?"});
+        $(".ui-dialog-titlebar-close").click();
+        return promise;
+      }).then(function (result) {
+        assert.notOk(result.status);
+        return dialog.destroy();
+      });
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/map/AbstractCustomMap-test.js b/frontend-js/src/test/js/map/AbstractCustomMap-test.js
index 1b76576dc5..011d3a7157 100644
--- a/frontend-js/src/test/js/map/AbstractCustomMap-test.js
+++ b/frontend-js/src/test/js/map/AbstractCustomMap-test.js
@@ -356,7 +356,6 @@ describe('AbstractCustomMap', function () {
       var reaction = helper.createReaction(map);
       var center = map.getGoogleMap().getCenter();
       return map.fitBounds([reaction]).then(function () {
-
         var center2 = map.getGoogleMap().getCenter();
         assert.ok(center.lat() !== center2.lat() || center.lng() !== center2.lng());
       })
diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js
index 2be1c6fc3d..9d2ffcb822 100644
--- a/frontend-js/src/test/js/mocha-config.js
+++ b/frontend-js/src/test/js/mocha-config.js
@@ -159,5 +159,15 @@ afterEach(function () {
       $(window).off("resize");
       this.test.error(new Error("Test didn't left clean resize events handlers."));
     }
+  } else {
+    //when failed don't forget to clean events
+    if ($._data(window, "events").resize) {
+      logger.warn("Clearing events: " + $._data(window, "events").resize);
+      $(window).off("resize");
+    }
+    if (document.body.hasChildNodes()) {
+      logger.warn("Clearing html");
+      document.body.innerHTML = "";
+    }
   }
 });
-- 
GitLab