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