horizon/horizon/static/framework/conf/resource-type-registry.serv...

308 lines
11 KiB
JavaScript

/*
* (c) Copyright 2015 Hewlett-Packard Development Company, L.P.
*
* 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('resource type service', function() {
var service;
beforeEach(module('horizon.framework.conf'));
beforeEach(module(function($provide) {
$provide.value('horizon.framework.util.extensible.service', angular.noop);
}));
beforeEach(inject(function($injector) {
service = $injector.get('horizon.framework.conf.resource-type-registry.service');
}));
it('exists', function() {
expect(service).toBeDefined();
});
it('establishes detailsViews on a resourceType object', function() {
expect(service.getResourceType('something').detailsViews).toBeDefined();
});
it('establishes filterFacets on a resourceType object', function() {
expect(service.getResourceType('something').filterFacets).toBeDefined();
});
describe('getResourceType', function() {
it('returns a new resource type object even without a config', function() {
var value = service.getResourceType('something');
expect(value).toBeDefined();
});
it('returns a new resource type object', function() {
var value = service.getResourceType('something');
expect(value).toBeDefined();
});
it('has an setProperty function', function() {
var value = service.getResourceType('something');
expect(value.setProperty).toBeDefined();
});
it('can be called multiple times', function() {
var value = service.getResourceType('something');
var value2 = service.getResourceType('something');
expect(value).toBe(value2);
});
});
it('get/setDefaultDetailsTemplateUrl sets/retrieves a URL', function() {
service.setDefaultDetailsTemplateUrl('/my/path.html');
expect(service.getDefaultDetailsTemplateUrl()).toBe('/my/path.html');
});
it('get/setDefaultSummaryTemplateUrl sets/retrieves a URL', function() {
service.setDefaultSummaryTemplateUrl('/my/path.html');
expect(service.getDefaultSummaryTemplateUrl()).toBe('/my/path.html');
});
describe('label', function() {
var label;
beforeEach(function() {
var properties = {
id: 'eyedee',
bd: { label: 'beedee' }
};
var value = service.getResourceType('something', {})
.setProperty('example', {label: gettext("Example")})
.setProperty('bad_example', {})
.setProperties(properties);
label = value.label;
});
it('returns the property name if there is no such property', function() {
expect(label('not_exist')).toBe('not_exist');
});
it('returns the property name if there is no such property label', function() {
expect(label('bad_example')).toBe('bad_example');
});
it('returns the nice label if there is one', function() {
expect(label('example')).toBe('Example');
});
it('returns the properties set via the properties descriptor', function() {
expect(label('id')).toBe('eyedee');
expect(label('bd')).toBe('beedee');
});
});
describe('getName', function() {
it('returns nothing if names not provided', function() {
var type = service.getResourceType('something');
expect(type.getName(2)).toBeUndefined();
});
it('returns plural if count not provided', function() {
var type = service.getResourceType('something')
.setNames('Name', 'Names');
expect(type.getName()).toBe('Names');
});
it('returns singular if given one', function() {
var type = service.getResourceType('something')
.setNames("Image", "Images");
expect(type.getName(1)).toBe('Image');
});
it('returns plural if given two', function() {
var type = service.getResourceType('something')
.setNames("Image", "Images");
expect(type.getName(2)).toBe('Images');
});
});
it('manages the tableColumns', function() {
var type = service.getResourceType('something');
type.tableColumns.push({id: "im-an-id"});
type.tableColumns.push({title: "im-a-title"});
expect(type.getTableColumns()).toEqual([{id: "im-an-id", title: "im-an-id"},
{title: "im-a-title"}]);
});
it('places property .values and .filters on table', function() {
var type = service.getResourceType('something');
var func = angular.noop;
type.setProperty('im-an-id', {filters: [func], values: {a: 'apple'}});
type.tableColumns.push({id: "im-an-id"});
expect(type.getTableColumns()[0].filters).toEqual([func]);
expect(type.getTableColumns()[0].values).toEqual({a: 'apple'});
});
it('getProperties returns a copy of the properties', function() {
var type = service.getResourceType('something');
type.setProperty('im-an-id', {values: {a: 'apple'}});
expect(type.getProperties()['im-an-id']).toEqual({values: {a: 'apple'}});
});
it('manages the globalActions', function() {
var typeA = service.getResourceType('a');
var typeB = service.getResourceType('b');
typeA.globalActions.push({id: "action-a"});
typeB.globalActions.push({id: "action-b"});
expect(service.getGlobalActions()).toEqual([{id: "action-a"}, {id: "action-b"}]);
});
describe('functions the resourceType object', function() {
var type;
beforeEach(function() {
type = service.getResourceType('something');
});
it('initActions calls initAction on item and batch actions', function () {
var action = {service: {initAction: angular.noop}};
spyOn(action.service, 'initAction');
type.batchActions.push(action);
type.initActions({
'$new': function () {
return 4;
}
});
expect(action.service.initAction).toHaveBeenCalled();
});
it('initActions ignores initAction when not present', function () {
var action = {service: {}};
type.batchActions.push(action);
var returned = type.initActions({});
// but we got here
expect(returned).toBeUndefined();
});
it("sets a default path generator", function() {
expect(type.path({id: 'hello'})).toBe('hello');
});
it("default load function returns a promise", function() {
function load() {
return 'here be a promise';
}
type.setLoadFunction(load);
expect(type.load()).toBeDefined();
expect(type.load()).toBe('here be a promise');
});
it("allows setting a list function", function() {
function list() {
return 'this would be a promise';
}
type.setListFunction(list);
expect(type.list()).toBe('this would be a promise');
});
it("has a default isInTransition function that returns false", function() {
expect(type.itemInTransitionFunction()).toBe(false);
});
it("allows setting an isInTransition function", function() {
function isInTransitionTest() {
return "would return a boolean";
}
type.setItemInTransitionFunction(isInTransitionTest);
expect(type.itemInTransitionFunction()).toBe("would return a boolean");
});
it("allows setting of a summary template URL", function() {
type.setSummaryTemplateUrl('/my/path.html');
expect(type.summaryTemplateUrl).toBe('/my/path.html');
expect(type.setSummaryTemplateUrl('/what')).toBe(type);
});
it('itemName defaults to returning the name of an item', function() {
var item = {name: 'MegaMan'};
expect(type.itemName(item)).toBe('MegaMan');
});
it('setItemNameFunction supplies a function for interpreting names', function() {
var item = {name: 'MegaMan'};
var func = function(x) { return 'Mr. ' + x.name; };
type.setItemNameFunction(func);
expect(type.itemName(item)).toBe('Mr. MegaMan');
});
it("pathParser defaults to using the full path as the id", function() {
expect(type.parsePath('abcd')).toBe('abcd');
});
it("setPathParser sets the function for parsing the path", function() {
var func = function(x) {
var y = x.split('/');
return {poolId: y[0], memberId: y[1]};
};
var expected = {poolId: '12', memberId: '42'};
type.setPathParser(func);
expect(type.parsePath('12/42')).toEqual(expected);
});
it("pathParser defaults to using the full path as the id", function() {
expect(type.parsePath('abcd')).toBe('abcd');
});
it("setPathParser sets the function for parsing the path", function() {
var func = function(x) {
var y = x.split('/');
return {poolId: y[0], memberId: y[1]};
};
var expected = {poolId: '12', memberId: '42'};
type.setPathParser(func);
expect(type.parsePath('12/42')).toEqual(expected);
});
it('setPathGenerator sets the path identifier generator', function() {
var func = function(x) {
return x.poolId + '/' + x.memberId;
};
type.setPathGenerator(func);
var item = {poolId: '12', memberId: '42'};
expect(type.path(item)).toBe('12/42');
});
it('setLoadFunction sets the function used by "load"', function() {
var api = {
loadMe: function() { return {an: 'object'}; }
};
type.setLoadFunction(api.loadMe);
expect(type.load()).toEqual({an: 'object'});
});
it('detects that a load function has not been set', function() {
expect(type.isLoadFunctionSet()).toEqual(false);
});
it('detects that a load function has been set', function() {
type.setLoadFunction(angular.noop);
expect(type.isLoadFunctionSet()).toEqual(true);
});
it('detects that a list function has not been set', function() {
expect(type.isListFunctionSet()).toEqual(false);
});
it('detects that a list function has been set', function() {
type.setListFunction(angular.noop);
expect(type.isListFunctionSet()).toEqual(true);
});
});
});
})();