diff --git a/frontend-js/src/main/js/gui/admin/EditUserDialog.js b/frontend-js/src/main/js/gui/admin/EditUserDialog.js index 114543974af9df810125d5e1e4cf5c4041272742..7d1893b03c9f54bfb144fc98e454c531baa5cf43 100644 --- a/frontend-js/src/main/js/gui/admin/EditUserDialog.js +++ b/frontend-js/src/main/js/gui/admin/EditUserDialog.js @@ -256,7 +256,7 @@ EditUserDialog.prototype.init = function () { var detailsTable = $("[name=detailsTable]", self.getElement())[0]; - var dataTable = $(detailsTable).DataTable({ + $(detailsTable).DataTable({ columns: [{ title: "Name" }, { @@ -267,6 +267,20 @@ EditUserDialog.prototype.init = function () { searching: false, bInfo: false }); + + self.initProjectsTab(); + self.initPrivilegesTab(); + + return self.refresh().then(function () { + $(window).trigger('resize'); + }); +}; + +EditUserDialog.prototype.refresh = function () { + var self = this; + + var dataTable = $("[name=detailsTable]", self.getElement()).DataTable(); + var data = []; var user = self.getUser(); @@ -275,6 +289,7 @@ EditUserDialog.prototype.init = function () { if (user.getLogin() !== undefined) { readonly = ' readonly '; } + data.push(['Login', '<input name="userLogin" value="' + getStringIfDefined(user.getLogin()) + '" ' + readonly + '/>']); data.push(['Password', '<input type="password" name="userPassword" value=""/>']); data.push(['Confirm password', '<input type="password" name="userPassword2" value=""/>']); @@ -284,11 +299,8 @@ EditUserDialog.prototype.init = function () { dataTable.clear().rows.add(data).draw(); - self.initProjectsTab(); return self.refreshProjects().then(function () { - return self.initPrivilegesTab(); - }).then(function () { - $(window).trigger('resize'); + return self.refreshPrivilegesTab(); }); }; @@ -340,17 +352,53 @@ EditUserDialog.prototype.initPrivilegesTab = function () { var privilegesTable = $("[name=privilegesTable]", self.getElement())[0]; - var configuration = self.getConfiguration(); var columns = [{ title: "Name" }, { title: "Value" }]; - var dataTable = $(privilegesTable).DataTable({ + + $(privilegesTable).DataTable({ columns: columns }); - var data = []; + var configuration = self.getConfiguration(); + $(privilegesTable).on("click", "[name='privilege-checkbox']", function () { + var privilegeType = $(this).attr("data"); + for (var i = 0; i < configuration.getPrivilegeTypes().length; i++) { + var privilege = configuration.getPrivilegeTypes()[i]; + if (privilege.getName() === privilegeType) { + var value = $(this).is(":checked") ? 1 : 0; + self.getUser().setPrivilege({type: privilege, value: value}); + } + } + }); + $(privilegesTable).on("change", "[name='privilege-int']", function () { + var privilegeType = $(this).attr("data"); + var value = $(this).val(); + value = parseInt(value); + if (Functions.isInt(value)) { + for (var i = 0; i < configuration.getPrivilegeTypes().length; i++) { + var privilege = configuration.getPrivilegeTypes()[i]; + if (privilege.getName() === privilegeType) { + self.getUser().setPrivilege({type: privilege, value: value}); + } + } + } + }); + +}; + +/** + * + */ +EditUserDialog.prototype.refreshPrivilegesTab = function () { + var self = this; + + var dataTable = $("[name=privilegesTable]", self.getElement()).DataTable(); + + var data = []; + var configuration = self.getConfiguration(); for (var i = 0; i < configuration.getPrivilegeTypes().length; i++) { var privilege = configuration.getPrivilegeTypes()[i]; var option; @@ -390,29 +438,6 @@ EditUserDialog.prototype.initPrivilegesTab = function () { } } dataTable.clear().rows.add(data).draw(); - $(privilegesTable).on("click", "[name='privilege-checkbox']", function () { - var privilegeType = $(this).attr("data"); - for (var i = 0; i < configuration.getPrivilegeTypes().length; i++) { - var privilege = configuration.getPrivilegeTypes()[i]; - if (privilege.getName() === privilegeType) { - var value = $(this).is(":checked") ? 1 : 0; - self.getUser().setPrivilege({type: privilege, value: value}); - } - } - }); - $(privilegesTable).on("change", "[name='privilege-int']", function () { - var privilegeType = $(this).attr("data"); - var value = $(this).val(); - value = parseInt(value); - if (Functions.isInt(value)) { - for (var i = 0; i < configuration.getPrivilegeTypes().length; i++) { - var privilege = configuration.getPrivilegeTypes()[i]; - if (privilege.getName() === privilegeType) { - self.getUser().setPrivilege({type: privilege, value: value}); - } - } - } - }); }; /** diff --git a/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js b/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js index 4a87c0ec4e883009c2c67d840a8ffad88fe0855a..fb233eaa895767f827f3f7b296d9e953eebe2653 100644 --- a/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js @@ -237,7 +237,9 @@ UsersAdminPanel.prototype.getDialog = function (user) { return dialog; }); } else { - return Promise.resolve(dialog); + return dialog.refresh().then(function () { + return dialog; + }); } }; diff --git a/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js index fb675b9525b9a984701bf5569cc54b48577afd6f..b225da055dea2b9d6f92cef9df663dd259169f50 100644 --- a/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js +++ b/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js @@ -11,38 +11,35 @@ var logger = require('../../logger'); var assert = require('assert'); -function createUserAdminPanel(configuration) { +/** + * + * @returns {UsersAdminPanel} + */ +function createUserAdminPanel() { return new UsersAdminPanel({ element: testDiv, - configuration: configuration, + configuration: helper.getConfiguration(), serverConnector: ServerConnector }); } describe('UsersAdminPanel', function () { - describe('init', function () { it('default', function () { helper.loginAsAdmin(); - var usersTab; - return ServerConnector.getConfiguration().then(function (configuration) { - usersTab = createUserAdminPanel(configuration); - return usersTab.init(); - }).then(function () { + var usersTab = createUserAdminPanel(); + return usersTab.init().then(function () { assert.equal(0, logger.getWarnings().length); return usersTab.destroy(); }); }); it('user without access', function () { - var usersTab; var oldFun = ServerConnector.getUsers; ServerConnector.getUsers = function () { return Promise.reject(new SecurityError("Access denied.")); }; - return ServerConnector.getConfiguration().then(function (configuration) { - usersTab = createUserAdminPanel(configuration); - return usersTab.init(); - }).then(function () { + var usersTab = createUserAdminPanel(); + return usersTab.init().then(function () { assert.equal(0, logger.getWarnings().length); assert.ok(usersTab.getElement().innerHTML.indexOf("no privilege") >= 0); return usersTab.destroy(); @@ -54,36 +51,51 @@ describe('UsersAdminPanel', function () { it('refresh', function () { helper.loginAsAdmin(); - var usersTab; - return ServerConnector.getConfiguration().then(function (configuration) { - usersTab = createUserAdminPanel(configuration); - return usersTab.init(); - }).then(function () { + var usersTab = createUserAdminPanel(); + return usersTab.init().then(function () { return usersTab.onRefreshClicked(); }).then(function () { return usersTab.destroy(); }); }); - it('showEditDialog', function () { - helper.loginAsAdmin(); - var usersTab; - return ServerConnector.getConfiguration().then(function (configuration) { - usersTab = createUserAdminPanel(configuration); - return usersTab.init(); - }).then(function () { - return usersTab.showEditDialog("anonymous"); - }).then(function () { - return usersTab.destroy(); + describe('showEditDialog', function () { + it('default', function () { + helper.loginAsAdmin(); + var usersTab = createUserAdminPanel(); + return usersTab.init().then(function () { + return usersTab.showEditDialog("anonymous"); + }).then(function () { + return usersTab.destroy(); + }); + }); + + it('after user was changed locally', function () { + helper.loginAsAdmin(); + var usersTab = createUserAdminPanel(); + var originalFunction = ServerConnector.getUser; + return usersTab.init().then(function () { + return usersTab.showEditDialog("anonymous"); + }).then(function () { + return ServerConnector.getUser("anonymous"); + }).then(function (user) { + user.setEmail("email.changed@uni.lu"); + ServerConnector.getUser = function () { + return Promise.resolve(user); + }; + return usersTab.showEditDialog("anonymous"); + }).then(function () { + assert.ok(document.body.innerHTML.indexOf("email.changed@uni.lu") >= 0, "User data wasn't refreshed on second opening"); + return usersTab.destroy(); + }).finally(function () { + ServerConnector.getUser = originalFunction; + }); }); }); it('onAddClicked', function () { helper.loginAsAdmin(); - var usersTab; - return ServerConnector.getConfiguration().then(function (configuration) { - usersTab = createUserAdminPanel(configuration); - return usersTab.init(); - }).then(function () { + var usersTab = createUserAdminPanel(); + return usersTab.init().then(function () { return usersTab.onAddClicked(); }).then(function () { return usersTab.destroy(); @@ -91,4 +103,5 @@ describe('UsersAdminPanel', function () { }); -}); +}) +;