blob: 8868ec416290ea37700626803d8097f4069a4756 [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('views/common/chart/pie');
require('views/common/configs/services_config');
describe('App.ServiceConfigsByCategoryView', function () {
var view = App.ServiceConfigsByCategoryView.create({
serviceConfigs: []
});
var testData = [
{
title: 'four configs in correct order',
configs: [
Em.Object.create({index: 1, resultId: 1}),
Em.Object.create({index: 2, resultId: 2}),
Em.Object.create({index: 3, resultId: 3}),
Em.Object.create({index: 4, resultId: 4})
]
},
{
title: 'four configs in reverse order',
configs: [
Em.Object.create({index: 4, resultId: 4}),
Em.Object.create({index: 3, resultId: 3}),
Em.Object.create({index: 2, resultId: 2}),
Em.Object.create({index: 1, resultId: 1})
]
},
{
title: 'four configs in random order',
configs: [
Em.Object.create({index: 3, resultId: 3}),
Em.Object.create({index: 4, resultId: 4}),
Em.Object.create({index: 1, resultId: 1}),
Em.Object.create({index: 2, resultId: 2})
]
},
{
title: 'four configs with no index',
configs: [
Em.Object.create({resultId: 1}),
Em.Object.create({resultId: 2}),
Em.Object.create({resultId: 3}),
Em.Object.create({resultId: 4})
]
},
{
title: 'four configs but one with index',
configs: [
Em.Object.create({resultId: 2}),
Em.Object.create({resultId: 3}),
Em.Object.create({resultId: 4}),
Em.Object.create({index: 1, resultId: 1})
]
},
{
title: 'index is null or not number',
configs: [
Em.Object.create({index: null, resultId: 3}),
Em.Object.create({index: 1, resultId: 1}),
Em.Object.create({index: 2, resultId: 2}),
Em.Object.create({index: 'a', resultId: 4})
]
},
{
title: 'four configs when indexes skipped',
configs: [
Em.Object.create({index: 88, resultId: 3}),
Em.Object.create({index: 67, resultId: 2}),
Em.Object.create({index: 111, resultId: 4}),
Em.Object.create({index: 3, resultId: 1})
]
}
];
App.TestAliases.testAsComputedIfThenElse(view, 'isCategoryBodyVisible', 'category.isCollapsed', 'display: none;', 'display: block;');
describe('#sortByIndex', function () {
var result = [1, 2, 3, 4];
testData.forEach(function(_test){
it(_test.title, function () {
expect(view.sortByIndex(_test.configs).mapProperty('resultId')).to.deep.equal(result);
})
})
});
describe('#isShowBlock', function() {
var tests = [
{
categoryConfigs: Em.A([
Em.Object.create({ isHiddenByFilter: false })
]),
category: {},
m: 'no configs with widget, filtered properties are visible. Panel should be shown',
e: true
},
{
categoryConfigs: Em.A([]),
category: Em.Object.create({ customCanAddProperty: true}),
m: 'Category with custom properties. Panel shouldn\'t be shown',
e: false
},
{
categoryConfigs: Em.A([
Em.Object.create({ isHiddenByFilter: false })
]),
category: Em.Object.create({ customCanAddProperty: true}),
m: 'Category with custom properties. Filtered configs are hidden. Panel should be shown',
e: true
},
{
categoryConfigs: Em.A([
Em.Object.create({ isHiddenByFilter: true })
]),
category: Em.Object.create({ customCanAddProperty: false }),
m: 'Filtered configs are hidden. Category not for custom properties. Panel should be hidden',
e: false
},
{
categoryConfigs: Em.A([]),
category: Em.Object.create({ customCanAddProperty: false }),
m: 'Category without properties and not for custom configurations. Panel should be hidden',
e: false
},
{
categoryConfigs: Em.A([
Em.Object.create({ widget: {someProp: 'a'}}),
Em.Object.create({ widget: {someProp: 'b'}})
]),
category: Em.Object.create({ customCanAddProperty: false }),
m: 'All properties have widgets and category is not custom. Panel should be hidden',
e: false
},
{
categoryConfigs: Em.A([
Em.Object.create({ widget: null }),
Em.Object.create({ widget: null })
]),
category: Em.Object.create({ customCanAddProperty: false }),
m: 'All properties have widgets set to `null` and category is not custom. Panel should be hidden',
e: false
},
{
categoryConfigs: Em.A([
Em.Object.create({ widget: {someProp: 'a'} }),
Em.Object.create({ isHiddenByFilter: true })
]),
category: Em.Object.create({ customCanAddProperty: false }),
m: 'Category contains mixed properties. Properties are hidden by filter. Panel should be hidden',
e: false
},
{
categoryConfigs: Em.A([
Em.Object.create({ widget: {someProp: 'a'} }),
Em.Object.create({ isHiddenByFilter: false })
]),
category: Em.Object.create({ customCanAddProperty: false }),
m: 'Category contains mixed properties. Properties are visible. Panel should be shown',
e: true
},
{
categoryConfigs: Em.A([
Em.Object.create({ widget: {someProp: 'a'} })
]),
isCompareMode: true,
category: Em.Object.create({ customCanAddProperty: true }),
m: 'Should hide block in compare mode',
e: false
}
];
beforeEach(function () {
this._view = App.ServiceConfigsByCategoryView.create({
serviceConfigs: Em.A([])
});
sinon.stub(this._view, 'filteredCategoryConfigs', Em.K);
});
afterEach(function () {
this._view.filteredCategoryConfigs.restore();
this._view.destroy();
});
tests.forEach(function(test) {
it(test.m, function() {
this._view.reopen({
category: test.category,
categoryConfigs: test.categoryConfigs,
mainView: Em.Object.create({
columns: []
}),
controller: Em.Object.create({
isCompareMode: test.isCompareMode
})
});
expect(this._view.get('isShowBlock')).to.be.eql(test.e);
});
});
});
describe('#isSecureConfig', function () {
var cases = [
{
name: 'n0',
filename: 'f0',
isSecureConfig: true,
title: 'secure config'
},
{
name: 'n1',
filename: 'f1',
isSecureConfig: false,
title: 'secure config with the same name is present in another filename'
},
{
name: 'n2',
filename: 'f2',
isSecureConfig: false,
title: 'no configs of the specified filename are secure'
}
];
before(function () {
App.config.reopen({
secureConfigs: [
{
name: 'n0',
filename: 'f0'
},
{
name: 'n1',
filename: 'f0'
},
{
name: 'n2',
filename: 'f1'
}
]
})
});
cases.forEach(function (item) {
it(item.title, function () {
expect(view.isSecureConfig(item.name, item.filename)).to.equal(item.isSecureConfig);
});
});
});
describe('#categoryConfigs', function () {
var result = [1, 2, 3, 4, 5];
var cases = [
{
categoryNname: 'TestCategory',
serviceConfigs: [
Em.Object.create({category: "TestCategory", index: 1, name: "a", isVisible: true, resultId: 1}),
Em.Object.create({category: "TestCategory", index: 2, name: "b", isVisible: true, resultId: 2}),
Em.Object.create({category: "TestCategory", index: 5, name: "c", isVisible: true, resultId: 5}),
Em.Object.create({category: "TestCategory", index: 4, name: "d", isVisible: true, resultId: 4}),
Em.Object.create({category: "TestCategory", index: 3, name: "e", isVisible: true, resultId: 3})
],
title: 'Order by index with no content type'
},
{
categoryNname: 'TestCategory',
serviceConfigs: [
Em.Object.create({category: "TestCategory", index: 1, name: "a", isVisible: true, resultId: 1, displayType: 'int'}),
Em.Object.create({category: "TestCategory", index: 2, name: "b", isVisible: true, resultId: 4, displayType: 'content'}),
Em.Object.create({category: "TestCategory", index: 3, name: "c", isVisible: true, resultId: 2}),
Em.Object.create({category: "TestCategory", index: 4, name: "d", isVisible: true, resultId: 5, displayType: 'content'}),
Em.Object.create({category: "TestCategory", index: 5, name: "e", isVisible: true, resultId: 3})
],
title: 'Order configs by index and display type equal to content'
},
{
categoryNname: 'TestCategory',
serviceConfigs: [
Em.Object.create({category: "TestCategory", name: "a", isVisible: true, resultId: 1, displayType: 'content'}),
Em.Object.create({category: "TestCategory", name: "b", isVisible: true, resultId: 2, displayType: 'content'}),
Em.Object.create({category: "TestCategory", name: "c", isVisible: true, resultId: 3, displayType: 'content'}),
Em.Object.create({category: "TestCategory", name: "d", isVisible: true, resultId: 4, displayType: 'content'}),
Em.Object.create({category: "TestCategory", name: "e", isVisible: true, resultId: 5, displayType: 'content'})
],
title: 'Order configs by display type equal to content - so they will be sorted alphabetically'
},
{
categoryNname: 'TestCategory',
serviceConfigs: [
Em.Object.create({category: "TestCategory", index: 5, name: "a", isVisible: true, resultId: 1, displayType: 'content'}),
Em.Object.create({category: "TestCategory", index: 4, name: "b", isVisible: true, resultId: 2, displayType: 'content'}),
Em.Object.create({category: "TestCategory", index: 3, name: "c", isVisible: true, resultId: 3, displayType: 'content'}),
Em.Object.create({category: "TestCategory", index: 2, name: "d", isVisible: true, resultId: 4, displayType: 'content'}),
Em.Object.create({category: "TestCategory", index: 1, name: "e", isVisible: true, resultId: 5, displayType: 'content'})
],
title: 'Order configs by display type equal to content - so they will be sorted alphabetically not by index'
}
];
cases.forEach(function (item) {
it(item.title, function () {
view = App.ServiceConfigsByCategoryView.create({
category: {
name: item.categoryNname
},
serviceConfigs: item.serviceConfigs,
filteredCategoryConfigs: Em.K,
collapseCategory: Em.K
});
view.setCategoryConfigsAll();
view.setVisibleCategoryConfigs();
expect(view.get('categoryConfigs').mapProperty('resultId')).to.deep.equal(result);
view.destroy();
});
});
});
});