Repository: ambari Updated Branches: refs/heads/trunk f58abd481 -> a19cac753
AMBARI-21571 Making changes to a config group is forcing updates to other values which customer do not intend to change. (atkach) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a19cac75 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a19cac75 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a19cac75 Branch: refs/heads/trunk Commit: a19cac7536e8e9f10d7a207559794c289d01485d Parents: f58abd4 Author: Andrii Tkach <atk...@apache.org> Authored: Tue Jul 25 18:24:04 2017 +0300 Committer: Andrii Tkach <atk...@apache.org> Committed: Wed Jul 26 12:12:59 2017 +0300 ---------------------------------------------------------------------- .../mixins/common/configs/enhanced_configs.js | 23 ++++++++-- .../common/configs/enhanced_configs_test.js | 48 +++++++++++++++++++- 2 files changed, 66 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/a19cac75/ambari-web/app/mixins/common/configs/enhanced_configs.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mixins/common/configs/enhanced_configs.js b/ambari-web/app/mixins/common/configs/enhanced_configs.js index 8fc7a4c..a5af407 100644 --- a/ambari-web/app/mixins/common/configs/enhanced_configs.js +++ b/ambari-web/app/mixins/common/configs/enhanced_configs.js @@ -464,10 +464,10 @@ App.EnhancedConfigsMixin = Em.Mixin.create(App.ConfigWithOverrideRecommendationP var self = this; var recommendations = event ? this.get('changedProperties') : this.get('recommendations'), recommendedChanges = recommendations.filterProperty('isEditable'), - requiredChanges = recommendations.filterProperty('isEditable', false); - if (recommendations.length > 0) { + requiredChanges = this.filterRequiredChanges(recommendations); + if (recommendedChanges.length > 0 || requiredChanges.length > 0) { App.showDependentConfigsPopup(recommendedChanges, requiredChanges, function() { - self.onSaveRecommendedPopup(recommendations); + self.onSaveRecommendedPopup(recommendedChanges.concat(requiredChanges)); if (callback) callback(); }, secondary); } else { @@ -476,6 +476,23 @@ App.EnhancedConfigsMixin = Em.Mixin.create(App.ConfigWithOverrideRecommendationP }, /** + * + * @param {Array} recommendations + * @returns {Array} + */ + filterRequiredChanges: function(recommendations) { + return recommendations.filter(function(recommendation) { + if (recommendation.isEditable === false) { + if (!this.get('selectedConfigGroup.isDefault')) { + return App.ServiceConfigGroup.defaultGroupName !== recommendation.configGroup + } else { + return true; + } + } + }, this); + }, + + /** * update configs when toggle checkbox on dependent configs popup */ onSaveRecommendedPopup: function(recommendations) { http://git-wip-us.apache.org/repos/asf/ambari/blob/a19cac75/ambari-web/test/mixins/common/configs/enhanced_configs_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/mixins/common/configs/enhanced_configs_test.js b/ambari-web/test/mixins/common/configs/enhanced_configs_test.js index c0d332c..999ed8c 100644 --- a/ambari-web/test/mixins/common/configs/enhanced_configs_test.js +++ b/ambari-web/test/mixins/common/configs/enhanced_configs_test.js @@ -1094,12 +1094,14 @@ describe('App.EnhancedConfigsMixin', function () { callback(); }); sinon.stub(mixin, 'onSaveRecommendedPopup'); + sinon.stub(mixin, 'filterRequiredChanges').returns([]); sinon.stub(mock, 'callback'); }); afterEach(function() { App.showDependentConfigsPopup.restore(); mixin.onSaveRecommendedPopup.restore(); + mixin.filterRequiredChanges.restore(); mock.callback.restore(); }); @@ -1110,9 +1112,9 @@ describe('App.EnhancedConfigsMixin', function () { }); it("onSaveRecommendedPopup should be called", function() { - mixin.set('recommendations', [{}]); + mixin.set('recommendations', [{isEditable: true}]); mixin.showChangedDependentConfigs(null, mock.callback, Em.K); - expect(mixin.onSaveRecommendedPopup.calledWith([{}])).to.be.true; + expect(mixin.onSaveRecommendedPopup.calledWith([{isEditable: true}])).to.be.true; expect(mock.callback.calledOnce).to.be.true; }); }); @@ -1411,6 +1413,48 @@ describe('App.EnhancedConfigsMixin', function () { }); + describe('#filterRequiredChanges', function() { + it('all recommendations editable', function() { + var recommendations = [ + { + isEditable: true + } + ]; + expect(mixin.filterRequiredChanges(recommendations)).to.be.empty; + }); + + it('recommendations not editable when editing default config group', function() { + mixin.set('selectedConfigGroup', Em.Object.create({isDefault: true})); + var recommendations = [ + { + isEditable: false + } + ]; + expect(mixin.filterRequiredChanges(recommendations)).to.be.eql(recommendations); + }); + + it('recommendations not editable when editing non-default config group for default group', function() { + mixin.set('selectedConfigGroup', Em.Object.create({isDefault: false})); + var recommendations = [ + { + isEditable: false, + configGroup: App.ServiceConfigGroup.defaultGroupName + } + ]; + expect(mixin.filterRequiredChanges(recommendations)).to.be.empty; + }); + + it('recommendations not editable when editing non-default config group for non-default group', function() { + mixin.set('selectedConfigGroup', Em.Object.create({isDefault: false})); + var recommendations = [ + { + isEditable: false, + configGroup: 'g1' + } + ]; + expect(mixin.filterRequiredChanges(recommendations)).to.be.eql(recommendations); + }); + }); });