diff --git a/frontend-js/src/main/js/Configuration.js b/frontend-js/src/main/js/Configuration.js index 4fea03415fba071f576d59cd328cf06971a691ba..8254c7ae0b3d8934091205cd54967228bb26af87 100644 --- a/frontend-js/src/main/js/Configuration.js +++ b/frontend-js/src/main/js/Configuration.js @@ -107,7 +107,7 @@ Configuration.prototype.getOption = function (type) { /** * - * @returns {Array} + * @returns {ConfigurationOption[]} */ Configuration.prototype.getOptions = function () { var self = this; diff --git a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js index 5bd068d5203b4d55567942693c3d8e70449e24a7..f1f7fc907278d3858bc4be0d25eba16d744c7b2a 100644 --- a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js @@ -115,17 +115,28 @@ ConfigurationAdminPanel.prototype._createGui = function () { }); }; +/** + * + * @returns {Promise} + */ ConfigurationAdminPanel.prototype.init = function () { var self = this; - var user; - return ServerConnector.getLoggedUser().then(function (result) { - user = result; + return self.getServerConnector().getLoggedUser().then(function (user) { var configuration = self.getConfiguration(); var privilege = configuration.getPrivilegeType(PrivilegeType.CONFIGURATION_MANAGE); - self.setOptions(configuration.getOptions(), user.hasPrivilege(privilege)); + if (user.hasPrivilege(privilege)) { + self.setOptions(configuration.getOptions(), true); + } else { + self.disablePanel("You have no privilege to manage configuration"); + } }); }; +/** + * + * @param {ConfigurationOption[]} options + * @param {boolean} editable + */ ConfigurationAdminPanel.prototype.setOptions = function (options, editable) { var self = this; var dataTable = $("[name='configurationTable']", self.getElement()).DataTable(); @@ -155,6 +166,12 @@ ConfigurationAdminPanel.prototype.setOptions = function (options, editable) { dataTable.clear().rows.add(data).draw(); }; +/** + * + * @param {ConfigurationOption} option + * @param {boolean} editable + * @returns {Array} + */ ConfigurationAdminPanel.prototype.optionToTableRow = function (option, editable) { var value = option.getValue(); var row = []; @@ -186,7 +203,7 @@ ConfigurationAdminPanel.prototype.optionToTableRow = function (option, editable) "</div>"; } else { logger.warn("Don't know how to handle: " + option.getValueType()); - editOption = "<input name='edit-" + option.getType() + "' value='" + value + "'readonly/>"; + editOption = "<input name='edit-" + option.getType() + "' value='" + value + "' readonly/>"; } var group = option.getGroup(); if (group === undefined) { @@ -201,7 +218,7 @@ ConfigurationAdminPanel.prototype.optionToTableRow = function (option, editable) ConfigurationAdminPanel.prototype.saveOption = function (type) { var self = this; - return ServerConnector.getConfiguration().then(function (configuration) { + return self.getServerConnector().getConfiguration().then(function (configuration) { var option = configuration.getOption(type); var element = $("[name='edit-" + type + "']", self.getElement()); var value; @@ -215,7 +232,7 @@ ConfigurationAdminPanel.prototype.saveOption = function (type) { value = element.val(); } option.setValue(value); - return ServerConnector.updateConfigurationOption(option); + return self.getServerConnector().updateConfigurationOption(option); }); }; ConfigurationAdminPanel.prototype.destroy = function () { diff --git a/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js index 8e2aa3f5626a65f1e0ff40ae2e59fec348e02ab1..88c7e88371b4fa39bd6184edf8c2574145e0a22c 100644 --- a/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js +++ b/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js @@ -10,6 +10,14 @@ var logger = require('../../logger'); var chai = require('chai'); var assert = chai.assert; +function createConfigurationTab(configuration) { + return new ConfigurationAdminPanel({ + element: testDiv, + configuration: configuration, + serverConnector: ServerConnector + }); +} + describe('ConfigurationAdminPanel', function () { describe('init', function () { @@ -17,13 +25,11 @@ describe('ConfigurationAdminPanel', function () { helper.loginAsAdmin(); var mapTab; return ServerConnector.getConfiguration().then(function (configuration) { - mapTab = new ConfigurationAdminPanel({ - element: testDiv, - configuration: configuration - }); + mapTab = createConfigurationTab(configuration); return mapTab.init(); }).then(function () { assert.equal(0, logger.getWarnings().length); + assert.ok($("[name='saveOption']", testDiv).length > 0); assert.notOk($("[name='saveOption']", testDiv).prop('disabled')); return mapTab.destroy(); }); @@ -32,25 +38,20 @@ describe('ConfigurationAdminPanel', function () { helper.loginWithoutAccess(); var mapTab; return ServerConnector.getConfiguration().then(function (configuration) { - mapTab = new ConfigurationAdminPanel({ - element: testDiv, - configuration: configuration - }); + mapTab = createConfigurationTab(configuration); return mapTab.init(); }).then(function () { assert.equal(0, logger.getWarnings().length); - assert.ok($("[name='saveOption']", testDiv).prop('disabled')); + assert.equal($("[name='saveOption']", testDiv).length, 0); return mapTab.destroy(); }); }); }); it('saveOption', function () { + helper.loginAsAdmin(); var mapTab; return ServerConnector.getConfiguration().then(function (configuration) { - mapTab = new ConfigurationAdminPanel({ - element: testDiv, - configuration: configuration - }); + mapTab = createConfigurationTab(configuration); return mapTab.init(); }).then(function () { return mapTab.saveOption(ConfigurationType.DEFAULT_MAP); diff --git a/frontend-js/testFiles/apiCalls/configuration/options/DEFAULT_MAP/PATCH_option.type=DEFAULT_MAP&option.value=sample&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/options/DEFAULT_MAP/PATCH_option.type=DEFAULT_MAP&option.value=sample&token=ADMIN_TOKEN_ID& similarity index 100% rename from frontend-js/testFiles/apiCalls/configuration/options/DEFAULT_MAP/PATCH_option.type=DEFAULT_MAP&option.value=sample&token=MOCK_TOKEN_ID& rename to frontend-js/testFiles/apiCalls/configuration/options/DEFAULT_MAP/PATCH_option.type=DEFAULT_MAP&option.value=sample&token=ADMIN_TOKEN_ID&