horizon/horizon/static/framework/util/extensible/extensible.service.spec.js

218 lines
6.3 KiB
JavaScript

/**
* Licensed 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.
*/
(function () {
'use strict';
describe('horizon.framework.util.extensible module', function () {
it('should have been defined', function () {
expect(angular.module('horizon.framework.util.extensible')).toBeDefined();
});
});
describe('extensible service', function () {
var extensibleService, container, items;
beforeEach(module('horizon.framework.util.extensible'));
beforeEach(inject(function ($injector) {
extensibleService = $injector.get('horizon.framework.util.extensible.service');
container = {};
items = [ { id: '1' }, { id: '2' }, { id: '3' } ];
extensibleService(container, items);
}));
it('can append items', function () {
expect(items.length).toBe(3);
var item4 = { id: '4' };
container.append(item4, 1);
expect(items.length).toBe(4);
expect(items[3]).toBe(item4);
var item5 = { id: '5' };
container.append(item5);
expect(items.length).toBe(5);
expect(items[3]).toBe(item5);
expect(items[4]).toBe(item4);
var item6 = { id: '6' };
container.append(item6, 2);
expect(items.length).toBe(6);
expect(items[3]).toBe(item5);
expect(items[4]).toBe(item6);
expect(items[5]).toBe(item4);
var item7 = { id: '7' };
container.append(item7, 1);
expect(items.length).toBe(7);
expect(items[3]).toBe(item5);
expect(items[4]).toBe(item6);
expect(items[5]).toBe(item4);
expect(items[6]).toBe(item7);
var item8 = { id: '8' };
container.append(item8);
expect(items.length).toBe(8);
expect(items[3]).toBe(item5);
expect(items[4]).toBe(item8);
expect(items[5]).toBe(item6);
expect(items[6]).toBe(item4);
expect(items[7]).toBe(item7);
});
it('can prepend items', function () {
expect(items.length).toBe(3);
var item4 = { id: '4' };
container.prepend(item4, 1);
expect(items.length).toBe(4);
expect(items[0]).toBe(item4);
var item5 = { id: '5' };
container.prepend(item5);
expect(items.length).toBe(5);
expect(items[0]).toBe(item4);
expect(items[1]).toBe(item5);
var item6 = { id: '6' };
container.prepend(item6, 2);
expect(items.length).toBe(6);
expect(items[0]).toBe(item4);
expect(items[1]).toBe(item6);
expect(items[2]).toBe(item5);
var item7 = { id: '7' };
container.prepend(item7, 1);
expect(items.length).toBe(7);
expect(items[0]).toBe(item7);
expect(items[1]).toBe(item4);
expect(items[2]).toBe(item6);
expect(items[3]).toBe(item5);
var item8 = { id: '8' };
container.prepend(item8);
expect(items.length).toBe(8);
expect(items[0]).toBe(item7);
expect(items[1]).toBe(item4);
expect(items[2]).toBe(item6);
expect(items[3]).toBe(item8);
expect(items[4]).toBe(item5);
});
it('can insert items', function () {
expect(items.length).toBe(3);
var item4 = { id: '4' };
container.after('1', item4, 1);
expect(items.length).toBe(4);
expect(items[1]).toBe(item4);
var item5 = { id: '5' };
container.after('1', item5);
expect(items.length).toBe(5);
expect(items[1]).toBe(item4);
expect(items[2]).toBe(item5);
var item6 = { id: '6' };
container.after('1', item6, 2);
expect(items.length).toBe(6);
expect(items[1]).toBe(item4);
expect(items[2]).toBe(item6);
expect(items[3]).toBe(item5);
var item7 = { id: '7' };
container.after('1', item7, 1);
expect(items.length).toBe(7);
expect(items[1]).toBe(item7);
expect(items[2]).toBe(item4);
expect(items[3]).toBe(item6);
expect(items[4]).toBe(item5);
var item8 = { id: '8' };
container.after('1', item8);
expect(items.length).toBe(8);
expect(items[1]).toBe(item7);
expect(items[2]).toBe(item4);
expect(items[3]).toBe(item6);
expect(items[4]).toBe(item8);
expect(items[5]).toBe(item5);
var last = { id: 'last' };
container.after('3', last);
expect(items.length).toBe(9);
expect(items[8]).toBe(last);
var insert = function() {
container.after('foo', { id: 'bar' });
};
expect(insert).toThrowError(Error, 'Item with id foo not found.');
});
it('can remove items', function () {
expect(items.length).toBe(3);
container.remove('2');
expect(items.length).toBe(2);
container.remove('1');
expect(items.length).toBe(1);
var remove = function() {
container.remove('foo');
};
expect(remove).toThrowError(Error, 'Item with id foo not found.');
});
it('can replace items', function () {
expect(items.length).toBe(3);
var item4 = { id: '4' };
container.replace('2', item4);
expect(items.length).toBe(3);
expect(items[1]).toBe(item4);
var item5 = { id: '5' };
container.replace('1', item5);
expect(items.length).toBe(3);
expect(items[0]).toBe(item5);
expect(items[1]).toBe(item4);
expect(items[2].id).toBe('3');
var replace = function() {
container.replace('foo', { id: 'bar' });
};
expect(replace).toThrowError(Error, 'Item with id foo not found.');
});
it('can add controllers', function () {
expect(container.controllers.length).toBe(0);
container.addController('MyController');
expect(container.controllers.length).toBe(1);
});
it('can chain method calls', function () {
container
.append({ id: '4' })
.prepend({ id: '5' })
.after('1', { id: '6' })
.remove('3')
.replace('2', { id: '7' })
.addController('foo');
expect(items.map(function getId(item) {
return item.id;
})).toEqual(['5', '1', '6', '7', '4']);
});
});
})();