blob: 9d095ecf11ddfc145811286ec84ba3075d98fc68 [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 sort = require('views/common/sort_view');
require('utils/misc');
require('utils/string_utils');
describe('#wrapperView', function () {
describe('#getSortFunc', function () {
describe('number', function () {
var property = Em.Object.create({type: 'number', name: 'lastTriggered'});
Em.A([
{
a: Em.Object.create({lastTriggered: 1}),
b: Em.Object.create({lastTriggered: 0}),
order: true,
e: 1
},
{
a: Em.Object.create({lastTriggered: 1}),
b: Em.Object.create({lastTriggered: 0}),
order: false,
e: -1
},
{
a: Em.Object.create({lastTriggered: null}),
b: Em.Object.create({lastTriggered: 1}),
order: true,
e: -Infinity
},
{
a: Em.Object.create({lastTriggered: null}),
b: Em.Object.create({lastTriggered: 1}),
order: false,
e: Infinity
}
]).forEach(function (test, i) {
it('test #' + (i + 1), function () {
var func = sort.wrapperView.create().getSortFunc(property, test.order);
expect(func(test.a, test.b)).to.equal(test.e);
});
});
});
describe('default', function () {
var property = Em.Object.create({type: 'string', name: 'serviceName'});
Em.A([
{
a: Em.Object.create({serviceName: 's1'}),
b: Em.Object.create({serviceName: 's2'}),
order: true,
e: 1
},
{
a: Em.Object.create({serviceName: 's1'}),
b: Em.Object.create({serviceName: 's2'}),
order: false,
e: -1
},
{
a: Em.Object.create({serviceName: 's1'}),
b: Em.Object.create({serviceName: 's1'}),
order: true,
e: 0
},
{
a: Em.Object.create({serviceName: null}),
b: Em.Object.create({serviceName: 's2'}),
order: true,
e: 1
},
{
a: Em.Object.create({serviceName: null}),
b: Em.Object.create({serviceName: 's2'}),
order: false,
e: -1
},
{
a: Em.Object.create({serviceName: 's1'}),
b: Em.Object.create({serviceName: 'S2'}),
order: true,
e: 1
},
{
a: Em.Object.create({serviceName: 's1'}),
b: Em.Object.create({serviceName: 'S2'}),
order: false,
e: -1
}
]).forEach(function (test, i) {
it('test #' + (i + 1), function () {
var func = sort.wrapperView.create().getSortFunc(property, test.order);
expect(func(test.a, test.b)).to.equal(test.e);
});
});
it('test non-string values', function () {
property = Em.Object.create({type: 'string', name: 'enabled'});
var func = sort.wrapperView.create().getSortFunc(property, true),
a = Em.Object.create({enabled: false}),
b = Em.Object.create({enabled: true});
expect(func(a, b)).to.equal(1);
});
});
});
describe('#fieldView', function () {
var fieldView, wrapperView;
describe('#click', function () {
beforeEach(function () {
fieldView = sort.fieldView.create({
controller: Em.Object.create({
sortingColumn: null
})
});
wrapperView = sort.wrapperView.create({
childViews: [fieldView]
});
fieldView.reopen({'parentView': wrapperView});
sinon.stub(wrapperView, 'sort', Em.K);
sinon.stub(wrapperView, 'removeSortingObserver', Em.K);
sinon.stub(wrapperView, 'addSortingObserver', Em.K);
});
afterEach(function () {
wrapperView.sort.restore();
wrapperView.removeSortingObserver.restore();
wrapperView.addSortingObserver.restore();
});
it('should call sort function of wrapperView', function () {
fieldView.click();
expect(wrapperView.sort.calledOnce).to.be.true;
});
it('should call removeSortingObserver function of wrapperView if sortingColumn is absent in controller', function () {
fieldView.reopen({
controller: Em.Object.create({
sortingColumn: {name: 'test'}
})
});
fieldView.click();
expect(wrapperView.removeSortingObserver.calledOnce).to.be.true;
});
it('should not call removeSortingObserver function of wrapperView if sortingColumn exists in controller', function () {
fieldView.click();
expect(wrapperView.removeSortingObserver.calledOnce).to.be.false;
});
it('should call addSortingObserver function of wrapperView', function () {
fieldView.click();
expect(wrapperView.addSortingObserver.calledOnce).to.be.true;
});
})
});
describe('#getSortedContent', function() {
var wrapperView;
var content = [
Em.Object.create({
id: 1
}),
Em.Object.create({
id: 2
})
];
beforeEach(function() {
wrapperView = sort.wrapperView.create({
childViews: [],
isSorting: false
});
sinon.stub(wrapperView, 'sort', function(arg1, arg2, arg3, arg4) {
return arg4.reverse();
});
});
afterEach(function() {
wrapperView.sort.restore();
});
it('should return content without sorting', function() {
expect(wrapperView.getSortedContent(content)).to.be.eql(content);
expect(wrapperView.sort.called).to.be.false;
});
it('should return content with sorting', function() {
wrapperView.set('childViews', [
Em.Object.create({
status: 'sorting_desc'
})
]);
expect(wrapperView.getSortedContent(content)).to.be.eql(content.reverse());
expect(wrapperView.sort.calledWith(
Em.Object.create({
status: 'sorting_desc'
}),
true,
true,
content
)).to.be.true;
});
});
});