AMBARI-9949. Add Service: Choose Services page, selected service issue during navigation to wizard from Stack Versions page. (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/21c67f93 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/21c67f93 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/21c67f93 Branch: refs/heads/branch-2.0.0 Commit: 21c67f93ba87750f418ac1e08da4ce4d9430a35c Parents: b1e4100 Author: Alex Antonenko <[email protected]> Authored: Thu Mar 5 21:42:25 2015 +0200 Committer: Alex Antonenko <[email protected]> Committed: Fri Mar 6 03:49:31 2015 +0200 ---------------------------------------------------------------------- .../controllers/main/service/add_controller.js | 5 +- .../main/service/add_controller_test.js | 84 ++++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/21c67f93/ambari-web/app/controllers/main/service/add_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/add_controller.js b/ambari-web/app/controllers/main/service/add_controller.js index b340e68..c1682a9 100644 --- a/ambari-web/app/controllers/main/service/add_controller.js +++ b/ambari-web/app/controllers/main/service/add_controller.js @@ -30,7 +30,7 @@ App.AddServiceController = App.WizardController.extend(App.AddSecurityConfigs, { hideBackButton: true, /** - * @type {object} + * @type {string} * @default null */ serviceToInstall: null, @@ -201,7 +201,7 @@ App.AddServiceController = App.WizardController.extend(App.AddSecurityConfigs, { }; App.StackService.find().forEach(function (item) { var isInstalled = App.Service.find().someProperty('id', item.get('serviceName')); - var isSelected = item.get('serviceName') == this.get('serviceToInstall'); + var isSelected = (item.get('serviceName') == this.get('serviceToInstall')) || item.get('coSelectedServices').contains(this.get('serviceToInstall')); item.set('isSelected', isInstalled || isSelected); item.set('isInstalled', isInstalled); if (isInstalled) { @@ -227,6 +227,7 @@ App.AddServiceController = App.WizardController.extend(App.AddSecurityConfigs, { this.get('isStepDisabled').findProperty('step', 3).set('value', this.get('content.skipSlavesStep')); } } + this.set('serviceToInstall', null); this.set('content.services', App.StackService.find()); }, http://git-wip-us.apache.org/repos/asf/ambari/blob/21c67f93/ambari-web/test/controllers/main/service/add_controller_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/service/add_controller_test.js b/ambari-web/test/controllers/main/service/add_controller_test.js index 2054cc1..79b0f21 100644 --- a/ambari-web/test/controllers/main/service/add_controller_test.js +++ b/ambari-web/test/controllers/main/service/add_controller_test.js @@ -339,4 +339,88 @@ describe('App.AddServiceController', function() { }); }); + + describe('#loadServices', function() { + beforeEach(function() { + this.controller = App.AddServiceController.create({}); + this.db = {}; + sinon.stub(this.controller, 'getDBProperty'); + sinon.stub(this.controller, 'setDBProperty', function(key, value) { + this.db = value; + }.bind(this)); + }); + + afterEach(function() { + this.controller.getDBProperty.restore(); + this.controller.setDBProperty.restore(); + }); + + var tests = [ + { + appStackService: [ + Em.Object.create({ id: 'HDFS', serviceName: 'HDFS', coSelectedServices: []}), + Em.Object.create({ id: 'YARN', serviceName: 'YARN', coSelectedServices: ['MAPREDUCE2']}), + Em.Object.create({ id: 'MAPREDUCE2', serviceName: 'MAPREDUCE2', coSelectedServices: []}), + Em.Object.create({ id: 'FALCON', serviceName: 'FALCON', coSelectedServices: []}), + Em.Object.create({ id: 'STORM', serviceName: 'STORM', coSelectedServices: []}) + ], + appService: [ + Em.Object.create({ id: 'HDFS', serviceName: 'HDFS'}), + Em.Object.create({ id: 'STORM', serviceName: 'STORM'}) + ], + servicesFromDB: false, + serviceToInstall: 'MAPREDUCE2', + e: { + selectedServices: ['HDFS', 'YARN', 'MAPREDUCE2', 'STORM'], + installedServices: ['HDFS', 'STORM'] + }, + m: 'MapReduce selected on Admin -> Stack Versions Page, Yarn service should be selected because it coselected' + }, + { + appStackService: [ + Em.Object.create({ id: 'HDFS', serviceName: 'HDFS', coSelectedServices: []}), + Em.Object.create({ id: 'YARN', serviceName: 'YARN', coSelectedServices: ['MAPREDUCE2']}), + Em.Object.create({ id: 'HBASE', serviceName: 'HBASE', coSelectedServices: []}), + Em.Object.create({ id: 'STORM', serviceName: 'STORM', coSelectedServices: []}) + ], + appService: [ + Em.Object.create({ id: 'HDFS', serviceName: 'HDFS'}), + Em.Object.create({ id: 'STORM', serviceName: 'STORM'}) + ], + servicesFromDB: { + selectedServices: ['HBASE'], + installedServices: ['HDFS', 'STORM'] + }, + serviceToInstall: null, + e: { + selectedServices: ['HDFS', 'HBASE', 'STORM'], + installedServices: ['HDFS', 'STORM'] + }, + m: 'HDFS and STORM are installed. Select HBASE' + } + ]; + + tests.forEach(function(test) { + it(test.m, function() { + sinon.stub(App.StackService, 'find').returns(test.appStackService); + sinon.stub(App.Service, 'find').returns(test.appService); + this.controller.getDBProperty.withArgs('services').returns(test.servicesFromDB); + this.controller.set('serviceToInstall', test.serviceToInstall); + this.controller.loadServices(); + App.StackService.find.restore(); + App.Service.find.restore(); + if (!test.servicesFromDB) { + // verify saving to local db on first enter to the wizard + expect(this.db.selectedServices).to.be.eql(test.e.selectedServices); + expect(this.db.installedServices).to.be.eql(test.e.installedServices); + } else { + // verify values for App.StackService + expect(test.appStackService.filterProperty('isSelected', true).mapProperty('serviceName')).to.be.eql(test.e.selectedServices); + expect(test.appStackService.filterProperty('isInstalled', true).mapProperty('serviceName')).to.be.eql(test.e.installedServices); + } + expect(this.controller.get('serviceToInstall')).to.be.null; + }); + }, this); + }); + });
