blob: ef48ae73ddea9791890b36ee9249d55fe7a9b8b7 [file] [log] [blame]
/**
* 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');
require('messages');
require('mixins/common/persist');
require('mixins/common/localStorage');
require('views/main/dashboard/widgets');
describe('App.MainDashboardWidgetsView', function () {
var view;
beforeEach(function() {
view = App.MainDashboardWidgetsView.create({
getUserPref: Em.K,
postUserPref: Em.K,
setDBProperty: Em.K,
persistKey: 'key',
widgetGroupsDeferred: {
done: Em.clb,
resolve: Em.K
}
});
});
describe('#didInsertElement()', function() {
beforeEach(function() {
sinon.stub(view, 'loadWidgetsSettings').returns({
complete: Em.clb
});
sinon.stub(view, 'checkServicesChange');
sinon.stub(view, 'renderWidgets');
sinon.stub(Em.run, 'next');
view.didInsertElement();
});
afterEach(function() {
view.loadWidgetsSettings.restore();
view.checkServicesChange.restore();
view.renderWidgets.restore();
Em.run.next.restore();
});
it('checkServicesChange should be called', function() {
expect(view.checkServicesChange).to.be.calledOnce;
});
it('renderWidgets should be called', function() {
expect(view.renderWidgets).to.be.calledOnce;
});
it('isDataLoaded should be true', function() {
expect(view.get('isDataLoaded')).to.be.true;
});
it('Em.run.next should be called', function() {
expect(Em.run.next.calledWith(view, 'makeSortable')).to.be.true;
});
});
describe('#loadWidgetsSettings()', function() {
beforeEach(function() {
sinon.spy(view, 'getUserPref');
});
afterEach(function() {
view.getUserPref.restore();
});
it('getUserPref should be called', function() {
view.loadWidgetsSettings();
expect(view.getUserPref.calledWith('key')).to.be.true;
});
});
describe('#saveWidgetsSettings()', function() {
var userPreferences = {visible: [], hidden: [], threshold: {}, groups: {}};
beforeEach(function () {
sinon.stub(view, 'setDBProperty', Em.K);
sinon.stub(view, 'postUserPref', Em.K);
view.set('userPreferences', userPreferences);
});
afterEach(function() {
view.setDBProperty.restore();
view.postUserPref.restore();
});
describe('called with arg', function () {
beforeEach(function() {
view.saveWidgetsSettings({settings:{}});
});
it('setDBProperty should be called', function() {
expect(view.setDBProperty.calledWith('key', {settings:{}})).to.be.true;
});
it('postUserPref should be called', function() {
expect(view.postUserPref.calledWith('key', {settings:{}})).to.be.true;
});
it('userPreferences should be set', function() {
expect(view.get('userPreferences')).to.be.eql({settings:{}});
});
});
describe('called without args', function () {
var allWidgets = [
Em.Object.create({id: 1, isVisible: true}),
Em.Object.create({id: 2, isVisible: true}),
Em.Object.create({id: 3, isVisible: false}),
Em.Object.create({id: 4, isVisible: false})
];
var expectedUserSettings = {
visible: [1, 2],
hidden: [3, 4],
threshold: {},
groups: {}
};
beforeEach(function () {
view.set('userPreferences', userPreferences);
view.set('allWidgets', allWidgets);
view.saveWidgetsSettings();
});
it('setDBProperty should be called', function() {
expect(view.setDBProperty.calledWith('key', expectedUserSettings)).to.be.true;
});
it('postUserPref should be called', function() {
expect(view.postUserPref.calledWith('key', expectedUserSettings)).to.be.true;
});
it('userPreferences should be set', function() {
expect(view.get('userPreferences')).to.be.eql(expectedUserSettings);
});
});
});
describe('#getUserPrefSuccessCallback()', function() {
beforeEach(function() {
sinon.stub(view, 'getUserPrefErrorCallback');
});
afterEach(function() {
view.getUserPrefErrorCallback.restore();
});
it('getUserPrefErrorCallback should be called', function() {
view.getUserPrefSuccessCallback(null);
expect(view.getUserPrefErrorCallback).to.be.calledOnce;
});
it('userPreferences should be set', function() {
view.getUserPrefSuccessCallback({settings:{}});
expect(view.get('userPreferences')).to.be.eql({settings:{}});
});
});
describe('#getUserPrefErrorCallback()', function() {
beforeEach(function() {
sinon.stub(view, 'generateDefaultUserPreferences').returns({settings:{}});
sinon.stub(view, 'saveWidgetsSettings');
});
afterEach(function() {
view.generateDefaultUserPreferences.restore();
view.saveWidgetsSettings.restore();
});
it('saveWidgetsSettings should be called', function() {
view.getUserPrefErrorCallback();
expect(view.saveWidgetsSettings.calledWith({settings:{}})).to.be.true;
});
});
describe('#resolveConfigDependencies()', function() {
beforeEach(function() {
this.mock = sinon.stub(App.router, 'get');
});
afterEach(function() {
App.router.get.restore();
});
it('isHiddenByDefault should be undefined', function() {
var widgets = [{id: 20}];
this.mock.returns({'hide_yarn_memory_widget': 'false'});
view.resolveConfigDependencies(widgets);
expect(widgets[0].isHiddenByDefault).to.be.undefined;
});
it('isHiddenByDefault should be true', function() {
var widgets = [{id: 20}];
this.mock.returns({'hide_yarn_memory_widget': 'true'});
view.resolveConfigDependencies(widgets);
expect(widgets[0].isHiddenByDefault).to.be.true;
});
});
describe('#generateDefaultUserPreferences', function() {
beforeEach(function() {
sinon.stub(view, 'resolveConfigDependencies');
sinon.stub(App.Service, 'find').returns(Em.Object.create());
view.set('widgetsDefinition', [
Em.Object.create({sourceName: 'S1', id: 1}),
Em.Object.create({sourceName: 'HOST_METRICS', id: 2, isHiddenByDefault: true, threshold: []}),
Em.Object.create({sourceName: 'HOST_METRICS', id: 3, threshold: [1, 2]})
]);
});
afterEach(function() {
view.resolveConfigDependencies.restore();
App.Service.find.restore();
});
it('should generate default preferences', function() {
expect(JSON.stringify(view.generateDefaultUserPreferences())).to.be.eql(JSON.stringify({
"visible": [3],
"hidden": [2],
"threshold": {
"2": [],
"3": [1,2]
},
"groups": {}
}));
expect(view.resolveConfigDependencies).to.be.calledOnce;
});
});
describe('#renderWidgets()', function() {
describe('should set visibleWidgets and hiddenWidgets', function() {
beforeEach(function () {
view.setProperties({
userPreferences: {
visible: [1],
hidden: [2],
threshold: {
1: [],
2: [1,2]
}
},
widgetGroups: [
Em.Object.create({
allWidgets: [],
subGroups: [
{
name: 'n'
}
]
})
]
});
view.renderWidgets();
});
describe('visibleWidgets', function () {
var widget;
beforeEach(function () {
widget = view.get('visibleWidgets')[0];
});
it('one visible widget', function () {
expect(view.get('visibleWidgets.length')).to.be.equal(1);
});
it('id', function () {
expect(widget.get('id')).to.be.equal(1);
});
it('threshold', function () {
expect(widget.get('threshold')).to.be.eql([]);
});
it('viewClass', function () {
expect(widget.get('viewClass').constructor).to.be.eql(App.NameNodeHeapPieChartView.extend().constructor);
});
it('sourceName', function () {
expect(widget.get('sourceName')).to.be.equal('HDFS');
});
it('title', function () {
expect(widget.get('title')).to.be.equal(Em.I18n.t('dashboard.widgets.NameNodeHeap'));
});
});
describe('hiddenWidgets', function () {
var widget;
beforeEach(function () {
widget = view.get('hiddenWidgets')[0];
});
it('one hidden widget', function () {
expect(view.get('hiddenWidgets.length')).to.be.equal(1);
});
it('id', function () {
expect(widget.get('id')).to.be.equal(2);
});
it('checked', function () {
expect(widget.get('checked')).to.be.equal(false);
});
it('title', function () {
expect(widget.get('title')).to.be.equal(Em.I18n.t('dashboard.widgets.HDFSDiskUsage'));
});
});
});
});
describe('#checkServicesChange()', function() {
beforeEach(function() {
sinon.stub(view, 'generateDefaultUserPreferences').returns({
visible: [1, 2],
hidden: [3, 4],
groups: {}
});
sinon.stub(view, 'saveWidgetsSettings');
});
afterEach(function() {
view.generateDefaultUserPreferences.restore();
view.saveWidgetsSettings.restore();
});
it('userPreferences should be updated', function() {
view.set('userPreferences', {
visible: [3],
hidden: [1],
threshold: {}
});
view.checkServicesChange();
expect(view.saveWidgetsSettings.getCall(0).args[0]).to.be.eql({
visible: [3, 2],
hidden: [1, 4],
threshold: {},
groups: {}
});
});
});
describe('#resetAllWidgets()', function() {
beforeEach(function() {
sinon.stub(App, 'showConfirmationPopup', Em.clb);
sinon.stub(view, 'generateDefaultUserPreferences').returns({settings: {}});
sinon.stub(view, 'saveWidgetsSettings');
sinon.stub(view, 'renderWidgets');
view.resetAllWidgets();
});
afterEach(function() {
App.showConfirmationPopup.restore();
view.generateDefaultUserPreferences.restore();
view.saveWidgetsSettings.restore();
view.renderWidgets.restore();
});
it('saveWidgetsSettings should be called', function() {
expect(view.saveWidgetsSettings.calledWith({settings: {}})).to.be.true;
});
it('renderWidgets should be called', function() {
expect(view.renderWidgets).to.be.calledOnce;
});
it('properties should be reset', function() {
expect(view.get('currentTimeRangeIndex')).to.be.equal(0);
expect(view.get('customStartTime')).to.be.null;
expect(view.get('customEndTime')).to.be.null;
});
});
describe('#plusButtonFilterView', function() {
var plusButtonFilterView;
beforeEach(function() {
plusButtonFilterView = view.get('plusButtonFilterView').create({
parentView: Em.Object.create({
saveWidgetsSettings: Em.K,
renderWidgets: Em.K
})
});
});
describe('#applyFilter()', function() {
beforeEach(function() {
sinon.spy(plusButtonFilterView.get('parentView'), 'renderWidgets');
sinon.spy(plusButtonFilterView.get('parentView'), 'saveWidgetsSettings');
plusButtonFilterView.set('parentView.userPreferences', {
visible: [2],
hidden: [1, 3],
threshold: {}
});
plusButtonFilterView.set('hiddenWidgets', [
Em.Object.create({checked: true, id: 1})
]);
plusButtonFilterView.applyFilter();
});
afterEach(function() {
plusButtonFilterView.get('parentView').renderWidgets.restore();
plusButtonFilterView.get('parentView').saveWidgetsSettings.restore();
});
it('saveWidgetsSettings should be called', function() {
expect(plusButtonFilterView.get('parentView').saveWidgetsSettings.calledOnce).to.be.true;
});
});
});
});