Repository: ambari Updated Branches: refs/heads/branch-2.5 6b50e2b96 -> e80e86c8c
AMBARI-19960 No config properties are changed after deleting service if it's performed after service page refresh. (ababiichuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e80e86c8 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e80e86c8 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e80e86c8 Branch: refs/heads/branch-2.5 Commit: e80e86c8cd46438de7ff239b59787eb427d7df1c Parents: 6b50e2b Author: ababiichuk <[email protected]> Authored: Fri Feb 10 16:04:21 2017 +0200 Committer: ababiichuk <[email protected]> Committed: Fri Feb 10 16:04:21 2017 +0200 ---------------------------------------------------------------------- ambari-web/app/controllers/main/service/item.js | 55 +++++++++++--------- .../test/controllers/main/service/item_test.js | 48 ++++++++++++++++- 2 files changed, 77 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e80e86c8/ambari-web/app/controllers/main/service/item.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/item.js b/ambari-web/app/controllers/main/service/item.js index 6f1efd8..11df45a 100644 --- a/ambari-web/app/controllers/main/service/item.js +++ b/ambari-web/app/controllers/main/service/item.js @@ -142,8 +142,9 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow * @type {String[]} */ dependentServiceNames: function() { - return App.StackService.find(this.get('content.serviceName')).get('dependentServiceNames'); - }.property('content.serviceName'), + return App.get('router.clusterController.isConfigsPropertiesLoaded') ? + App.StackService.find(this.get('content.serviceName')).get('dependentServiceNames') : []; + }.property('content.serviceName', 'App.router.clusterController.isConfigsPropertiesLoaded'), /** * List of service names that could be deleted @@ -202,32 +203,35 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow */ onLoadConfigsTags: function (data) { var self = this; - var sitesToLoad = this.get('sitesToLoad'), allConfigs = []; - var loadedSites = data.Clusters.desired_configs; - var siteTagsToLoad = []; - for (var site in loadedSites) { - if (sitesToLoad.contains(site)) { - siteTagsToLoad.push({ - siteName: site, - tagName: loadedSites[site].tag - }); + App.get('router.mainController.isLoading').call(App.get('router.clusterController'), 'isConfigsPropertiesLoaded').done(function () { + var sitesToLoad = self.get('sitesToLoad'), + allConfigs = [], + loadedSites = data.Clusters.desired_configs, + siteTagsToLoad = []; + for (var site in loadedSites) { + if (sitesToLoad.contains(site)) { + siteTagsToLoad.push({ + siteName: site, + tagName: loadedSites[site].tag + }); + } } - } - App.router.get('configurationController').getConfigsByTags(siteTagsToLoad).done(function (configs) { - configs.forEach(function (site) { - self.get('configs')[site.type] = site.properties; - allConfigs = allConfigs.concat(App.config.getConfigsFromJSON(site, true)); - }); + App.router.get('configurationController').getConfigsByTags(siteTagsToLoad).done(function (configs) { + configs.forEach(function (site) { + self.get('configs')[site.type] = site.properties; + allConfigs = allConfigs.concat(App.config.getConfigsFromJSON(site, true)); + }); - self.get('dependentServiceNames').forEach(function(serviceName) { - var configTypes = App.StackService.find(serviceName).get('configTypeList'); - var configsByService = allConfigs.filter(function (c) { - return configTypes.contains(App.config.getConfigTagFromFileName(c.get('filename'))); + self.get('dependentServiceNames').forEach(function(serviceName) { + var configTypes = App.StackService.find(serviceName).get('configTypeList'); + var configsByService = allConfigs.filter(function (c) { + return configTypes.contains(App.config.getConfigTagFromFileName(c.get('filename'))); + }); + self.get('stepConfigs').pushObject(App.config.createServiceConfig(serviceName, [], configsByService)); }); - self.get('stepConfigs').pushObject(App.config.createServiceConfig(serviceName, [], configsByService)); - }); - self.set('isServiceConfigsLoaded', true); + self.set('isServiceConfigsLoaded', true); + }); }); }, @@ -1585,7 +1589,8 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow if (params.servicesToDeleteNext) { this.deleteServiceCall(params.servicesToDeleteNext); } else { - this.loadConfigRecommendations(null, this.saveConfigs.bind(this)); + var callback = this.loadConfigRecommendations.bind(this, null, this.saveConfigs.bind(this)); + App.get('router.mainController.isLoading').call(this, 'isServiceConfigsLoaded').done(callback); } }, http://git-wip-us.apache.org/repos/asf/ambari/blob/e80e86c8/ambari-web/test/controllers/main/service/item_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/service/item_test.js b/ambari-web/test/controllers/main/service/item_test.js index fd66144..f0fc7ad 100644 --- a/ambari-web/test/controllers/main/service/item_test.js +++ b/ambari-web/test/controllers/main/service/item_test.js @@ -1709,6 +1709,7 @@ describe('App.MainServiceItemController', function () { mainServiceItemController = App.MainServiceItemController.create({}); sinon.stub(mainServiceItemController, 'loadConfigRecommendations', Em.K); sinon.stub(mainServiceItemController, 'deleteServiceCall', Em.K); + sinon.stub(App.get('router.mainController'), 'isLoading').returns($.Deferred().resolve().promise()); mainServiceItemController.reopen({ interDependentServices: [] }) @@ -1716,9 +1717,10 @@ describe('App.MainServiceItemController', function () { afterEach(function() { mainServiceItemController.loadConfigRecommendations.restore(); mainServiceItemController.deleteServiceCall.restore(); + App.get('router.mainController').isLoading.restore(); }); - it("window.location.reload should be called", function() { + it("loadConfigRecommendations should be called", function() { mainServiceItemController.deleteServiceCallSuccessCallback([], null, {}); expect(mainServiceItemController.deleteServiceCall.called).to.be.false; expect(mainServiceItemController.loadConfigRecommendations.calledOnce).to.be.true; @@ -1829,4 +1831,48 @@ describe('App.MainServiceItemController', function () { expect(mainServiceItemController.isRangerPluginEnabled()).to.be.true; }); }); + + describe('#dependentServiceNames', function () { + + var controller, + serviceName = 's0', + dependentServiceNames = ['s1', 's2'], + testCases = [ + { + isConfigsPropertiesLoaded: true, + dependentServiceNames: dependentServiceNames, + message: 'model is ready' + }, + { + isConfigsPropertiesLoaded: false, + dependentServiceNames: [], + message: 'model is not ready' + } + ]; + + beforeEach(function () { + controller = App.MainServiceItemController.create({ + content: { + serviceName: serviceName + } + }); + sinon.stub(App.StackService, 'find').returns(Em.Object.create({ + dependentServiceNames: dependentServiceNames + })); + }); + + afterEach(function () { + App.StackService.find.restore(); + }); + + testCases.forEach(function (test) { + + it(test.message, function () { + App.set('router.clusterController.isConfigsPropertiesLoaded', test.isConfigsPropertiesLoaded); + expect(controller.get('dependentServiceNames')).to.eql(test.dependentServiceNames); + }); + + }); + + }); });
