heat-dashboard/heat_dashboard/static/dashboard/project/heat_dashboard/template_generator/js/components/vis-network.controller.spec.js

204 lines
8.2 KiB
JavaScript

(function() {
'use strict';
describe('horizon.dashboard.project.heat_dashboard.template_generator.VisController', function(){
beforeEach(module('horizon.dashboard.project.heat_dashboard.template_generator'));
var $controller, controller, $scope, $rootScope, hotgenGlobals, hotgenStates;
beforeEach(inject(function($injector){
hotgenGlobals = $injector.get('hotgenGlobals');
hotgenStates = $injector.get('hotgenStates');
$rootScope = $injector.get('$rootScope');
spyOn($rootScope, '$broadcast');
}));
beforeEach(inject(function(_$controller_, $rootScope) {
$controller = _$controller_;
$scope = $rootScope.$new();
controller = $controller('horizon.dashboard.project.heat_dashboard.template_generator.VisController', { $scope: $scope,});
}));
it('should exist', function(){
expect(controller).toBeDefined();
});
it('check scope parameters', function(){
expect($scope.data.nodes.length).toEqual(0);
expect($scope.data.edges.length).toEqual(0);
expect($scope.options.autoResize).toEqual(true);
});
it('check $scope.get_node found', function(){
$scope.data.nodes.add({id: 'from_id'});
var returnValue = $scope.get_node('from_id');
expect(returnValue.id).toEqual('from_id');
});
it('check validate edge: invalid same node.', function(){
var data = {from: 'from_id', to: 'from_id'};
var returnValue = $scope.validate_edge(data);
expect(returnValue).toEqual(false);
});
it('check validate edge: connection allowed/ not allowed.', function(){
$scope.data.nodes.add({id: 'from_id', title: 'from_type'});
$scope.data.nodes.add({id: 'to_id', title: 'to_type'});
hotgenGlobals.update_edge_directions('from', {to: {}});
var data = {from: 'from_id', to: 'to_id'};
expect($scope.validate_edge(data)).toEqual(false);
hotgenGlobals.update_edge_directions('from_type', {to: {}});
expect($scope.validate_edge(data)).toEqual(false);
$scope.data.nodes.add({id: 'another_to_id', title: 'to_type'});
$scope.data.nodes.add({id: 'third_to_id', title: 'from_type'});
$scope.network = {getConnectedNodes: function(data){
return ['another_to_id', 'third_to_id'];
}}
hotgenGlobals.update_edge_directions('from_type', {to_type: {limit: 0}});
expect($scope.validate_edge(data)).toEqual(false);
hotgenGlobals.update_edge_directions('from_type', {to_type: {limit: 10, lonely: true}});
expect($scope.validate_edge(data)).toEqual(false);
hotgenGlobals.update_edge_directions('from_type', {to_type: {limit: 10, lonely: false, occupied: true}});
expect($scope.validate_edge(data)).toEqual(false);
hotgenGlobals.update_edge_directions('from_type', {to_type: {limit: 10, lonely: false, occupied: false}});
expect($scope.validate_edge(data)).toEqual(true);
$scope.data.nodes.update({id: 'third_to_id', title: 'another_type'});
hotgenGlobals.update_edge_directions('from_type', {to_type: {limit: 10, lonely: false, occupied: true}});
expect($scope.validate_edge(data)).toEqual(true);
});
it('manipulation.addEdge: valid to add edge', function(){
var addEdgeFunction = $scope.options.manipulation.addEdge;
var data = {from: 'from_id', to: 'to_id'};
var mockCallbackFunction = jasmine.createSpy().and.callFake(function() {return function(){}})
spyOn($scope, 'validate_edge').and.callFake(function(){return true});
addEdgeFunction(data, mockCallbackFunction);
expect(mockCallbackFunction).toHaveBeenCalledWith(data);
});
it('manipulation.addEdge: invalid to add edge', function(){
var addEdgeFunction = $scope.options.manipulation.addEdge;
var data = {from: 'from_id', to: 'to_id'};
var mockCallbackFunction = jasmine.createSpy().and.callFake(function() {return function(){}})
spyOn($scope, 'validate_edge').and.callFake(function(){return false});
addEdgeFunction(data, mockCallbackFunction);
expect(mockCallbackFunction).toHaveBeenCalledWith(null);
});
it('manipulation.deleteNode', function(){
var deleteNodeFunction = $scope.options.manipulation.deleteNode;
var data = {nodes: ['node_id'], edges:['edge_id']}
var mockCallbackFunction = jasmine.createSpy().and.callFake(function() {return function(){}})
deleteNodeFunction(data, mockCallbackFunction);
expect(mockCallbackFunction).toHaveBeenCalledWith(data);
});
it('manipulation.deleteEdge', function(){
$scope.data.nodes.add({id: 'from_id', title: 'from_type'});
$scope.data.nodes.add({id: 'to_id', title: 'to_type'});
$scope.data.edges.add({id: 'edge_id', from: 'from_id', to: 'to_id'});
var deleteEdgeFunction = $scope.options.manipulation.deleteEdge;
var data = {edges:['edge_id']}
var mockCallbackFunction = jasmine.createSpy().and.callFake(function() {return function(){}})
deleteEdgeFunction(data, mockCallbackFunction);
expect(mockCallbackFunction).toHaveBeenCalledWith(data);
});
it('click nothing', function(){
var param = {edges: [], nodes: []}
$scope.click(param);
expect($rootScope.$broadcast).not.toHaveBeenCalled();
});
it('click to show node dialog', function(){
$scope.data.nodes.add({id: 'from_id', title: 'from_type'});
var param = {edges: [], nodes: ['from_id']}
$scope.network = {disableEditMode: function(data){}}
$scope.click(param);
expect($rootScope.$broadcast).toHaveBeenCalledWith('handle_edit_node', 'from_type');
});
it('click to show edge dialog', function(){
$scope.data.nodes.add({id: 'from_id', title: 'from_type'});
$scope.data.nodes.add({id: 'to_id', title: 'to_type'});
$scope.data.edges.add({id: 'edge_id', from: 'from_id', to: 'to_id'});
var param = {edges:['edge_id'], nodes:[]}
$scope.network = {disableEditMode: function(data){}}
$scope.click(param);
var broadcast_param = {
from_type: 'from_type', to_type: 'to_type',
from_id: 'from_id', to_id: 'to_id',
};
expect($rootScope.$broadcast).toHaveBeenCalledWith('handle_edit_edge', broadcast_param);
});
it('events on load', function(){
var network = {}
spyOn(hotgenStates, 'set_network');
var onloadFunction = $scope.events.onload;
onloadFunction(network);
expect(hotgenStates.set_network).toHaveBeenCalledWith(network);
});
it('get_added_edge_id: find the extra item', function(){
var old_ids = [1 ,2 ,3, 4];
var new_ids = [1, 2, 5, 3, 4];
var find = $scope.get_added_edge_id(old_ids, new_ids);
expect(find).toEqual(5);
});
it('get mapping', function(){
hotgenGlobals.update_edge_directions('from_type', {to_type: {limit: 10}});
expect($scope.get_mapping('from_type', 'to_type').limit).toEqual(10);
expect($scope.get_mapping('from_type', 'to')).toEqual(false);
expect($scope.get_mapping('from', 'to')).toEqual(false);
});
it('get modal: found/not found', function(){
hotgenGlobals.update_edge_directions('from_type', {to_type: {limit: 10, modal: 'modal'}});
$scope.data.nodes.add({id: 'from_id', title: 'from_type'});
$scope.data.nodes.add({id: 'to_id', title: 'to_type'});
$scope.data.nodes.add({id: 'from', title: 'from'});
expect($scope.get_modal({from: 'from_id', to: 'to_id'})).toEqual('modal');
expect($scope.get_modal({from: 'from', to: 'to_id'})).toEqual(undefined);
})
});
})();