blob: a2983f1f6a7ff982d7c6d2b5a0bf869ad5213069 [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('mappers/configs/themes_mapper');
require('models/configs/theme/tab');
require('models/configs/theme/section');
require('models/configs/theme/sub_section');
describe('App.themeMapper', function () {
describe('#map', function() {
var json = {
items: [
{}
]
};
beforeEach(function() {
sinon.stub(App.themesMapper, 'mapThemeLayouts');
sinon.stub(App.themesMapper, 'mapThemeConfigs');
sinon.stub(App.themesMapper, 'mapThemeWidgets');
sinon.stub(App.themesMapper, 'generateAdvancedTabs');
sinon.stub(App.store, 'safeLoadMany');
App.themesMapper.map(json, ['S1']);
});
afterEach(function() {
App.store.safeLoadMany.restore();
App.themesMapper.mapThemeLayouts.restore();
App.themesMapper.mapThemeConfigs.restore();
App.themesMapper.mapThemeWidgets.restore();
App.themesMapper.generateAdvancedTabs.restore();
App.set('enableLogger', true);
});
it('mapThemeLayouts should be called', function() {
expect(App.themesMapper.mapThemeLayouts.calledWith({}, [])).to.be.true;
});
it('mapThemeConfigs should be called', function() {
expect(App.themesMapper.mapThemeConfigs.calledWith({})).to.be.true;
});
it('mapThemeWidgets should be called', function() {
expect(App.themesMapper.mapThemeWidgets.calledWith({})).to.be.true;
});
it('generateAdvancedTabs should be called', function() {
expect(App.themesMapper.generateAdvancedTabs.calledWith(['S1'])).to.be.true;
});
it('App.store.safeLoadMany should be called', function() {
expect(App.store.safeLoadMany.calledOnce).to.be.true;
});
});
describe('#mapThemeLayouts', function() {
var json = {
ThemeInfo: {
service_name: 'S1',
theme_data: {
Theme: {
name: 'theme1',
configuration: {
layouts: [
{
tabs: [
{
name: 't1',
layout: {
sections: [
{
"name": 'SEC1',
"display-name": 'sec1',
"row-index": 1,
"column-index": 2,
"row-span": 3,
"column-span": 4,
"section-columns": 5,
"section-rows": 6,
"tab_id": 1
}
]
}
}
]
}
]
}
}
}
}
};
beforeEach(function() {
sinon.stub(App.themesMapper, 'loadSubSections');
sinon.stub(App.store, 'safeLoadMany');
});
afterEach(function() {
App.themesMapper.loadSubSections.restore();
App.store.safeLoadMany.restore();
});
it('loadSubSections should be called', function() {
App.themesMapper.mapThemeLayouts(json, []);
expect(App.themesMapper.loadSubSections.getCall(0).args).to.be.eql([
{
"name": 'SEC1',
"display-name": 'sec1',
"row-index": 1,
"column-index": 2,
"row-span": 3,
"column-span": 4,
"section-columns": 5,
"section-rows": 6,
"tab_id": 1
},
{
"column_index": 2,
"column_span": 4,
"display_name": "sec1",
"id": "SEC1_S1_t1",
"name": "SEC1",
"row_index": 1,
"row_span": 3,
"section_columns": 5,
"section_rows": 6,
"tab_id": "S1_t1"
}, 'S1', 'theme1'
])
});
it('App.store.safeLoadMany should be called', function() {
App.themesMapper.mapThemeLayouts(json, []);
expect(App.store.safeLoadMany.getCall(0).args[1]).to.be.eql([{
"column_index": 2,
"column_span": 4,
"display_name": "sec1",
"id": "SEC1_S1_t1",
"name": "SEC1",
"row_index": 1,
"row_span": 3,
"section_columns": 5,
"section_rows": 6,
"tab_id": "S1_t1"
}]);
});
it('should add tab to tabs', function() {
var tabs = [];
App.themesMapper.mapThemeLayouts(json, tabs);
expect(tabs).to.have.length(1);
});
});
describe('#loadSubSections', function() {
var section = {
subsections: [
{
"name": 'SSEC1',
"display-name": 'ssec1',
"border": 1,
"row-index": 2,
"column-index": 3,
"column-span": 4,
"row-span": 5,
"config_properties": [],
"section_id": 1,
"depends-on": [],
"left-vertical-splitter": 6
}
]
};
beforeEach(function() {
sinon.stub(App.themesMapper, 'loadSubSectionTabs');
sinon.stub(App.themesMapper, 'mapThemeConditions');
sinon.stub(App.store, 'safeLoadMany');
});
afterEach(function() {
App.store.safeLoadMany.restore();
App.themesMapper.loadSubSectionTabs.restore();
App.themesMapper.mapThemeConditions.restore();
});
it('loadSubSectionTabs should be called', function() {
App.themesMapper.loadSubSections(section, {id: 1}, 's1', 't1');
expect(App.themesMapper.loadSubSectionTabs.getCall(0).args).to.be.eql([
{
"name": 'SSEC1',
"display-name": 'ssec1',
"border": 1,
"row-index": 2,
"column-index": 3,
"column-span": 4,
"row-span": 5,
"config_properties": [],
"section_id": 1,
"depends-on": [],
"left-vertical-splitter": 6
},
{
"border": 1,
"column_index": 3,
"column_span": 4,
"configProperties": [],
"depends_on": [],
"display_name": "ssec1",
"id": "SSEC1_s1_t1",
"left_vertical_splitter": 6,
"name": "SSEC1",
"row_index": 2,
"row_span": 5,
"section_id": 1,
"theme_name": "t1",
}
]);
});
it('mapThemeConditions should be called', function() {
App.themesMapper.loadSubSections(section, {id: 1}, 's1', 't1');
expect(App.themesMapper.mapThemeConditions.getCall(0).args).to.be.eql([
[{
"border": 1,
"column_index": 3,
"column_span": 4,
"configProperties": [],
"depends_on": [],
"display_name": "ssec1",
"id": "SSEC1_s1_t1",
"left_vertical_splitter": 6,
"name": "SSEC1",
"row_index": 2,
"row_span": 5,
"section_id": 1,
"theme_name": "t1"
}],
'subsection'
]);
});
it('App.store.safeLoadMany should be called', function() {
App.themesMapper.loadSubSections(section, {id: 1}, 's1', 't1');
expect(App.store.safeLoadMany.getCall(0).args[1]).to.be.eql([
{
"border": 1,
"column_index": 3,
"column_span": 4,
"configProperties": [],
"depends_on": [],
"display_name": "ssec1",
"id": "SSEC1_s1_t1",
"left_vertical_splitter": 6,
"name": "SSEC1",
"row_index": 2,
"row_span": 5,
"section_id": 1,
"theme_name": "t1"
}
]);
});
it('sub_sections should be set', function() {
var parsedSection = {id: 1};
App.themesMapper.loadSubSections(section, parsedSection);
expect(parsedSection.sub_sections).to.have.length(1);
});
});
describe('#loadSubSectionTabs', function() {
var subSection = {
"subsection-tabs": [
{
"name": 'SEC1',
"display-name": 'sec1',
"depends-on": [],
"sub_section_id": 'SUB1'
}
]
};
beforeEach(function() {
sinon.stub(App.themesMapper, 'mapThemeConditions');
sinon.stub(App.store, 'safeLoadMany');
});
afterEach(function() {
App.themesMapper.mapThemeConditions.restore();
App.store.safeLoadMany.restore();
});
it('mapThemeConditions should be called', function() {
App.themesMapper.loadSubSectionTabs(subSection, {id: 2, theme_name: "t1"});
expect(App.themesMapper.mapThemeConditions.getCall(0).args).to.be.eql([
[{
"depends_on": [],
"display_name": "sec1",
"id": "SEC1",
"is_active": true,
"name": "SEC1",
"sub_section_id": 2,
"theme_name": "t1"
}],
'subsectionTab'
]);
});
it('App.store.safeLoadMany should be called', function() {
App.themesMapper.loadSubSectionTabs(subSection, {id: 2, theme_name: "t1"});
expect(App.store.safeLoadMany.getCall(0).args[1]).to.be.eql([
{
"depends_on": [],
"display_name": "sec1",
"id": "SEC1",
"is_active": true,
"name": "SEC1",
"sub_section_id": 2,
"theme_name": "t1"
}
]);
});
it('sub_section_tabs should be set', function() {
var parsedSubSection = {id: 3};
App.themesMapper.loadSubSectionTabs(subSection, parsedSubSection);
expect(parsedSubSection.sub_section_tabs).to.have.length(1);
});
});
describe('#mapThemeConfigs', function() {
var json;
beforeEach(function() {
json = {
ThemeInfo: {
service_name: 'S1',
theme_data: {
Theme: {
configuration: {
placement: {
configs: [{
"subsection-name": '',
"subsection-tab-name": '',
"depends-on": [{}]
}]
}
}
}
}
}
};
this.mockSection = sinon.stub(App.SubSection, 'find');
this.mockSectionTab = sinon.stub(App.SubSectionTab, 'find');
sinon.stub(App.configsCollection, 'getConfig').returns({id: 'foo'});
sinon.stub(App.themesMapper, 'getConfigByAttributes').returns({});
sinon.stub(App.themesMapper, 'mapThemeConfigConditions');
});
afterEach(function() {
this.mockSection.restore();
this.mockSectionTab.restore();
App.configsCollection.getConfig.restore();
App.themesMapper.getConfigByAttributes.restore();
App.themesMapper.mapThemeConfigConditions.restore();
});
it('should call mapThemeConfigConditions', function() {
App.themesMapper.mapThemeConfigs(json);
expect(App.themesMapper.mapThemeConfigConditions.calledOnce).to.be.true;
});
it('should call getConfigByAttributes', function() {
App.themesMapper.mapThemeConfigs(json);
expect(App.themesMapper.getConfigByAttributes.calledOnce).to.be.true;
});
it('should set config to subSection', function() {
json.ThemeInfo.theme_data.Theme.configuration.placement.configs[0]["subsection-name"] = 'ss-1';
var subSection = Em.Object.create({
configProperties: []
});
this.mockSection.returns(subSection);
App.themesMapper.mapThemeConfigs(json);
expect(subSection.get('configProperties')).to.be.eql(['foo']);
});
it('should set config to SubSectionTab', function() {
json.ThemeInfo.theme_data.Theme.configuration.placement.configs[0]["subsection-tab-name"] = 'sst-1';
var subSectionTab = Em.Object.create({
configProperties: []
});
this.mockSectionTab.returns(subSectionTab);
App.themesMapper.mapThemeConfigs(json);
expect(subSectionTab.get('configProperties')).to.be.eql(['foo']);
});
});
describe('#mapThemeConfigConditions', function () {
beforeEach(function () {
sinon.stub(App.store, 'safeLoadMany');
});
afterEach(function () {
App.store.safeLoadMany.restore();
});
it('App.store.safeLoadMany should be called', function () {
var configConditions = [
{
configs: ['foo/bar']
}
];
var configProperty = {
id: 'c1',
name: 'config1',
filename: 'file1.xml'
};
App.themesMapper.mapThemeConfigConditions(configConditions, configProperty);
expect(App.store.safeLoadMany.getCall(0).args[1][0]).to.be.eql({
"config_name": "config1",
"configs": [
{
"configName": "bar",
"fileName": "foo.xml"
}
],
"file_name": "file1.xml",
"id": "c1_0",
"resource": "config",
"type": "config"
});
});
});
describe('#mapThemeConditions', function () {
beforeEach(function () {
sinon.stub(App.store, 'safeLoadMany');
});
afterEach(function () {
App.store.safeLoadMany.restore();
});
it('App.store.safeLoadMany should be called', function () {
var subSections = [
{
id: 'ss-1',
name: 'sub-section',
"depends_on": [
{
configs: ['foo/bar']
}
]
}
];
App.themesMapper.mapThemeConditions(subSections, 'type1');
expect(App.store.safeLoadMany.getCall(0).args[1][0]).to.be.eql({
"id": "ss-1_0",
"name": 'sub-section',
"configs": [
{
"configName": "bar",
"fileName": "foo.xml"
}
],
"resource": "config",
"type": "type1"
});
});
});
describe('#mapThemeWidgets', function() {
var json = {
ThemeInfo: {
theme_data: {
Theme: {
configuration: {
widgets: [
{
widget: {
type: 'foo'
},
config: 'foo/bar'
}
]
}
}
}
}
};
beforeEach(function() {
this.mockConfig = sinon.stub(App.configsCollection, 'getConfig');
this.mockConfigByName = sinon.stub(App.configsCollection, 'getConfigByName');
});
afterEach(function() {
this.mockConfig.restore();
this.mockConfigByName.restore();
});
it('should set widget to configProperty', function() {
var configProperty = Em.Object.create();
this.mockConfig.returns(configProperty);
App.themesMapper.mapThemeWidgets(json);
expect(configProperty.get('widget')).to.be.eql({type: 'foo'});
expect(configProperty.get('widgetType')).to.be.equal('foo');
});
it('should set widget to uiOnlyProperty', function() {
var uiOnlyProperty = Em.Object.create();
this.mockConfigByName.returns(uiOnlyProperty);
App.themesMapper.mapThemeWidgets(json);
expect(App.configsCollection.getConfigByName.calledWith('bar', 'foo.xml')).to.be.true;
expect(uiOnlyProperty.get('widget')).to.be.eql({type: 'foo'});
expect(uiOnlyProperty.get('widgetType')).to.be.equal('foo');
});
});
describe('#getConfigId', function() {
it('should return config id', function() {
expect(App.themesMapper.getConfigId({config: 'foo/bar'})).to.be.equal('bar__foo');
});
it('should return null', function() {
expect(App.themesMapper.getConfigId(null)).to.be.null;
});
});
describe('#generateAdvancedTabs', function() {
beforeEach(function() {
sinon.stub(App.StackService, 'find').returns([]);
sinon.stub(App.store, 'safeLoadMany');
});
afterEach(function() {
App.StackService.find.restore();
App.store.safeLoadMany.restore();
});
it('App.store.safeLoadMany should be called', function() {
App.themesMapper.generateAdvancedTabs(['S1']);
expect(App.store.safeLoadMany.getCall(0).args[1][0]).to.be.eql({
id: 'S1_advanced',
name: 'advanced',
display_name: 'Advanced',
is_advanced: true,
service_name: 'S1'
});
});
});
describe('#getConfigByAttributes', function() {
var configLink = {
"config": 'foo/bar',
"property_value_attributes": {
"ui_only_property": {}
}
};
beforeEach(function() {
sinon.stub(App.configsCollection, 'getConfig').returns(null);
sinon.stub(App.configsCollection, 'add');
});
afterEach(function() {
App.configsCollection.getConfig.restore();
App.configsCollection.add.restore();
});
it('App.configsCollection.add should be called', function() {
var subSection = Em.Object.create({configProperties: []});
var subSectionTab = Em.Object.create({configProperties: []});
App.themesMapper.getConfigByAttributes({}, configLink, subSection, subSectionTab, 'S1');
expect(App.configsCollection.add.getCall(0).args[0]).to.be.eql({
id: 'bar__foo',
isRequiredByAgent: false,
showLabel: false,
isOverridable: false,
recommendedValue: true,
name: 'bar',
isUserProperty: false,
filename: 'foo.xml',
fileName: 'foo.xml',
isNotSaved: false,
serviceName: 'S1',
copy: '',
stackName: 'HDP',
stackVersion: '2.3'
});
});
it('should return configProperty', function() {
var subSection = Em.Object.create({configProperties: []});
var subSectionTab = Em.Object.create({configProperties: []});
expect(App.themesMapper.getConfigByAttributes({}, configLink, subSection, subSectionTab, 'S1')).to.be.eql({
id: 'bar__foo',
isRequiredByAgent: false,
showLabel: false,
isOverridable: false,
recommendedValue: true,
name: 'bar',
isUserProperty: false,
filename: 'foo.xml',
fileName: 'foo.xml',
isNotSaved: false,
serviceName: 'S1',
copy: '',
stackName: 'HDP',
stackVersion: '2.3'
});
});
it('should add config to SubSection properties', function() {
var subSection = Em.Object.create({configProperties: []});
var subSectionTab = Em.Object.create({configProperties: []});
App.themesMapper.getConfigByAttributes({}, configLink, subSection, subSectionTab, 'S1');
expect(subSection.get('configProperties')).to.be.eql(['bar__foo']);
});
});
});