Repository: ambari Updated Branches: refs/heads/trunk 6cf98ff4a -> a5716364c
AMBARI-7640 Validation required for adding a Group Name (nandat via jaoki) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a5716364 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a5716364 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a5716364 Branch: refs/heads/trunk Commit: a5716364cba4cbbd58c55d915b3ac0e86433dca3 Parents: 6cf98ff Author: Jun Aoki <[email protected]> Authored: Mon Oct 13 17:13:02 2014 -0700 Committer: Jun Aoki <[email protected]> Committed: Mon Oct 13 17:13:02 2014 -0700 ---------------------------------------------------------------------- ambari-web/app/assets/test/tests.js | 1 + .../service/manage_config_groups_controller.js | 15 ++++++++++++--- ambari-web/app/messages.js | 1 + ambari-web/app/utils/validator.js | 10 ++++++++++ ambari-web/test/utils/validator_test.js | 18 ++++++++++++++++++ 5 files changed, 42 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/app/assets/test/tests.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js index 95e9073..74f8a4c 100644 --- a/ambari-web/app/assets/test/tests.js +++ b/ambari-web/app/assets/test/tests.js @@ -71,6 +71,7 @@ var files = ['test/init_model_test', 'test/controllers/main/host/configs_service_test', 'test/controllers/main/host/details_test', 'test/controllers/main/service/add_controller_test', + 'test/controllers/main/service/manage_config_groups_controller_test', 'test/controllers/main/service/reassign_controller_test', 'test/controllers/main/service/reassign/step2_controller_test', 'test/controllers/main/service/reassign/step4_controller_test', http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/app/controllers/main/service/manage_config_groups_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/manage_config_groups_controller.js b/ambari-web/app/controllers/main/service/manage_config_groups_controller.js index 56c77f4..2110a87 100644 --- a/ambari-web/app/controllers/main/service/manage_config_groups_controller.js +++ b/ambari-web/app/controllers/main/service/manage_config_groups_controller.js @@ -18,6 +18,7 @@ var App = require('app'); +var validator = require('utils/validator'); var hostsManagement = require('utils/hosts'); var numberUtils = require('utils/number_utils'); @@ -427,19 +428,23 @@ App.ManageConfigGroupsController = Em.Controller.extend({ validate: function () { var warningMessage = ''; var originalGroup = self.get('selectedConfigGroup'); + var groupName = this.get('configGroupName').trim(); if (originalGroup.get('description') !== this.get('configGroupDesc') && !this.get('isDescriptionDirty')) { this.set('isDescriptionDirty', true); } - if (originalGroup.get('name').trim() === this.get('configGroupName').trim()) { + if (originalGroup.get('name').trim() === groupName) { if (this.get('isDescriptionDirty')) { warningMessage = ''; } else { warningMessage = Em.I18n.t("config.group.selection.dialog.err.name.exists"); } } else { - if (self.get('configGroups').mapProperty('name').contains(this.get('configGroupName').trim())) { + if (self.get('configGroups').mapProperty('name').contains(groupName)) { warningMessage = Em.I18n.t("config.group.selection.dialog.err.name.exists"); } + else if (groupName && !validator.isValidConfigGroupName(groupName)) { + warningMessage = Em.I18n.t("form.validator.configGroupName"); + } } this.set('warningMessage', warningMessage); }.observes('configGroupName', 'configGroupDesc'), @@ -479,9 +484,13 @@ App.ManageConfigGroupsController = Em.Controller.extend({ }, validate: function () { var warningMessage = ''; - if (self.get('configGroups').mapProperty('name').contains(this.get('configGroupName').trim())) { + var groupName = this.get('configGroupName').trim(); + if (self.get('configGroups').mapProperty('name').contains(groupName)) { warningMessage = Em.I18n.t("config.group.selection.dialog.err.name.exists"); } + else if (groupName && !validator.isValidConfigGroupName(groupName)) { + warningMessage = Em.I18n.t("form.validator.configGroupName"); + } this.set('warningMessage', warningMessage); }.observes('configGroupName'), disablePrimary: function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index c8baad5..67eed85 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -816,6 +816,7 @@ Em.I18n.translations = { 'form.validator.invalidIp':'Please enter valid ip address', 'form.validator.configKey':'Invalid Key. Only alphanumerics, hyphens, underscores, asterisks and periods are allowed.', + 'form.validator.configGroupName':'Invalid Group Name. Only alphanumerics, hyphens, spaces and underscores are allowed.', 'form.validator.configKey.specific':'"{0}" is invalid Key. Only alphanumerics, hyphens, underscores, asterisks and periods are allowed.', 'admin.advanced.caution':'This section is for advanced user only.<br/>Proceed with caution.', http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/app/utils/validator.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/validator.js b/ambari-web/app/utils/validator.js index 0b8afb2..0ba44ad 100644 --- a/ambari-web/app/utils/validator.js +++ b/ambari-web/app/utils/validator.js @@ -130,6 +130,16 @@ module.exports = { return configKeyRegex.test(value); }, + /** + * validate configuration group name + * @param value + * @return {Boolean} + */ + isValidConfigGroupName: function(value) { + var configKeyRegex = /^[\s0-9a-z_\-]+$/i; + return configKeyRegex.test(value); + }, + empty:function (e) { switch (e) { case "": http://git-wip-us.apache.org/repos/asf/ambari/blob/a5716364/ambari-web/test/utils/validator_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/utils/validator_test.js b/ambari-web/test/utils/validator_test.js index 79f11ac..a449b6a 100644 --- a/ambari-web/test/utils/validator_test.js +++ b/ambari-web/test/utils/validator_test.js @@ -332,6 +332,24 @@ describe('validator', function () { }) }); }); + describe('#isValidConfigGroupName(value)', function() { + var tests = [ + {m:'"123" - valid',i:'123',e:true}, + {m:'"abc" - valid',i:'abc',e:true}, + {m:'"abc123" - valid',i:'abc123',e:true}, + {m:'".abc." - invalid',i:'.abc.',e:false}, + {m:'"_abc_" - valid',i:'_abc_',e:true}, + {m:'"-abc-" - valid',i:'-abc-',e:true}, + {m:'" abc 123 " - valid',i:' abc 123 ',e:true}, + {m:'"a"b" - invalid',i:'a"b',e:false}, + {m:'"a\'b" - invalid',i:'a\'b',e:false} + ]; + tests.forEach(function(test) { + it(test.m + ' ', function () { + expect(validator.isValidConfigGroupName(test.i)).to.equal(test.e); + }) + }); + }); describe('#isValidMatchesRegexp()', function() { var message = '`{0}` should be {1}',
