horizon/horizon/static/framework/widgets/metadata-tree/metadata-tree.spec.js

190 lines
7.1 KiB
JavaScript

(function(){
'use strict';
describe('hz.widget.metadata-tree module', function() {
it('should have been defined', function () {
expect(angular.module('hz.widget.metadata-tree')).toBeDefined();
});
var namespaces = [
{
"display_name": "Test Namespace A",
"description": "Test namespace description",
"properties": {
"test:A:1": {
"title": "Test A.1 - string",
"type": "string",
"default": "foo",
"enum": [
"option-1", "option-2", "option-3"
]
},
"test:A:2": {
"title": "Test A.2 - integer",
"type": "integer",
"default": "1",
"minimum": 0,
"maximum": 10
},
"test:A:3": {
"title": "Test A.3 - number",
"type": "number",
"default": "1.1",
"minimum": 0,
"maximum": 10
},
"test:A:4": {
"title": "Test A.4 - boolean",
"type": "boolean",
"default": "True"
},
"test:A:5": {
"title": "Test A.5 - boolean",
"type": "boolean",
"default": "false"
},
"test:A:6": {
"title": "Test A.6 - array",
"type": "array",
"items": {
"type": "string",
"enum": [
"val-1", "val-2", "val-3", "val-4"
]
},
"default": "<in> val-2,val-3"
}
}
},
{
"display_name": "Test Namespace B",
"description": "Test namespace description",
"objects": [
{
"name": "Test Object A",
"description": "Test object description",
"properties": {
"test:B:A:1": {
"title": "Test B.A.1",
"description": "Test description"
},
"test:B:A:2": {}
}
},
{
"name": "Test Object B",
"description": "Test object description",
"properties": {
"test:B:B:1": {},
"test:B:B:2": {}
}
}
]
}
];
describe('directives', function () {
var $scope, $element;
beforeEach(module('templates'));
beforeEach(module('hz'));
beforeEach(module('horizon.framework.widgets'));
beforeEach(module('hz.widget.metadata-tree'));
describe('hzMetadataTree directive', function() {
beforeEach(inject(function ($injector) {
var $compile = $injector.get('$compile');
$scope = $injector.get('$rootScope').$new();
$scope.available = namespaces;
$scope.existing = {'test:B:A:1':'foo'};
var markup =
'<hz-metadata-tree available="available" existing="existing"></hz-metadata-tree>';
$element = angular.element(markup);
$compile($element)($scope);
$scope.$digest();
}));
it('should have 2 rows in available list', function() {
expect($element.find('ul.list-group:first li[ng-repeat]').length).toBe(2);
});
it('should have 1 row in existing list', function() {
expect($element.find('ul.list-group:last li[ng-repeat]').length).toBe(1);
expect($element.find('ul.list-group:last li[ng-repeat]:first').scope().item.leaf.name).toBe('test:B:A:1');
expect($element.find('ul.list-group:last li[ng-repeat]:first').scope().item.leaf.value).toBe('foo');
});
it('should have 10 rows in available list when expanded items', function() {
$element.find('ul.list-group:first li[ng-repeat]:first').trigger('click');
$element.find('ul.list-group:first li[ng-repeat]:last').trigger('click');
expect($element.find('ul.list-group:first li[ng-repeat]').length).toBe(10);
});
it('should remove item from available and add it in existing list when added', function() {
$element.find('ul.list-group:first li[ng-repeat]:last').trigger('click');
$element.find('ul.list-group:first li[ng-repeat]:last').trigger('click');
expect($element.find('ul.list-group:first li[ng-repeat]').length).toBe(6);
$element.find('ul.list-group:first li[ng-repeat]:last .btn').trigger('click');
expect($element.find('ul.list-group:first li[ng-repeat]').length).toBe(5);
expect($element.find('ul.list-group:last li[ng-repeat]').length).toBe(2);
expect($element.find('ul.list-group:last li[ng-repeat].active').scope().item.leaf.name).toBe('test:B:B:2');
});
it('should add item to available and remove it from existing list when removed', function() {
$element.find('ul.list-group:last li[ng-repeat]:first .btn').trigger('click');
expect($element.find('ul.list-group:first li[ng-repeat]').length).toBe(6);
expect($element.find('ul.list-group:last li[ng-repeat]').length).toBe(0);
expect($element.find('ul.list-group:first li[ng-repeat].active').scope().item.leaf.name).toBe('test:B:A:1');
});
it('should add custom item to existing list', function() {
$element.find('ul.list-group:first li:first input').val('custom').trigger('input');
$element.find('ul.list-group:first li:first .btn').trigger('click');
expect($element.find('ul.list-group:last li[ng-repeat]').length).toBe(2);
expect($element.find('ul.list-group:last li[ng-repeat].active').scope().item.leaf.name).toBe('custom');
});
});
describe('hzMetadataTreeItem directive', function() {
var $scope, $element, item;
beforeEach(inject(function ($injector) {
var $compile = $injector.get('$compile');
$scope = $injector.get('$rootScope').$new();
item = new ($injector.get('metadataTreeService').Item)();
$scope.item = item.fromProperty('test', namespaces[0].properties['test:A:6']);
var markup =
'<hz-metadata-tree-item item="item" text="text" action=""></hz-metadata-tree-item>';
$element = angular.element(markup);
$compile($element)($scope);
$scope.$digest();
}));
it('should have additional methods for array ', function () {
expect($element.isolateScope().opened).toBe(false);
expect($element.isolateScope().add).toBeDefined();
expect($element.isolateScope().remove).toBeDefined();
expect($element.isolateScope().open).toBeDefined();
});
it('should add values to array ', function () {
$element.find('.options li:last').trigger('click');
expect(item.leaf.getValue()).toBe('<in> val-2,val-3,val-4');
$element.find('.options li:first').trigger('click');
expect(item.leaf.getValue()).toBe('<in> val-1,val-2,val-3,val-4');
});
it('should remove value from array ', function () {
$element.find('.values .label:first').trigger('click');
expect(item.leaf.getValue()).toBe('<in> val-3');
});
});
});
});
})();