/** * 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 hostsUtils = require('utils/hosts'); var validator = require('utils/validator'); var testHelpers = require('test/helpers'); describe('hosts utils', function () { describe('#launchHostsSelectionDialog', function () { var popup, mock = { callback: Em.K }; beforeEach(function () { sinon.stub(App.ModalPopup, 'show', Em.K); }); afterEach(function () { App.ModalPopup.show.restore(); }); describe('popup header and message', function () { var cases = [ { popupDescription: {}, header: Em.I18n.t('hosts.selectHostsDialog.title'), dialogMessage: Em.I18n.t('hosts.selectHostsDialog.message'), title: 'default header and message' }, { popupDescription: { dialogMessage: 'Message 0' }, header: Em.I18n.t('hosts.selectHostsDialog.title'), dialogMessage: 'Message 0', title: 'default header, custom message' }, { popupDescription: { header: 'Header 0' }, header: 'Header 0', dialogMessage: Em.I18n.t('hosts.selectHostsDialog.message'), title: 'custom header, default message' }, { popupDescription: { header: 'Header 1', dialogMessage: 'Message 1' }, header: 'Header 1', dialogMessage: 'Message 1', title: 'custom header and message' } ]; cases.forEach(function (item) { describe(item.title, function () { beforeEach(function () { hostsUtils.launchHostsSelectionDialog(null, null, null, null, null, item.popupDescription); popup = Em.Object.create(App.ModalPopup.show.firstCall.args[0]); }); it('header', function () { expect(popup.get('header')).to.equal(item.header); }); it('message', function () { expect(popup.get('dialogMessage')).to.equal(item.dialogMessage); }); }); }); }); describe('#onPrimary', function () { var cases = [ { selectAtleastOneHost: true, availableHosts: [], warningMessage: Em.I18n.t('hosts.selectHostsDialog.message.warning'), callbackCallCount: 0, hideCallCount: 0, title: 'no hosts available' }, { selectAtleastOneHost: false, availableHosts: [], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [], hideCallCount: 1, title: 'no hosts available, no selection requirement' }, { selectAtleastOneHost: true, availableHosts: [ {}, { selected: 1 }, { selected: 'true' } ], warningMessage: Em.I18n.t('hosts.selectHostsDialog.message.warning'), callbackCallCount: 0, hideCallCount: 0, title: 'no selection state info' }, { selectAtleastOneHost: false, availableHosts: [ {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [], hideCallCount: 1, title: 'no selection state info, no selection requirement' }, { selectAtleastOneHost: true, availableHosts: [ { selected: false }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: Em.I18n.t('hosts.selectHostsDialog.message.warning'), callbackCallCount: 0, hideCallCount: 0, title: 'no hosts selected' }, { selectAtleastOneHost: false, availableHosts: [ { selected: false }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [], hideCallCount: 1, title: 'no hosts selected, no selection requirement' }, { selectAtleastOneHost: true, availableHosts: [ { selected: true }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [undefined], hideCallCount: 1, title: '1 host selected, no host info' }, { selectAtleastOneHost: false, availableHosts: [ { selected: true }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [undefined], hideCallCount: 1, title: '1 host selected, no host info, no selection requirement' }, { selectAtleastOneHost: true, availableHosts: [ { selected: true, host: {} }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [undefined], hideCallCount: 1, title: '1 host selected, no host id' }, { selectAtleastOneHost: false, availableHosts: [ { selected: true, host: {} }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [undefined], hideCallCount: 1, title: '1 host selected, no host id, no selection requirement' }, { selectAtleastOneHost: true, availableHosts: [ { selected: true, host: { id: 'h0' } }, { selected: false, host: { id: 'h1' } }, { host: { id: 'h2' } }, { selected: 1, host: { id: 'h3' } }, { selected: 'true', host: { id: 'h4' } } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: ['h0'], hideCallCount: 1, title: '1 host selected, host id available' }, { selectAtleastOneHost: false, availableHosts: [ { selected: true, host: { id: 'h5' } }, { selected: false, host: { id: 'h6' } }, { host: { id: 'h7' } }, { selected: 1, host: { id: 'h8' } }, { selected: 'true', host: { id: 'h9' } } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: ['h5'], hideCallCount: 1, title: '1 host selected, host id available, no selection requirement' }, { selectAtleastOneHost: true, availableHosts: [ { selected: true }, { selected: true }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [undefined, undefined], hideCallCount: 1, title: 'more than 1 host selected, no host info' }, { selectAtleastOneHost: false, availableHosts: [ { selected: true }, { selected: true }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [undefined, undefined], hideCallCount: 1, title: 'more than 1 host selected, no host info, no selection requirement' }, { selectAtleastOneHost: true, availableHosts: [ { selected: true, host: {} }, { selected: true, host: {} }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [undefined, undefined], hideCallCount: 1, title: 'more than 1 host selected, no host id' }, { selectAtleastOneHost: false, availableHosts: [ { selected: true, host: {} }, { selected: true, host: {} }, { selected: false }, {}, { selected: 1 }, { selected: 'true' } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: [undefined, undefined], hideCallCount: 1, title: 'more than 1 host selected, no host id, no selection requirement' }, { selectAtleastOneHost: true, availableHosts: [ { selected: true, host: { id: 'h10' } }, { selected: true, host: { id: 'h11' } }, { selected: false, host: { id: 'h12' } }, { host: { id: 'h13' } }, { selected: 1, host: { id: 'h14' } }, { selected: 'true', host: { id: 'h15' } } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: ['h10', 'h11'], hideCallCount: 1, title: 'more than 1 host selected, host ids available' }, { selectAtleastOneHost: false, availableHosts: [ { selected: true, host: { id: 'h16' } }, { selected: true, host: { id: 'h17' } }, { selected: false, host: { id: 'h18' } }, { host: { id: 'h19' } }, { selected: 1, host: { id: 'h20' } }, { selected: 'true', host: { id: 'h21' } } ], warningMessage: null, callbackCallCount: 1, arrayOfSelectedHosts: ['h16', 'h17'], hideCallCount: 1, title: 'more than 1 host selected, host ids available, no selection requirement' } ]; cases.forEach(function (item) { describe(item.title, function () { beforeEach(function () { sinon.spy(mock, 'callback'); hostsUtils.launchHostsSelectionDialog(null, null, item.selectAtleastOneHost, null, mock.callback, {}); popup = Em.Object.create(App.ModalPopup.show.firstCall.args[0], { warningMessage: '', availableHosts: item.availableHosts, hide: Em.K }); sinon.spy(popup, 'hide'); popup.onPrimary(); }); afterEach(function () { mock.callback.restore(); popup.hide.restore(); }); it('warning message', function () { expect(popup.get('warningMessage')).to.equal(item.warningMessage); }); it('callback', function () { expect(mock.callback.callCount).to.equal(item.callbackCallCount); }); if (item.callbackCallCount) { it('callback argument', function () { expect(mock.callback.firstCall.args).to.eql([item.arrayOfSelectedHosts]); }); } it('hide popup', function () { expect(popup.hide.callCount).to.equal(item.hideCallCount); }); }); }); }); describe('#disablePrimary', function () { var cases = [ { isLoaded: true, disablePrimary: false, title: 'enable button' }, { isLoaded: false, disablePrimary: true, title: 'disable button' } ]; cases.forEach(function (item) { it(item.title, function () { hostsUtils.launchHostsSelectionDialog(null, null, null, null, null, item.popupDescription); popup = Em.Object.create(App.ModalPopup.show.firstCall.args[0], { isLoaded: item.isLoaded }); expect(popup.get('disablePrimary')).to.equal(item.disablePrimary); }); }); }); describe('#onSecondary', function () { beforeEach(function () { sinon.spy(mock, 'callback'); hostsUtils.launchHostsSelectionDialog(null, null, null, null, mock.callback, {}); popup = Em.Object.create(App.ModalPopup.show.firstCall.args[0], { hide: Em.K }); sinon.spy(popup, 'hide'); popup.onSecondary(); }); afterEach(function () { mock.callback.restore(); popup.hide.restore(); }); it('callback', function () { expect(mock.callback.calledOnce).to.be.true; }); it('callback argument', function () { expect(mock.callback.firstCall.args).to.eql([null]); }); it('hide popup', function () { expect(popup.hide.calledOnce).to.be.true; }); }); describe('#bodyClass', function () { var view, validComponents = [ { componentName: 'c0' }, { componentName: 'c1' } ]; beforeEach(function () { hostsUtils.launchHostsSelectionDialog([ { host: { id: 'h0' }, filtered: false }, { host: { id: 'h1' } } ], null, null, validComponents, null, {}); popup = Em.Object.create(App.ModalPopup.show.firstCall.args[0]); view = popup.get('bodyClass').create({ parentView: popup }); }); describe('#filteredContentObs', function () { beforeEach(function () { sinon.stub(view, 'filteredContentObsOnce', Em.K); sinon.stub(view, 'filterHosts', Em.K); sinon.stub(Em.run, 'once', function (context, callback) { callback.call(context); }); }); afterEach(function () { view.filteredContentObsOnce.restore(); view.filterHosts.restore(); Em.run.once.restore(); }); it('should run filteredContentObsOnce', function () { popup.set('availableHosts', [ { filtered: true } ]); expect(view.filteredContentObsOnce.calledOnce).to.be.true; }); }); describe('#filteredContentObsOnce', function () { var cases = [ { availableHosts: [], filteredContent: [], title: 'no hosts available' }, { availableHosts: [ {}, { filtered: false }, { filtered: null }, { filtered: 0 } ], filteredContent: [], title: 'no hosts filtered' }, { availableHosts: [ {}, { filtered: false }, { filtered: null }, { filtered: 0 }, { filtered: true }, { filtered: 'true' }, { filtered: 1 } ], filteredContent: [ { filtered: true }, { filtered: 'true' }, { filtered: 1 } ], title: 'filtered hosts present' } ]; beforeEach(function () { sinon.stub(view, 'filteredContentObs', Em.K); sinon.stub(view, 'filterHosts', Em.K); }); afterEach(function () { view.filteredContentObs.restore(); view.filterHosts.restore(); }); cases.forEach(function (item) { it(item.title, function () { popup.set('availableHosts', item.availableHosts); view.filteredContentObsOnce(); expect(view.get('filteredContent')).to.eql(item.filteredContent); }); }); }); describe('#filterComponents', function () { it('should be set from validComponents', function () { expect(view.get('filterComponents')).to.eql(validComponents); }); }); describe('#isDisabled', function () { var cases = [ { isLoaded: true, isDisabled: false, title: 'enabled' }, { isLoaded: false, isDisabled: true, title: 'disabled' } ]; cases.forEach(function (item) { it(item.title, function () { popup.set('isLoaded', item.isLoaded); expect(view.get('isDisabled')).to.equal(item.isDisabled); }); }); }); describe('#didInsertElement', function () { beforeEach(function () { sinon.stub(view, 'filterHosts', Em.K); sinon.stub(view, 'filteredContentObs', Em.K); sinon.stub(view, 'filteredContentObsOnce', Em.K); view.get('filterColumns').setEach('selected', false); view.get('filterColumns').findProperty('id', 'cpu').set('selected', true); view.didInsertElement(); }); afterEach(function () { view.filterHosts.restore(); view.filteredContentObs.restore(); view.filteredContentObsOnce.restore(); }); it('column for filter', function () { expect(view.get('filterColumn')).to.eql(Em.Object.create({ id: 'cpu', name: 'CPU', selected: true })); }); it('available hosts', function () { expect(view.get('parentView.availableHosts').toArray()).to.eql([ { host: { id: 'h0' }, filtered: true }, { host: { id: 'h1' }, filtered: true } ]); }); it('isLoaded', function () { expect(view.get('parentView.isLoaded')).to.be.true; }); it('observer called', function () { expect(view.filteredContentObsOnce.calledOnce).to.be.true; }); }); describe('#filterHosts', function () { var cases = [ { filterText: '', filterComponent: null, showOnlySelectedHosts: true, availableHosts: [ Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), selected: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), selected: false }) ], result: [ Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), selected: false, filterColumnValue: 'centos7', filtered: false }) ], title: 'no filter text, no component for filter, show selected hosts only' }, { filterText: '', filterComponent: null, showOnlySelectedHosts: false, availableHosts: [ Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), selected: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), selected: false }) ], result: [ Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), selected: false, filterColumnValue: 'centos7', filtered: true }) ], title: 'no filter text, no component for filter, show all hosts' }, { filterText: 'n', filterComponent: null, showOnlySelectedHosts: true, availableHosts: [ Em.Object.create({ host: Em.Object.create({ publicHostName: 'h0' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h1' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn2' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn3' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h4', osType: 'centos6' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h5', osType: 'centos6' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn6', osType: 'centos6' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn7', osType: 'centos6' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h8', osType: 'suse11' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h9', osType: 'suse11' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn10', osType: 'suse11' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn11', osType: 'suse11' }), selected: false }) ], result: [ Em.Object.create({ host: Em.Object.create({ publicHostName: 'h0' }), selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h1' }), selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn2' }), selected: true, filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn3' }), selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h4', osType: 'centos6' }), selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h5', osType: 'centos6' }), selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn6', osType: 'centos6' }), selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn7', osType: 'centos6' }), selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h8', osType: 'suse11' }), selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h9', osType: 'suse11' }), selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn10', osType: 'suse11' }), selected: true, filterColumnValue: 'suse11', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn11', osType: 'suse11' }), selected: false, filterColumnValue: 'suse11', filtered: false }) ], title: 'filter text set, no component for filter, show selected hosts only' }, { filterText: 'n', filterComponent: null, showOnlySelectedHosts: false, availableHosts: [ Em.Object.create({ host: Em.Object.create({ publicHostName: 'h0' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h1' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn2' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn3' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h4', osType: 'centos6' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h5', osType: 'centos6' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn6', osType: 'centos6' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn7', osType: 'centos6' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h8', osType: 'suse11' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h9', osType: 'suse11' }), selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn10', osType: 'suse11' }), selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn11', osType: 'suse11' }), selected: false }) ], result: [ Em.Object.create({ host: Em.Object.create({ publicHostName: 'h0' }), selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h1' }), selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn2' }), selected: true, filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn3' }), selected: false, filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h4', osType: 'centos6' }), selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h5', osType: 'centos6' }), selected: false, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn6', osType: 'centos6' }), selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn7', osType: 'centos6' }), selected: false, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h8', osType: 'suse11' }), selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h9', osType: 'suse11' }), selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn10', osType: 'suse11' }), selected: true, filterColumnValue: 'suse11', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn11', osType: 'suse11' }), selected: false, filterColumnValue: 'suse11', filtered: true }) ], title: 'filter text set, no component for filter, show all hosts' }, { filterText: '', filterComponent: Em.Object.create({ componentName: 'c0' }), showOnlySelectedHosts: true, availableHosts: [ Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: ['c1', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: ['c1', 'c2'], selected: false }), Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: ['c0', 'c2'], selected: false }) ], result: [ Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: [], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: [], selected: false, filterColumnValue: 'centos7', filtered: false }), Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: ['c1', 'c2'], selected: true, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: ['c1', 'c2'], selected: false, filterColumnValue: 'centos7', filtered: false }), Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: ['c0', 'c2'], selected: false, filterColumnValue: 'centos7', filtered: false }) ], title: 'no filter text, component filter set, show selected hosts only' }, { filterText: '', filterComponent: Em.Object.create({ componentName: 'c1' }), showOnlySelectedHosts: false, availableHosts: [ Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: ['c0', 'c2'], selected: false }), Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: ['c1', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: ['c1', 'c2'], selected: false }) ], result: [ Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: [], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: [], selected: false, filterColumnValue: 'centos7', filtered: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: true, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: ['c0', 'c2'], selected: false, filterColumnValue: 'centos7', filtered: false }), Em.Object.create({ host: Em.Object.create({ osType: 'centos6' }), hostComponentNames: ['c1', 'c2'], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ osType: 'centos7' }), hostComponentNames: ['c1', 'c2'], selected: false, filterColumnValue: 'centos7', filtered: true }) ], title: 'no filter text, component filter set, show all hosts' }, { filterText: 'n', filterComponent: Em.Object.create({ componentName: 'c2' }), showOnlySelectedHosts: true, availableHosts: [ Em.Object.create({ host: Em.Object.create({ publicHostName: 'h0' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h1' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn2' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn3' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h4', osType: 'centos6' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h5', osType: 'centos6' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn6', osType: 'centos6' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn7', osType: 'centos6' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h8', osType: 'suse11' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h9', osType: 'suse11' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn10', osType: 'suse11' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn11', osType: 'suse11' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h12' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h13' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn14' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn15' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h16', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h17', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn18', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn19', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h20', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h21', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn22', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn23', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h24' }), hostComponentNames: ['c0', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h25' }), hostComponentNames: ['c0', 'c2'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn26' }), hostComponentNames: ['c0', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn27' }), hostComponentNames: ['c0', 'c2'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h28', osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h29', osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn30', osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn31', osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h32', osType: 'suse11' }), hostComponentNames: ['c0', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h33', osType: 'suse11' }), hostComponentNames: ['c0', 'c2'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn34', osType: 'suse11' }), hostComponentNames: ['c0', 'c2'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn35', osType: 'suse11' }), hostComponentNames: ['c0', 'c2'], selected: false }) ], result: [ Em.Object.create({ host: Em.Object.create({ publicHostName: 'h0' }), hostComponentNames: [], selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h1' }), hostComponentNames: [], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn2' }), hostComponentNames: [], selected: true, filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn3' }), hostComponentNames: [], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h4', osType: 'centos6' }), hostComponentNames: [], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h5', osType: 'centos6' }), hostComponentNames: [], selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn6', osType: 'centos6' }), hostComponentNames: [], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn7', osType: 'centos6' }), hostComponentNames: [], selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h8', osType: 'suse11' }), hostComponentNames: [], selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h9', osType: 'suse11' }), hostComponentNames: [], selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn10', osType: 'suse11' }), hostComponentNames: [], selected: true, filterColumnValue: 'suse11', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn11', osType: 'suse11' }), hostComponentNames: [], selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h12' }), hostComponentNames: ['c0', 'c1'], selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h13' }), hostComponentNames: ['c0', 'c1'], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn14' }), hostComponentNames: ['c0', 'c1'], selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn15' }), hostComponentNames: ['c0', 'c1'], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h16', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: true, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h17', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn18', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: true, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn19', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h20', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h21', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn22', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn23', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h24' }), hostComponentNames: ['c0', 'c2'], selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h25' }), hostComponentNames: ['c0', 'c2'], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn26' }), hostComponentNames: ['c0', 'c2'], selected: true, filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn27' }), hostComponentNames: ['c0', 'c2'], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h28', osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h29', osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn30', osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn31', osType: 'centos6' }), hostComponentNames: ['c0', 'c2'], selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h32', osType: 'suse11' }), hostComponentNames: ['c0', 'c2'], selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h33', osType: 'suse11' }), hostComponentNames: ['c0', 'c2'], selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn34', osType: 'suse11' }), hostComponentNames: ['c0', 'c2'], selected: true, filterColumnValue: 'suse11', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn35', osType: 'suse11' }), hostComponentNames: ['c0', 'c2'], selected: false, filterColumnValue: 'suse11', filtered: false }) ], title: 'filter text set, component filter set, show selected hosts only' }, { filterText: 'n', filterComponent: Em.Object.create({ componentName: 'c3' }), showOnlySelectedHosts: false, availableHosts: [ Em.Object.create({ host: Em.Object.create({ publicHostName: 'h0' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h1' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn2' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn3' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h4', osType: 'centos6' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h5', osType: 'centos6' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn6', osType: 'centos6' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn7', osType: 'centos6' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h8', osType: 'suse11' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h9', osType: 'suse11' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn10', osType: 'suse11' }), hostComponentNames: [], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn11', osType: 'suse11' }), hostComponentNames: [], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h12' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h13' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn14' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn15' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h16', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h17', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn18', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn19', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h20', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h21', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn22', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn23', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h24' }), hostComponentNames: ['c0', 'c3'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h25' }), hostComponentNames: ['c0', 'c3'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn26' }), hostComponentNames: ['c0', 'c3'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn27' }), hostComponentNames: ['c0', 'c3'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h28', osType: 'centos6' }), hostComponentNames: ['c0', 'c3'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h29', osType: 'centos6' }), hostComponentNames: ['c0', 'c3'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn30', osType: 'centos6' }), hostComponentNames: ['c0', 'c3'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn31', osType: 'centos6' }), hostComponentNames: ['c0', 'c3'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h32', osType: 'suse11' }), hostComponentNames: ['c0', 'c3'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h33', osType: 'suse11' }), hostComponentNames: ['c0', 'c3'], selected: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn34', osType: 'suse11' }), hostComponentNames: ['c0', 'c3'], selected: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn35', osType: 'suse11' }), hostComponentNames: ['c0', 'c3'], selected: false }) ], result: [ Em.Object.create({ host: Em.Object.create({ publicHostName: 'h0' }), hostComponentNames: [], selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h1' }), hostComponentNames: [], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn2' }), hostComponentNames: [], selected: true, filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn3' }), hostComponentNames: [], selected: false, filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h4', osType: 'centos6' }), hostComponentNames: [], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h5', osType: 'centos6' }), hostComponentNames: [], selected: false, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn6', osType: 'centos6' }), hostComponentNames: [], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn7', osType: 'centos6' }), hostComponentNames: [], selected: false, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h8', osType: 'suse11' }), hostComponentNames: [], selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h9', osType: 'suse11' }), hostComponentNames: [], selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn10', osType: 'suse11' }), hostComponentNames: [], selected: true, filterColumnValue: 'suse11', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn11', osType: 'suse11' }), hostComponentNames: [], selected: false, filterColumnValue: 'suse11', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h12' }), hostComponentNames: ['c0', 'c1'], selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h13' }), hostComponentNames: ['c0', 'c1'], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn14' }), hostComponentNames: ['c0', 'c1'], selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn15' }), hostComponentNames: ['c0', 'c1'], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h16', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: true, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h17', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn18', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: true, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn19', osType: 'centos6' }), hostComponentNames: ['c0', 'c1'], selected: false, filterColumnValue: 'centos6', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h20', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h21', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn22', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn23', osType: 'suse11' }), hostComponentNames: ['c0', 'c1'], selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h24' }), hostComponentNames: ['c0', 'c3'], selected: true, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h25' }), hostComponentNames: ['c0', 'c3'], selected: false, filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn26' }), hostComponentNames: ['c0', 'c3'], selected: true, filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn27' }), hostComponentNames: ['c0', 'c3'], selected: false, filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h28', osType: 'centos6' }), hostComponentNames: ['c0', 'c3'], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h29', osType: 'centos6' }), hostComponentNames: ['c0', 'c3'], selected: false, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn30', osType: 'centos6' }), hostComponentNames: ['c0', 'c3'], selected: true, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn31', osType: 'centos6' }), hostComponentNames: ['c0', 'c3'], selected: false, filterColumnValue: 'centos6', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h32', osType: 'suse11' }), hostComponentNames: ['c0', 'c3'], selected: true, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'h33', osType: 'suse11' }), hostComponentNames: ['c0', 'c3'], selected: false, filterColumnValue: 'suse11', filtered: false }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn34', osType: 'suse11' }), hostComponentNames: ['c0', 'c3'], selected: true, filterColumnValue: 'suse11', filtered: true }), Em.Object.create({ host: Em.Object.create({ publicHostName: 'hn35', osType: 'suse11' }), hostComponentNames: ['c0', 'c3'], selected: false, filterColumnValue: 'suse11', filtered: true }) ], title: 'filter text set, component filter set, show all hosts' } ]; cases.forEach(function (item) { var arrayForCheck; it(item.title, function () { view.setProperties({ 'showOnlySelectedHosts': item.showOnlySelectedHosts, 'filterText': item.filterText, 'filterComponent': item.filterComponent, 'filterColumn': { id: 'osType' }, 'parentView.availableHosts': item.availableHosts }); item.result.forEach(function (host) { if (!host.hasOwnProperty('filterColumnValue')) { host.set('filterColumnValue', undefined); } }); arrayForCheck = view.get('parentView.availableHosts').toArray(); arrayForCheck.forEach(function (host) { var hostComponentNames = host.get('hostComponentNames'); if (host.get('hostComponentNames')) { host.set('hostComponentNames', hostComponentNames.toArray()); } }); expect(arrayForCheck).to.eql(item.result); }); }); it('start index', function () { view.set('startIndex', 0); view.propertyDidChange('filterColumn'); expect(view.get('startIndex')).to.equal(1); }); }); describe('#hostSelectMessage', function () { beforeEach(function () { sinon.stub(view, 'filterHosts', Em.K); sinon.stub(view, 'filteredContentObs', Em.K); sinon.stub(view, 'filteredContentObsOnce', Em.K); }); afterEach(function () { view.filterHosts.restore(); view.filteredContentObs.restore(); view.filteredContentObsOnce.restore(); }); it('correct message formatting', function () { view.set('parentView.availableHosts', [ { selected: true }, { selected: false }, { selected: true } ]); expect(view.get('hostSelectMessage')).to.equal(Em.I18n.t('hosts.selectHostsDialog.selectedHostsLink').format(2, 3)); }); }); describe('#selectFilterColumn', function () { var columnObject = { selected: true }, cases = [ { event: null, filterColumn: Em.Object.create(columnObject), isPreviousColumnSelected: true, title: 'no event data' }, { event: {}, filterColumn: Em.Object.create(columnObject), isPreviousColumnSelected: true, title: 'no context' }, { event: { context: null }, filterColumn: Em.Object.create(columnObject), isPreviousColumnSelected: true, title: 'empty context' }, { event: { context: Em.Object.create() }, filterColumn: Em.Object.create(columnObject), isPreviousColumnSelected: true, title: 'no id' }, { event: { context: Em.Object.create({ id: null }) }, filterColumn: Em.Object.create(columnObject), isPreviousColumnSelected: true, title: 'invalid id' }, { event: { context: Em.Object.create({ id: 0 }) }, filterColumn: Em.Object.create({ id: 0, selected: true }), isPreviousColumnSelected: false, title: 'valid id' } ]; cases.forEach(function (item) { describe(item.title, function () { var column = Em.Object.create(columnObject); beforeEach(function () { view.set('filterColumn', column); view.selectFilterColumn(item.event); }); it('new column', function () { expect(view.get('filterColumn')).to.eql(item.filterColumn); }); it('should deselect previous column', function () { expect(column.get('selected')).to.equal(item.isPreviousColumnSelected); }); }); }); }); describe('#selectFilterComponent', function () { var componentObject = { selected: true }, cases = [ { event: null, filterComponent: Em.Object.create(componentObject), title: 'no event data' }, { event: {}, filterComponent: Em.Object.create(componentObject), title: 'no context' }, { event: { context: null }, filterComponent: Em.Object.create(componentObject), title: 'empty context' }, { event: { context: Em.Object.create() }, filterComponent: Em.Object.create(componentObject), title: 'no component name' }, { event: { context: Em.Object.create({ componentName: null }) }, filterComponent: Em.Object.create(componentObject), title: 'invalid component name' }, { event: { context: Em.Object.create({ componentName: 'c0' }) }, filterComponent: Em.Object.create({ componentName: 'c0', selected: true }), title: 'valid component name' }, { event: { context: Em.Object.create({ componentName: 'c0' }) }, previousFilterComponent: Em.Object.create({ componentName: 'c0', selected: true }), filterComponent: null, title: 'manual deselection' }, { event: { context: Em.Object.create({ componentName: 'c0' }) }, previousFilterComponent: Em.Object.create({ componentName: 'c1', selected: true }), filterComponent: Em.Object.create({ componentName: 'c0', selected: true }), title: 'no manual deselection' } ]; cases.forEach(function (item) { it(item.title, function () { var component = item.previousFilterComponent || Em.Object.create(componentObject); view.set('filterComponent', component); view.selectFilterComponent(item.event); expect(view.get('filterComponent')).to.eql(item.filterComponent); }); }); }); describe('#toggleSelectAllHosts', function () { var cases = [ { allHostsSelected: true, availableHosts: [ { host: { id: 'h0' }, filtered: true, selected: true }, { host: { id: 'h1' }, filtered: false }, { host: { id: 'h2' }, filtered: 'true', selected: true }, { host: { id: 'h3' }, filtered: 1, selected: true }, { host: { id: 'h4' } } ], title: 'select all hosts' }, { allHostsSelected: false, availableHosts: [ { host: { id: 'h0' }, filtered: true, selected: false }, { host: { id: 'h1' }, filtered: false }, { host: { id: 'h2' }, filtered: 'true', selected: false }, { host: { id: 'h3' }, filtered: 1, selected: false }, { host: { id: 'h4' } } ], title: 'deselect all hosts' } ]; beforeEach(function () { sinon.stub(view, 'filterHosts', Em.K); sinon.stub(view, 'filteredContentObs', Em.K); sinon.stub(view, 'filteredContentObsOnce', Em.K); }); afterEach(function () { view.filterHosts.restore(); view.filteredContentObs.restore(); view.filteredContentObsOnce.restore(); }); cases.forEach(function (item) { it(item.title, function () { view.setProperties({ 'allHostsSelected': !item.allHostsSelected, 'parentView.availableHosts': [ { host: { id: 'h0' }, filtered: true }, { host: { id: 'h1' }, filtered: false }, { host: { id: 'h2' }, filtered: 'true' }, { host: { id: 'h3' }, filtered: 1 }, { host: { id: 'h4' } } ] }); view.toggleProperty('allHostsSelected'); expect(view.get('parentView.availableHosts').toArray()).to.eql(item.availableHosts); }); }); }); describe('#toggleShowSelectedHosts', function () { var cases = [ { showOnlySelectedHosts: true, title: 'no component for filter' }, { showOnlySelectedHosts: false, filterComponent: null, title: 'empty component for filter' }, { showOnlySelectedHosts: true, filterComponent: Em.Object.create(), title: 'component for filter set' } ]; cases.forEach(function (item) { describe(item.title, function () { beforeEach(function () { view.setProperties({ showOnlySelectedHosts: item.showOnlySelectedHosts, filterComponent: item.filterComponent, filterText: '' }); view.toggleShowSelectedHosts(); }); it('clear component filter', function () { expect(view.get('filterComponent')).to.be.null; }); it('clear text filter', function () { expect(view.get('filterText')).to.be.null; }); it('toggle hosts display mode', function () { expect(view.get('showOnlySelectedHosts')).to.equal(!item.showOnlySelectedHosts); }); }); }); }); }); }); describe('#setRackInfo', function () { beforeEach(function () { sinon.stub(App.ModalPopup, 'show', function (obj) { return Em.Object.create(obj); }); }); afterEach(function () { App.ModalPopup.show.restore(); }); describe('#bodyClass', function () { describe('#validation', function () { var popup, view, cases = [ { isValidRackId: false, errorMessage: Em.I18n.t('hostPopup.setRackId.invalid'), disablePrimary: true, title: 'invalid rack id' }, { isValidRackId: true, errorMessage: '', disablePrimary: false, title: 'valid rack id' } ]; cases.forEach(function (item) { describe(item.title, function () { beforeEach(function () { sinon.stub(validator, 'isValidRackId').returns(item.isValidRackId); popup = hostsUtils.setRackInfo(null, [], ''); view = popup.get('bodyClass').create({ parentView: popup }); view.propertyDidChange('parentView.rackId'); }); afterEach(function () { validator.isValidRackId.restore(); }); it('isValid', function () { expect(view.get('isValid')).to.equal(item.isValidRackId); }); it('errorMessage', function () { expect(view.get('errorMessage')).to.equal(item.errorMessage); }); it('disablePrimary', function () { expect(view.get('parentView.disablePrimary')).to.equal(item.disablePrimary); }); }); }); }); }); describe('#onPrimary', function () { var popup, cases = [ { hosts: [], ajaxCallArguments: undefined, title: 'no hosts' }, { hosts: [ { hostName: 'h0' }, { hostName: 'h1' } ], ajaxCallArguments: [{ name: 'bulk_request.hosts.update_rack_id', sender: hostsUtils, data: { hostNames: 'h0,h1', requestInfo: 'msg', rackId: '/default-rack', hostNamesArray: ['h0', 'h1'] }, success: 'successRackId', error: 'errorRackId' }], title: 'hosts passed' } ]; cases.forEach(function (item) { describe(item.title, function () { beforeEach(function () { popup = hostsUtils.setRackInfo({ message: 'msg' }, item.hosts, '/default-rack'); popup.set('hide', Em.K); sinon.spy(popup, 'hide'); popup.onPrimary(); }); afterEach(function () { popup.hide.restore(); }); it('AJAX call', function () { expect(testHelpers.findAjaxRequest('name', 'bulk_request.hosts.update_rack_id')).to.eql(item.ajaxCallArguments); }); it('hide popup', function () { expect(popup.hide.calledOnce).to.be.true; }); }); }); }); }); describe('#successRackId', function () { var hosts = [ Em.Object.create({ hostName: 'h0' }), Em.Object.create({ hostName: 'h1' }), Em.Object.create({ hostName: 'h2' }) ]; beforeEach(function () { sinon.stub(App.Host, 'find').returns(hosts); }); afterEach(function () { App.Host.find.restore(); }); it('should set rack ids for the proper hosts', function () { hostsUtils.successRackId(null, null, { hostNamesArray: ['h0', 'h2'], rackId: '/default-rack' }); expect(hosts).to.eql([ Em.Object.create({ hostName: 'h0', rack: '/default-rack' }), Em.Object.create({ hostName: 'h1' }), Em.Object.create({ hostName: 'h2', rack: '/default-rack' }) ]); }); }); describe('#errorRackId', function () { beforeEach(function () { sinon.stub(App, 'showAlertPopup', Em.K); }); afterEach(function () { App.showAlertPopup.restore(); }); it('should show alert popup', function () { hostsUtils.errorRackId(); expect(App.showAlertPopup.calledOnce).to.be.true; }); }); });