blob: 56f7c8bb03834e47e12f4763c5863a743386d5c2 [file] [log] [blame]
Matteo Scandolobe9b13d2016-01-21 11:21:03 -08001'use strict';
2
Matteo Scandolo89276392016-01-22 16:36:34 -08003describe('The Service Relation Service', () => {
Matteo Scandolobe9b13d2016-01-21 11:21:03 -08004
Matteo Scandolo89276392016-01-22 16:36:34 -08005 var Service;
Matteo Scandolobe9b13d2016-01-21 11:21:03 -08006
7 beforeEach(module('xos.serviceTopology'));
8 beforeEach(module('templates'));
9
Matteo Scandolo89276392016-01-22 16:36:34 -080010 // inject the cartService
11 beforeEach(inject(function (_ServiceRelation_) {
12 // The injector unwraps the underscores (_) from around the parameter names when matching
13 Service = _ServiceRelation_;
Matteo Scandolobe9b13d2016-01-21 11:21:03 -080014 }));
15
Matteo Scandolo89276392016-01-22 16:36:34 -080016 describe('given a service', () => {
17
18 const levelRelations = [
19 {
20 subscriber_service: 1
21 },
22 {
23 subscriber_service: 1
24 },
25 {
26 subscriber_service: 2
27 }
28 ];
29
30 it('should find all involved relations', () => {
31 expect(typeof Service.findLevelRelation).toBe('function');
32 let levelRelation = Service.findLevelRelation(levelRelations, 1);
33 expect(levelRelation.length).toBe(2);
34 });
Matteo Scandolobe9b13d2016-01-21 11:21:03 -080035 });
36
Matteo Scandolo89276392016-01-22 16:36:34 -080037 describe('given a set of relation', () => {
38
39 const levelRelations = [
40 {
Matteo Scandolo998e4652016-01-28 12:02:57 -080041 provider_service: 1,
42 service_specific_attribute: '{"instance_id": "instance1"}',
43 subscriber_tenant: 2
Matteo Scandolo89276392016-01-22 16:36:34 -080044 },
45 {
46 provider_service: 2
47 }
48 ];
49
50 const services = [
51 {
52 id: 1
53 },
54 {
55 id: 2
56 },
57 {
58 id: 3
59 }
60 ];
61
62 it('should find all the provider service', () => {
63 expect(typeof Service.findLevelServices).toBe('function');
64 let levelServices = Service.findLevelServices(levelRelations, services);
65 expect(levelServices.length).toBe(2);
66 });
Matteo Scandolo998e4652016-01-28 12:02:57 -080067
68 it('should retrieve all service specific information', () => {
69 let info = Service.findSpecificInformation(levelRelations, 1);
70 expect(info.instance_id).toBe('instance1');
71 });
Matteo Scandolo89276392016-01-22 16:36:34 -080072 });
73
Matteo Scandolo998e4652016-01-28 12:02:57 -080074
75
Matteo Scandolo89276392016-01-22 16:36:34 -080076 describe('given a list of services and a list of relations', () => {
77
78 const services = [
79 {
80 id: 1,
81 humanReadableName: 'service-1'
82 },
83 {
84 id: 2,
85 humanReadableName: 'service-2'
86 },
87 {
88 id: 3,
89 humanReadableName: 'service-3'
90 },
91 {
92 id: 4,
93 humanReadableName: 'service-4'
94 }
95 ];
96
97 const relations = [
98 {
99 provider_service: 2,
100 subscriber_service: 1,
101 },
102 {
103 provider_service: 3,
104 subscriber_service: 2
105 },
106 {
107 provider_service: 4,
108 subscriber_service: 1
109 },
110 {
111 subscriber_root: 1,
112 provider_service: 1
113 }
114 ];
115
116 it('should return a tree ordered by relations', () => {
117 let tree = Service.buildServiceTree(services, relations);
118
119 expect(tree.name).toBe('fakeSubs');
120 expect(tree.parent).toBeNull();
121 expect(tree.children.length).toBe(1);
122
123 expect(tree.children[0].name).toBe('service-1');
124 expect(tree.children[0].parent).toBeNull();
125 expect(tree.children[0].children.length).toBe(2);
126
127 expect(tree.children[0].children[0].name).toBe('service-2');
128 expect(tree.children[0].children[0].children[0].name).toBe('service-3');
Matteo Scandolofb46f5b2016-01-25 10:10:38 -0800129 expect(tree.children[0].children[0].children[0].children[0].name).toBe('Internet');
Matteo Scandolo89276392016-01-22 16:36:34 -0800130
131 expect(tree.children[0].children[1].name).toBe('service-4');
Matteo Scandolofb46f5b2016-01-25 10:10:38 -0800132 expect(tree.children[0].children[1].children[0].name).toBe('Internet');
133 });
134 });
135
136 describe('given an object', () => {
137
138 const sample = {
139 name: '1',
140 children: [
141 {
142 name: '2',
143 children: [
144 {
145 name: '3'
146 }
147 ]
148 }
149 ]
150 };
151
152 it('should return the depth', () => {
153 expect(Service.depthOf(sample)).toBe(3);
Matteo Scandolo89276392016-01-22 16:36:34 -0800154 });
155 });
156
Matteo Scandoloc86b4c12016-01-25 17:36:08 -0800157 describe('given slices and instances', () => {
158 const slices = [
159 {
160 id: 12,
161 name: 'First'
162 },
163 {
164 id: 13,
165 name: 'Second'
166 }
167 ];
168
169 const instances = [
170 [
171 {
Matteo Scandolo998e4652016-01-28 12:02:57 -0800172 humanReadableName: 'first-slice-instance-1',
173 id: 1
Matteo Scandoloc86b4c12016-01-25 17:36:08 -0800174 },
175 {
Matteo Scandolo998e4652016-01-28 12:02:57 -0800176 humanReadableName: 'first-slice-instance-2',
177 id: 2
Matteo Scandoloc86b4c12016-01-25 17:36:08 -0800178 }
179 ],
180 [
181 {
Matteo Scandolo998e4652016-01-28 12:02:57 -0800182 humanReadableName: 'second-slice-instance',
183 id: 3
Matteo Scandoloc86b4c12016-01-25 17:36:08 -0800184 }
185 ]
186 ];
187
Matteo Scandolo998e4652016-01-28 12:02:57 -0800188 const service = {
189 service_specific_attribute: {
190 instance_id: 1
191 }
192 };
193
Matteo Scandoloc86b4c12016-01-25 17:36:08 -0800194 it('should create a tree grouping instances', () => {
Matteo Scandolo998e4652016-01-28 12:02:57 -0800195 const res = Service.buildServiceInterfacesTree(service, slices, instances);
Matteo Scandoloc86b4c12016-01-25 17:36:08 -0800196
197 expect(res[0].name).toBe('First');
198 expect(res[0].children[0].name).toBe('first-slice-instance-1');
Matteo Scandolo998e4652016-01-28 12:02:57 -0800199 expect(res[0].children[0].active).toBeTruthy();
Matteo Scandoloc86b4c12016-01-25 17:36:08 -0800200 expect(res[0].children[1].name).toBe('first-slice-instance-2');
201
202 expect(res[1].name).toBe('Second');
203 expect(res[1].children[0].name).toBe('second-slice-instance');
204 });
205 });
206
Matteo Scandolo89276392016-01-22 16:36:34 -0800207
Matteo Scandolobe9b13d2016-01-21 11:21:03 -0800208});