Merge "add to AAI headers in request and metric log"
[vid.git] / vid-webpack-master / src / app / instantiationStatus / instantiationStatus.component.service.spec.ts
1 import {getTestBed, TestBed} from '@angular/core/testing';
2 import {
3   COMPLETED_WITH_ERRORS,
4   INPROGRESS,
5   InstantiationStatusComponentService,
6   PAUSE,
7   PENDING,
8   ServiceStatus,
9   STOPPED,
10   SUCCESS_CIRCLE,
11   UNKNOWN,
12   X_O
13 } from './instantiationStatus.component.service';
14 import {ServiceInfoModel} from '../shared/server/serviceInfo/serviceInfo.model';
15 import {AaiService} from "../shared/services/aaiService/aai.service";
16 import {MsoService} from "../shared/services/msoService/mso.service";
17 import {NgRedux} from "@angular-redux/store";
18 import {HttpClientTestingModule} from "@angular/common/http/testing";
19 import {FeatureFlagsService} from "../shared/services/featureFlag/feature-flags.service";
20 import {DrawingBoardModes} from "../drawingBoard/service-planning/drawing-board.modes";
21 import {RouterTestingModule} from "@angular/router/testing";
22 import {of} from "rxjs";
23 import {UrlTree} from "@angular/router";
24
25 class MockAppStore<T> {
26
27   getState() {
28     return {
29       global: {
30         flags: {
31           'FLAG_1902_NEW_VIEW_EDIT': true,
32
33         }
34       }
35     }
36   }
37
38   dispatch() {
39
40   }
41 }
42 describe('Instantiation Status Service', () => {
43   let injector;
44   let aaiService: AaiService;
45   let msoService: MsoService;
46   let service: InstantiationStatusComponentService;
47
48
49   beforeAll(done => (async () => {
50     TestBed.configureTestingModule({
51       imports: [
52         HttpClientTestingModule,
53         RouterTestingModule,
54       ],
55       providers: [
56         InstantiationStatusComponentService,
57         AaiService,
58         MsoService,
59         FeatureFlagsService,
60         {provide: NgRedux, useClass: MockAppStore}]
61     });
62     await TestBed.compileComponents();
63
64     injector = getTestBed();
65     aaiService = injector.get(AaiService);
66     msoService = injector.get(MsoService);
67     service = injector.get(InstantiationStatusComponentService);
68
69   })().then(done).catch(done.fail));
70
71   test('generateServiceInfoDataMapping should return mapping of arrays', () => {
72     let data : ServiceInfoModel[] = generateServiceInfoData();
73     let result = service.generateServiceInfoDataMapping(data);
74
75     expect(result['1']).toBeDefined();
76     expect(result['2']).toBeDefined();
77     expect(result['3']).toBeDefined();
78
79     expect(result['1'].length).toEqual(2);
80     expect(result['2'].length).toEqual(2);
81     expect(result['3'].length).toEqual(1);
82   });
83
84   test('generateServiceInfoDataMapping if array is empty  should return empty object', () => {
85     let result = service.generateServiceInfoDataMapping([]);
86
87     expect(result['1']).not.toBeDefined();
88     expect(result['2']).not.toBeDefined();
89     expect(result['3']).not.toBeDefined();
90   });
91
92   test('convertObjectToArray', () => {
93
94     jest.spyOn(service, 'convertObjectToArray').mockReturnValue(
95       of([])
96     );
97
98     let data : ServiceInfoModel[] = generateServiceInfoData();
99     service.convertObjectToArray(data).subscribe((result) => {
100       expect(result).toBeDefined();
101     });
102   });
103
104   test('click on "Open" button should open new view edit' , ()=>{
105     const item = {
106       serviceModelId : 'serviceModelId',
107       serviceInstanceId : 'serviceInstanceId',
108       serviceType : 'serviceType',
109       subscriberId : 'subscriberId'
110     };
111     let params:UrlTree = service.getNewViewEditUrlTree(<any>item, DrawingBoardModes.VIEW);
112     expect(params.toString().startsWith('/servicePlanning/VIEW')).toBeTruthy();
113     expect(params.queryParams).toEqual(
114       {
115         serviceModelId: item.serviceModelId,
116         serviceInstanceId: item.serviceInstanceId,
117         serviceType : item.serviceType,
118         subscriberId : item.subscriberId
119       });
120   });
121
122   test('build the View Edit url' , ()=>{
123     const item = {
124       serviceModelId : '28aeb8f6-5620-4148-8bfb-a5fb406f0309',
125     };
126     let serviceModelUrl: string = '/servicePlanning/EDIT?serviceModelId=28aeb8f6-5620-4148-8bfb-a5fb406f0309';
127     let suffix:string = '../../serviceModels.htm#';
128     let tree:UrlTree = service.getNewViewEditUrlTree(<any>item, DrawingBoardModes.EDIT);
129     let result = service.getViewEditUrl(tree);
130     expect (suffix + serviceModelUrl).toEqual(result);
131   });
132
133   for (let [status, tooltip] of Object.entries({
134     'pending': 'Pending: The action required will be sent as soon as possible.',
135     'IN_PROGRESS': 'In-progress: the service is in process of the action required.',
136     'PAUSED': 'Paused: Service has paused and waiting for your action.\n Select actions from the menu to the right.',
137     'FAILED': 'Failed: All planned actions have failed.',
138     'COMPLETED': 'Completed successfully: Service is successfully instantiated, updated or deleted.',
139     'STOPPED': 'Stopped: Due to previous failure, will not be instantiated.',
140     'StOpPeD': 'Stopped: Due to previous failure, will not be instantiated.',
141     'COMPLETED_WITH_ERRORS': 'Completed with errors: some of the planned actions where successfully committed while other have not.\n Open the service to check it out.',
142     'UNEXPECTED_RANDOM_STATUS': 'Unexpected status: "UNEXPECTED_RANDOM_STATUS"',
143   })) {
144
145     test(`getStatusTooltip should return status popover: status=${status}`, () => {
146       expect(service.getStatus(status).tooltip).toEqual(tooltip);
147     });
148
149   }
150
151   test(`service.getStatus should handle undefined status`, () => {
152     const statusResult = service.getStatus(undefined);
153     expect(statusResult.tooltip).toEqual('Unexpected status: "undefined"');
154     expect(statusResult.iconClassName).toEqual(UNKNOWN);
155   });
156
157   test('getStatusTooltip should return correct icon per job status', () => {
158     let result : ServiceStatus  = service.getStatus('pending');
159     expect(result.iconClassName).toEqual(PENDING);
160
161     result = service.getStatus('IN_PROGRESS');
162     expect(result.iconClassName).toEqual(INPROGRESS);
163
164     result = service.getStatus('PAUSED');
165     expect(result.iconClassName).toEqual(PAUSE);
166
167     result = service.getStatus('FAILED');
168     expect(result.iconClassName).toEqual(X_O);
169
170     result = service.getStatus('COMPLETED');
171     expect(result.iconClassName).toEqual(SUCCESS_CIRCLE);
172
173     result = service.getStatus('STOPPED');
174     expect(result.iconClassName).toEqual(STOPPED);
175
176     result = service.getStatus('COMPLETED_WITH_ERRORS');
177     expect(result.iconClassName).toEqual(COMPLETED_WITH_ERRORS);
178
179     result = service.getStatus('UNEXPECTED_RANDOM_STATUS');
180     expect(result.iconClassName).toEqual(UNKNOWN);
181
182     result = service.getStatus(undefined);
183     expect(result.iconClassName).toEqual(UNKNOWN);
184   });
185
186   function generateServiceInfoData(){
187     return JSON.parse(JSON.stringify([
188       {
189         "created": 1519956533000,
190         "modified": 1521727738000,
191         "createdId": null,
192         "modifiedId": null,
193         "rowNum": null,
194         "auditUserId": null,
195         "auditTrail": null,
196         "jobId": "6748648484",
197         "userId": "2222",
198         "jobStatus": "FAILED",
199         "pause": false,
200         "owningEntityId": "1234",
201         "owningEntityName": null,
202         "project": null,
203         "aicZoneId": null,
204         "aicZoneName": null,
205         "tenantId": null,
206         "tenantName": null,
207         "regionId": null,
208         "regionName": null,
209         "serviceType": null,
210         "subscriberName": null,
211         "serviceInstanceId": "1",
212         "serviceInstanceName": null,
213         "serviceModelId": null,
214         "serviceModelName": null,
215         "serviceModelVersion": null,
216         "createdBulkDate": 1519956533000,
217         "statusModifiedDate": 1520042933000,
218         "templateId": "1",
219         "hidden": false
220       },
221       {
222         "created": 1519956533000,
223         "modified": 1521727738000,
224         "createdId": null,
225         "modifiedId": null,
226         "rowNum": null,
227         "auditUserId": null,
228         "auditTrail": null,
229         "jobId": "6748648484",
230         "userId": "2222",
231         "jobStatus": "FAILED",
232         "pause": false,
233         "owningEntityId": "1234",
234         "owningEntityName": null,
235         "project": null,
236         "aicZoneId": null,
237         "aicZoneName": null,
238         "tenantId": null,
239         "tenantName": null,
240         "regionId": null,
241         "regionName": null,
242         "serviceType": null,
243         "subscriberName": null,
244         "serviceInstanceId": "1",
245         "serviceInstanceName": null,
246         "serviceModelId": null,
247         "serviceModelName": null,
248         "serviceModelVersion": null,
249         "createdBulkDate": 1519956533000,
250         "statusModifiedDate": 1520042933000,
251         "templateId": "1",
252         "hidden": false
253       },
254       {
255         "created": 1519956533000,
256         "modified": 1521727738000,
257         "createdId": null,
258         "modifiedId": null,
259         "rowNum": null,
260         "auditUserId": null,
261         "auditTrail": null,
262         "jobId": "6748648484",
263         "userId": "2222",
264         "jobStatus": "FAILED",
265         "pause": false,
266         "owningEntityId": "1234",
267         "owningEntityName": null,
268         "project": null,
269         "aicZoneId": null,
270         "aicZoneName": null,
271         "tenantId": null,
272         "tenantName": null,
273         "regionId": null,
274         "regionName": null,
275         "serviceType": null,
276         "subscriberName": null,
277         "serviceInstanceId": "2",
278         "serviceInstanceName": null,
279         "serviceModelId": null,
280         "serviceModelName": null,
281         "serviceModelVersion": null,
282         "createdBulkDate": 1519956533000,
283         "statusModifiedDate": 1520042933000,
284         "templateId": "2",
285         "hidden": false
286       },
287       {
288         "created": 1519956533000,
289         "modified": 1521727738000,
290         "createdId": null,
291         "modifiedId": null,
292         "rowNum": null,
293         "auditUserId": null,
294         "auditTrail": null,
295         "jobId": "6748648484",
296         "userId": "2222",
297         "jobStatus": "FAILED",
298         "pause": false,
299         "owningEntityId": "1234",
300         "owningEntityName": null,
301         "project": null,
302         "aicZoneId": null,
303         "aicZoneName": null,
304         "tenantId": null,
305         "tenantName": null,
306         "regionId": null,
307         "regionName": null,
308         "serviceType": null,
309         "subscriberName": null,
310         "serviceInstanceId": "2",
311         "serviceInstanceName": null,
312         "serviceModelId": null,
313         "serviceModelName": null,
314         "serviceModelVersion": null,
315         "createdBulkDate": 1519956533000,
316         "statusModifiedDate": 1520042933000,
317         "templateId": "2",
318         "hidden": false
319       },
320       {
321         "created": 1519956533000,
322         "modified": 1521727738000,
323         "createdId": null,
324         "modifiedId": null,
325         "rowNum": null,
326         "auditUserId": null,
327         "auditTrail": null,
328         "jobId": "6748648484",
329         "userId": "2222",
330         "jobStatus": "FAILED",
331         "pause": false,
332         "owningEntityId": "1234",
333         "owningEntityName": null,
334         "project": null,
335         "aicZoneId": null,
336         "aicZoneName": null,
337         "tenantId": null,
338         "tenantName": null,
339         "regionId": null,
340         "regionName": null,
341         "serviceType": null,
342         "subscriberName": null,
343         "serviceInstanceId": "3",
344         "serviceInstanceName": null,
345         "serviceModelId": null,
346         "serviceModelName": null,
347         "serviceModelVersion": null,
348         "createdBulkDate": 1519956533000,
349         "statusModifiedDate": 1520042933000,
350         "templateId": "3",
351         "hidden": false
352       }
353     ]));
354   }
355
356 });