blob: 4a76ae971bd6cc9472e1b1e4e79a3ed10ec8d2a4 [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('utils/configs_collection');
describe('App.configsCollection', function () {
var configsCollection;
beforeEach(function () {
configsCollection = Em.Object.create(App.configsCollection);
sinon.spy(Em, 'assert');
});
afterEach(function () {
Em.assert.restore();
});
describe('#add', function () {
var throwCases = [
{
obj: undefined,
collection: [],
isError: true,
title: 'null passed'
},
{
obj: {},
collection: [],
isError: true,
title: 'no id passed'
},
{
obj: undefined,
collection: [],
isError: true,
title: 'no item passed'
}
];
var cases = [
{
collection: [],
isError: false,
title: 'initial state'
},
{
obj: {
id: 1,
name: 'n10'
},
collection: [
{
id: 1,
name: 'n10'
}
],
mapItem: {
id: 1,
name: 'n10'
},
isError: false,
title: 'new item'
},
{
obj: {
id: 1,
name: 'n11'
},
collection: [
{
id: 1,
name: 'n10'
}
],
mapItem: {
id: 1,
name: 'n11'
},
isError: false,
title: 'duplicate id'
},
{
obj: {
id: '1',
name: 'n12'
},
collection: [
{
id: 1,
name: 'n10'
}
],
mapItem: {
id: '1',
name: 'n12'
},
isError: false,
title: 'duplicate id, key name conversion'
}
];
throwCases.forEach(function (item) {
it(item.title, function () {
expect(function () {configsCollection.add(item.obj);}).to.throw(Error);
});
});
cases.forEach(function (item) {
describe(item.title, function () {
beforeEach(function () {
if (item.hasOwnProperty('obj')) {
configsCollection.add(item.obj);
}
});
it('configs array', function () {
expect(configsCollection.getAll()).to.eql(item.collection);
});
if (item.obj && item.obj.id) {
it('configs map', function () {
expect(configsCollection.getConfig(item.obj.id)).to.eql(item.mapItem);
});
}
});
});
});
describe('#getConfig', function () {
var throwCases = [
{
result: undefined,
isError: true,
title: 'no id passed'
},
{
id: null,
result: undefined,
isError: true,
title: 'invalid id passed'
}
];
var cases = [
{
id: 1,
result: {
id: 1
},
isError: false,
title: 'existing item'
},
{
id: 1,
result: {
id: 1
},
isError: false,
title: 'existing item, key name conversion'
},
{
id: 2,
result: undefined,
isError: false,
title: 'item doesn\'t exist'
}
];
throwCases.forEach(function (item) {
it(item.title, function () {
configsCollection.add({
id: 1
});
expect(function () {configsCollection.getConfig(item.id);}).to.throw(Error);
});
});
cases.forEach(function (item) {
describe(item.title, function () {
var result;
beforeEach(function () {
configsCollection.add({
id: 1
});
result = configsCollection.getConfig(item.id);
});
it('returned value', function () {
expect(result).to.eql(item.result);
});
});
});
});
describe('#getConfigByName', function () {
var configIds = ['n0_f0', 'n1_f1'];
var throwCases = [
{
fileName: 'f0',
result: undefined,
isError: true,
title: 'no name passed'
},
{
name: 'n0',
result: undefined,
isError: true,
title: 'no filename passed'
}
];
var cases = [
{
name: 'n0',
fileName: 'f0',
result: {
id: 'n0_f0'
},
isError: false,
title: 'existing item'
},
{
name: 'n0',
fileName: 'f1',
result: undefined,
isError: false,
title: 'not existing item'
}
];
beforeEach(function () {
sinon.stub(App.config, 'configId', function (name, fileName) {
return name + '_' + fileName;
});
});
afterEach(function () {
configsCollection.clearAll();
App.config.configId.restore();
});
throwCases.forEach(function (item) {
it(item.title, function () {
expect(function () {configsCollection.getConfigByName(item.name, item.fileName);}).to.throw(Error);
});
});
cases.forEach(function (item) {
describe(item.title, function () {
var result;
beforeEach(function () {
configIds.forEach(function (id) {
configsCollection.add({
id: id
});
});
result = configsCollection.getConfigByName(item.name, item.fileName);
});
it('returned value', function () {
expect(result).to.eql(item.result);
});
});
});
});
describe('#getAll', function () {
var configs = [
{
id: 'c0'
},
{
id: 'c1'
}
];
beforeEach(function () {
configsCollection.clearAll();
});
it('should return all configs', function () {
configs.forEach(function (item) {
configsCollection.add(item);
});
expect(configsCollection.getAll()).to.eql(configs);
});
});
describe('#clearAll', function () {
beforeEach(function () {
configsCollection.add({
id: 'c0'
});
configsCollection.clearAll();
});
it('should clear configs array', function () {
expect(configsCollection.getAll()).to.have.length(0);
});
it('should clear configs map', function () {
expect(configsCollection.getConfig('c0')).to.be.undefined;
});
});
});