blob: 4c9db12a7892c3e623331d01364079b57622a427 [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('mixins/common/table_server_view_mixin');
require('utils/load_timer');
describe('App.MainConfigHistoryView', function() {
var view = Em.View.create(App.TableServerViewMixin, {
filteredCount: 0,
totalCount: 0,
content: [],
filteredContent: [],
refresh: Em.K,
saveFilterConditions: Em.K,
controller: Em.Object.create({
name: 'mainConfigHistoryController',
paginationProps: [
{
name: 'displayLength',
value: '25'
},
{
name: 'startIndex',
value: 0
}
]
})
});
describe('#pageContent', function() {
beforeEach(function(){
view.propertyDidChange('pageContent');
});
it('filtered content is empty', function() {
view.set('filteredContent', []);
expect(view.get('pageContent')).to.be.empty;
});
it('filtered content contain one item', function() {
view.set('filteredCount', 1);
view.set('filteredContent', [Em.Object.create()]);
expect(view.get('pageContent')).to.eql([Em.Object.create()]);
});
it('filtered content contain two unsorted items', function() {
view.set('filteredCount', 2);
view.set('filteredContent', [
Em.Object.create({index:2}),
Em.Object.create({index:1})
]);
expect(view.get('pageContent')).to.eql([
Em.Object.create({index:1}),
Em.Object.create({index:2})
]);
});
});
describe('#updatePagination', function() {
beforeEach(function () {
sinon.spy(view, 'refresh');
sinon.stub(App.db, 'setDisplayLength', Em.K);
sinon.stub(App.db, 'setStartIndex', Em.K);
});
afterEach(function () {
view.refresh.restore();
App.db.setStartIndex.restore();
App.db.setDisplayLength.restore();
});
describe('displayLength is correct', function() {
beforeEach(function () {
view.set('displayLength', '50');
view.set('startIndex', null);
view.updatePagination();
});
it('refresh is called once', function () {
expect(view.refresh.calledOnce).to.be.true;
});
it('setStartIndex is called once', function () {
expect(App.db.setStartIndex.called).to.be.false;
});
it('setDisplayLength is called with correct arguments', function () {
expect(App.db.setDisplayLength.calledWith('mainConfigHistoryController', '50')).to.be.true;
});
});
describe('startIndex is correct', function() {
beforeEach(function () {
view.set('displayLength', null);
view.set('startIndex', 10);
view.updatePagination();
});
it('refresh is called once', function () {
expect(view.refresh.calledOnce).to.be.true;
});
it('setStartIndex is called with valid arguments', function () {
expect(App.db.setStartIndex.calledWith('mainConfigHistoryController', 10)).to.be.true;
});
it('setDisplayLength is not called', function () {
expect(App.db.setDisplayLength.called).to.be.false;
});
});
describe('displayLength and startIndex are correct', function() {
beforeEach(function () {
view.set('displayLength', '100');
view.set('startIndex', 20);
view.updatePagination();
});
it('refresh is called once', function () {
expect(view.refresh.calledOnce).to.be.true;
});
it('setStartIndex is called with valid arguments', function () {
expect(App.db.setStartIndex.calledWith('mainConfigHistoryController', 20)).to.be.true;
});
it('setDisplayLength is called with valid arguments', function () {
expect(App.db.setDisplayLength.calledWith('mainConfigHistoryController', '100')).to.be.true;
});
});
describe('displayLength and startIndex are null', function() {
beforeEach(function () {
view.set('displayLength', null);
view.set('startIndex', null);
view.updatePagination();
});
it('refresh is called once', function () {
expect(view.refresh.calledOnce).to.be.true;
});
it('setStartIndex is not called', function () {
expect(App.db.setStartIndex.called).to.be.false;
});
it('setDisplayLength is not called', function () {
expect(App.db.setDisplayLength.called).to.be.false;
});
});
});
describe('#updateFilter()', function() {
beforeEach(function () {
sinon.stub(view, 'saveFilterConditions', Em.K);
sinon.stub(view, 'refresh', Em.K);
sinon.stub(view, 'resetStartIndex');
sinon.spy(view, 'updateFilter');
this.clock = sinon.useFakeTimers();
});
afterEach(function () {
view.saveFilterConditions.restore();
view.updateFilter.restore();
view.resetStartIndex.restore();
view.refresh.restore();
this.clock.restore();
});
it('filteringComplete is false', function() {
view.set('filteringComplete', false);
view.updateFilter(1, '1', 'string');
expect(view.get('controller.resetStartIndex')).to.be.false;
expect(view.saveFilterConditions.called).to.be.false;
view.set('filteringComplete', true);
this.clock.tick(view.get('filterWaitingTime'));
expect(view.updateFilter.calledWith(1, '1', 'string')).to.be.true;
});
it('filteringComplete is true', function() {
view.set('filteringComplete', true);
view.updateFilter(1, '1', 'string');
expect(view.get('controller.resetStartIndex')).to.be.true;
expect(view.saveFilterConditions.calledWith(1, '1', 'string', false)).to.be.true;
expect(view.refresh.calledOnce).to.be.true;
});
it('clear filters - refresh() clears timer', function () {
//clear filters simulation
view.set('filteringComplete', false);
view.updateFilter(0, '', 'string');
//filters cleared success
view.updaterSuccessCb();
//timeout in updateFilter() runs out
this.clock.tick(view.get('filterWaitingTime'));
//should not call update filter again
expect(view.updateFilter.calledOnce).to.be.true;
})
});
describe('#resetStartIndex()', function() {
beforeEach(function () {
sinon.stub(view, 'updatePagination');
sinon.spy(view, 'saveStartIndex');
});
afterEach(function () {
view.saveStartIndex.restore();
view.updatePagination.restore();
});
it('resetStartIndex is false and filteredCount is 0', function() {
view.set('filteredCount', 0);
view.set('controller.resetStartIndex', false);
view.set('startIndex', 0);
view.resetStartIndex();
expect(view.get('startIndex')).to.equal(0);
expect(view.saveStartIndex.called).to.be.false;
expect(view.updatePagination.called).to.be.false;
});
it('resetStartIndex is true and filteredCount is 0', function() {
view.set('filteredCount', 0);
view.set('controller.resetStartIndex', true);
view.set('startIndex', 0);
view.resetStartIndex();
expect(view.get('startIndex')).to.equal(0);
expect(view.saveStartIndex.called).to.be.false;
expect(view.updatePagination.called).to.be.false;
});
it('resetStartIndex is false and filteredCount is 5', function() {
view.set('filteredCount', 5);
view.set('controller.resetStartIndex', false);
view.set('startIndex', 0);
view.resetStartIndex();
expect(view.get('startIndex')).to.equal(0);
expect(view.saveStartIndex.called).to.be.false;
expect(view.updatePagination.called).to.be.false;
});
it('resetStartIndex is true and filteredCount is 5', function() {
view.set('controller.resetStartIndex', true);
view.set('filteredCount', 5);
view.set('startIndex', 0);
view.resetStartIndex();
expect(view.get('startIndex')).to.equal(1);
expect(view.saveStartIndex.called).to.be.true;
expect(view.updatePagination.called).to.be.true;
});
});
describe("#updaterSuccessCb()", function () {
beforeEach(function () {
sinon.stub(view, 'propertyDidChange');
view.set('filteringComplete', false);
view.updaterSuccessCb();
});
afterEach(function () {
view.propertyDidChange.restore();
});
it('pageContent is forced to be recalculated', function () {
expect(view.propertyDidChange.calledWith('pageContent')).to.be.true;
});
it('filteringComplete is updated', function () {
expect(view.get('filteringComplete')).to.be.true;
});
});
});