1 import {getTestBed, TestBed} from '@angular/core/testing';
5 InstantiationStatusComponentService,
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";
25 class MockAppStore<T> {
31 'FLAG_1902_NEW_VIEW_EDIT': true,
42 describe('Instantiation Status Service', () => {
44 let aaiService: AaiService;
45 let msoService: MsoService;
46 let service: InstantiationStatusComponentService;
49 beforeAll(done => (async () => {
50 TestBed.configureTestingModule({
52 HttpClientTestingModule,
56 InstantiationStatusComponentService,
60 {provide: NgRedux, useClass: MockAppStore}]
62 await TestBed.compileComponents();
64 injector = getTestBed();
65 aaiService = injector.get(AaiService);
66 msoService = injector.get(MsoService);
67 service = injector.get(InstantiationStatusComponentService);
69 })().then(done).catch(done.fail));
71 test('generateServiceInfoDataMapping should return mapping of arrays', () => {
72 let data : ServiceInfoModel[] = generateServiceInfoData();
73 let result = service.generateServiceInfoDataMapping(data);
75 expect(result['1']).toBeDefined();
76 expect(result['2']).toBeDefined();
77 expect(result['3']).toBeDefined();
79 expect(result['1'].length).toEqual(2);
80 expect(result['2'].length).toEqual(2);
81 expect(result['3'].length).toEqual(1);
84 test('generateServiceInfoDataMapping if array is empty should return empty object', () => {
85 let result = service.generateServiceInfoDataMapping([]);
87 expect(result['1']).not.toBeDefined();
88 expect(result['2']).not.toBeDefined();
89 expect(result['3']).not.toBeDefined();
92 test('convertObjectToArray', () => {
94 jest.spyOn(service, 'convertObjectToArray').mockReturnValue(
98 let data : ServiceInfoModel[] = generateServiceInfoData();
99 service.convertObjectToArray(data).subscribe((result) => {
100 expect(result).toBeDefined();
104 test('click on "Open" button should open new view edit' , ()=>{
106 serviceModelId : 'serviceModelId',
107 serviceInstanceId : 'serviceInstanceId',
108 serviceType : 'serviceType',
109 subscriberId : 'subscriberId'
111 let params:UrlTree = service.getNewViewEditUrlTree(<any>item, DrawingBoardModes.VIEW);
112 expect(params.toString().startsWith('/servicePlanning/VIEW')).toBeTruthy();
113 expect(params.queryParams).toEqual(
115 serviceModelId: item.serviceModelId,
116 serviceInstanceId: item.serviceInstanceId,
117 serviceType : item.serviceType,
118 subscriberId : item.subscriberId
122 test('build the View Edit url' , ()=>{
124 serviceModelId : '28aeb8f6-5620-4148-8bfb-a5fb406f0309',
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);
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"',
145 test(`getStatusTooltip should return status popover: status=${status}`, () => {
146 expect(service.getStatus(status).tooltip).toEqual(tooltip);
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);
157 test('getStatusTooltip should return correct icon per job status', () => {
158 let result : ServiceStatus = service.getStatus('pending');
159 expect(result.iconClassName).toEqual(PENDING);
161 result = service.getStatus('IN_PROGRESS');
162 expect(result.iconClassName).toEqual(INPROGRESS);
164 result = service.getStatus('PAUSED');
165 expect(result.iconClassName).toEqual(PAUSE);
167 result = service.getStatus('FAILED');
168 expect(result.iconClassName).toEqual(X_O);
170 result = service.getStatus('COMPLETED');
171 expect(result.iconClassName).toEqual(SUCCESS_CIRCLE);
173 result = service.getStatus('STOPPED');
174 expect(result.iconClassName).toEqual(STOPPED);
176 result = service.getStatus('COMPLETED_WITH_ERRORS');
177 expect(result.iconClassName).toEqual(COMPLETED_WITH_ERRORS);
179 result = service.getStatus('UNEXPECTED_RANDOM_STATUS');
180 expect(result.iconClassName).toEqual(UNKNOWN);
182 result = service.getStatus(undefined);
183 expect(result.iconClassName).toEqual(UNKNOWN);
186 function generateServiceInfoData(){
187 return JSON.parse(JSON.stringify([
189 "created": 1519956533000,
190 "modified": 1521727738000,
196 "jobId": "6748648484",
198 "jobStatus": "FAILED",
200 "owningEntityId": "1234",
201 "owningEntityName": 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,
222 "created": 1519956533000,
223 "modified": 1521727738000,
229 "jobId": "6748648484",
231 "jobStatus": "FAILED",
233 "owningEntityId": "1234",
234 "owningEntityName": 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,
255 "created": 1519956533000,
256 "modified": 1521727738000,
262 "jobId": "6748648484",
264 "jobStatus": "FAILED",
266 "owningEntityId": "1234",
267 "owningEntityName": 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,
288 "created": 1519956533000,
289 "modified": 1521727738000,
295 "jobId": "6748648484",
297 "jobStatus": "FAILED",
299 "owningEntityId": "1234",
300 "owningEntityName": 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,
321 "created": 1519956533000,
322 "modified": 1521727738000,
328 "jobId": "6748648484",
330 "jobStatus": "FAILED",
332 "owningEntityId": "1234",
333 "owningEntityName": 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,