This is an automated email from the ASF dual-hosted git repository. akovalenko pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push: new 9256fa1 AMBARI-25135. Cover service mixin with unit tests 9256fa1 is described below commit 9256fa11b2829f5f3cf2be8d0da9ed45d77505bd Author: Aleksandr Kovalenko <akovale...@apache.org> AuthorDate: Tue Jan 29 19:45:26 2019 +0200 AMBARI-25135. Cover service mixin with unit tests --- ambari-web/app/assets/test/tests.js | 2 + .../mixins/main/service/groups_mapping_test.js | 71 ++++++++++++++ .../mixins/main/service/themes_mapping_test.js | 102 +++++++++++++++++++++ 3 files changed, 175 insertions(+) diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js index 3d039f8..5e0b52c 100644 --- a/ambari-web/app/assets/test/tests.js +++ b/ambari-web/app/assets/test/tests.js @@ -215,6 +215,8 @@ var files = [ 'test/mixins/main/service/configs/widget_popover_support_test', 'test/mixins/main/service/configs/config_overridable_test', 'test/mixins/main/service/configs/component_actions_by_configs_test', + 'test/mixins/main/service/groups_mapping_test', + 'test/mixins/main/service/themes_mapping_test', 'test/mixins/routers/redirections_test', 'test/mixins/wizard/addSeccurityConfigs_test', 'test/mixins/wizard/assign_master_components_test', diff --git a/ambari-web/test/mixins/main/service/groups_mapping_test.js b/ambari-web/test/mixins/main/service/groups_mapping_test.js new file mode 100644 index 0000000..d4d5ce7 --- /dev/null +++ b/ambari-web/test/mixins/main/service/groups_mapping_test.js @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var App = require('app'); +var testHelpers = require('test/helpers'); + +describe('App.GroupsMappingMixin', function () { + var mixin; + + beforeEach(function () { + mixin = Em.Object.create(App.GroupsMappingMixin, {}); + }); + + describe('#loadConfigGroups', function() { + beforeEach(function() { + sinon.stub(mixin, 'trackRequest'); + }); + afterEach(function() { + mixin.trackRequest.restore(); + }); + + it('configGroupsAreLoaded should be true', function() { + mixin.loadConfigGroups([]); + expect(mixin.get('configGroupsAreLoaded')).to.be.true; + }); + + it('App.ajax.send should be called', function() { + mixin.loadConfigGroups(['S1', 'S2']); + expect(testHelpers.findAjaxRequest('name', 'configs.config_groups.load.services')[0]).to.exists; + }); + }); + + describe('#saveConfigGroupsToModel', function() { + var dfd = {resolve: sinon.spy()}; + + beforeEach(function() { + sinon.stub(App.configGroupsMapper, 'map'); + mixin.saveConfigGroupsToModel({}, {}, {serviceNames: 'S1,S2', dfd: dfd}); + }); + afterEach(function() { + App.configGroupsMapper.map.restore(); + }); + + it('App.configGroupsMapper.map should be called', function() { + expect(App.configGroupsMapper.map.calledWith({}, false, ['S1', 'S2'])).to.be.true; + }); + + it('configGroupsAreLoaded should be true', function() { + expect(mixin.get('configGroupsAreLoaded')).to.be.true; + }); + + it('resolve should be called', function() { + expect(dfd.resolve.called).to.be.true; + }); + }); +}); diff --git a/ambari-web/test/mixins/main/service/themes_mapping_test.js b/ambari-web/test/mixins/main/service/themes_mapping_test.js new file mode 100644 index 0000000..f547229 --- /dev/null +++ b/ambari-web/test/mixins/main/service/themes_mapping_test.js @@ -0,0 +1,102 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var App = require('app'); +var testHelpers = require('test/helpers'); + +describe('App.ThemesMappingMixin', function () { + var mixin; + + beforeEach(function () { + mixin = Em.Object.create(App.ThemesMappingMixin, {}); + }); + + describe('#loadConfigTheme', function() { + beforeEach(function() { + sinon.stub(App.Tab, 'find').returns([{ + serviceName: 'S2' + }]); + sinon.stub(App, 'get').returns('stack1'); + }); + afterEach(function() { + App.Tab.find.restore(); + App.get.restore(); + }); + + it('App.ajax.send should be called', function() { + mixin.loadConfigTheme('S1'); + expect(testHelpers.findAjaxRequest('name', 'configs.theme')[0].data).to.be.eql({ + serviceName: 'S1', + stackVersionUrl: 'stack1' + }); + }); + }); + + describe('#_saveThemeToModel', function() { + beforeEach(function() { + sinon.stub(App.themesMapper, 'map'); + }); + afterEach(function() { + App.themesMapper.map.restore(); + }); + + it('App.themesMapper.map should be called', function() { + mixin._saveThemeToModel({}, {}, {serviceName: 'S1'}); + expect(App.themesMapper.map.calledWith({}, ['S1'])).to.be.true; + }); + }); + + describe('#loadConfigThemeForServices', function() { + beforeEach(function() { + sinon.stub(App, 'get').returns('stack1'); + }); + afterEach(function() { + App.get.restore(); + }); + + it('App.ajax.send should be called', function() { + mixin.loadConfigThemeForServices(['S1', 'S2']); + expect(testHelpers.findAjaxRequest('name', 'configs.theme.services')[0].data).to.be.eql({ + serviceNames: 'S1,S2', + stackVersionUrl: 'stack1' + }); + }); + }); + + describe('#_loadConfigThemeForServicesSuccess', function() { + beforeEach(function() { + sinon.stub(App.themesMapper, 'map'); + }); + afterEach(function() { + App.themesMapper.map.restore(); + }); + + it('App.themesMapper.map should be called', function() { + mixin._loadConfigThemeForServicesSuccess( + {items: [{themes: [[]]}]}, + {}, + {serviceNames: 'S1,S2'}); + expect(App.themesMapper.map.calledWith( + { + items: [[]] + }, + ['S1', 'S2'] + )).to.be.true; + }); + }); +});