From cc6040ed9c4bf79c4e9b62448e13f92a52aa7184 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Wed, 28 Mar 2018 16:12:27 +0200
Subject: [PATCH] prevent to load logged user data twice

---
 frontend-js/src/main/js/ServerConnector.js      |  3 ++-
 frontend-js/src/test/js/ServerConnector-test.js | 17 +++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index fb12da4020..698bd803ef 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -971,7 +971,7 @@ ServerConnector.getLoggedUser = function () {
   if (self._loggedUser !== undefined) {
     return Promise.resolve(self._loggedUser);
   } else {
-    return self.getUser(self.getSessionData().getLogin()).then(function (user) {
+    self._loggedUser = self.getUser(self.getSessionData().getLogin()).then(function (user) {
       if (user !== null) {
         self._loggedUser = user;
         return self._loggedUser;
@@ -979,6 +979,7 @@ ServerConnector.getLoggedUser = function () {
         return Promise.reject(new Error("User " + self.getSessionData().getLogin() + " doesn't exist"));
       }
     });
+    return self._loggedUser;
   }
 };
 
diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js
index cc30334eec..8b8ed6a47f 100644
--- a/frontend-js/src/test/js/ServerConnector-test.js
+++ b/frontend-js/src/test/js/ServerConnector-test.js
@@ -402,5 +402,22 @@ describe('ServerConnector', function () {
     });
   });
 
+  it('getLoggedUser called twice', function () {
+    var called = 0;
+    var orginalFunction = ServerConnector.getUser;
+    ServerConnector.getUser = function (login) {
+      called++;
+      return Promise.delay(20, orginalFunction.call(ServerConnector, login));
+    };
+
+    var promises = [ServerConnector.getLoggedUser(), ServerConnector.getLoggedUser()];
+    return Promise.all(promises).then(function (result) {
+      assert.ok(result[0] === result[1]);
+      assert.equal(1, called);
+    }).finally(function () {
+      ServerConnector.getUser = orginalFunction;
+    });
+  });
+
 
 });
-- 
GitLab