Extend Modern UI for pnf usecase
[vid.git] / vid-webpack-master / src / app / shared / components / genericFormPopup / genericFormServices / pnf / pnf.popup.service.spec.ts
1 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
2 import {NgRedux} from "@angular-redux/store";
3 import {IframeService} from "../../../../utils/iframe.service";
4 import {VfModulePopupService} from "../vfModule/vfModule.popup.service";
5 import {FormBuilder} from "@angular/forms";
6 import {GenericFormService} from "../../../genericForm/generic-form.service";
7 import {BasicPopupService} from "../basic.popup.service";
8 import {AaiService} from "../../../../services/aaiService/aai.service";
9 import {LogService} from "../../../../utils/log/log.service";
10 import {HttpClient} from "@angular/common/http";
11 import {ControlGeneratorUtil} from "../../../genericForm/formControlsServices/control.generator.util.service";
12 import {PnfControlGenerator} from "../../../genericForm/formControlsServices/pnfGenerator/pnf.control.generator";
13 import {UUIDData} from "../../generic-form-popup.component";
14 import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
15 import {getTestBed, TestBed} from "@angular/core/testing";
16 import {VfModuleUpgradePopupService} from "../vfModuleUpgrade/vfModule.upgrade.popuop.service";
17 import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
18 import {PnfPopupService} from "../pnf/pnf.popup.service";
19 import {AppState} from "../../../../store/reducers";
20
21 class MockAppStore<T> {
22 }
23
24 class MockReduxStore<T> {
25   dispatch() {}
26   getState() {
27     return {
28       "global": {
29         "flags": {
30           "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
31           "FLAG_SHOW_ASSIGNMENTS": true,
32           "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
33           "FLAG_SHOW_VERIFY_SERVICE": false,
34           "FLAG_SERVICE_MODEL_CACHE": true,
35           "FLAG_ADD_MSO_TESTAPI_FIELD": true
36         }
37       },
38       "service": {
39         "serviceHierarchy": {
40           "serviceId": {
41             "service": {
42               "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
43               "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
44               "name": "action-data",
45               "version": "1.0",
46               "toscaModelURL": null,
47               "category": "Emanuel",
48               "serviceType": "",
49               "serviceRole": "",
50               "description": "action-data",
51               "serviceEcompNaming": "false",
52               "instantiationType": "Macro",
53               "vidNotions": {
54                 "instantiationType": "Macro"
55               },
56             },
57             "globalSubscriberId": "subscriberId",
58             "pnfs": {
59               "pnfInstanceV1": {
60                 "name": "pnfName",
61                 "pnfStoreKey": "pnfInstanceV1",
62                 "version": "1.0",
63                 "description": "PNF description",
64                 "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
65                 "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d"
66               },
67               "pnfInstanceV2": {
68                 "name": "pnfName2",
69                 "pnfStoreKey": "pnfInstanceV2"
70               }
71             },
72             "modelInfo": {
73               "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
74               "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
75               "modelName": "action-data",
76               "modelVersion": "1.0",
77               "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
78             },
79             "instanceName": "InstanceName",
80             "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
81             "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
82             "lcpCloudRegionId": "AAIAIC25",
83             "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
84             "aicZoneId": "JAG1",
85             "projectName": null,
86             "rollbackOnFailure": "true",
87             "aicZoneName": "YUDFJULP-JAG1",
88             "owningEntityName": "WayneHolland",
89             "testApi": "GR_API",
90             "tenantName": "USP-SIP-IC-24335-T-01",
91             "bulkSize": 1,
92             "isALaCarte": false,
93             "name": "action-data",
94             "version": "1.0",
95             "description": "",
96             "category": "",
97             "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
98             "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
99             "serviceType": "",
100             "serviceRole": "",
101             "isMultiStepDesign": false
102           }
103         },
104         "serviceInstance": {
105           "serviceId": {
106             "globalSubscriberId": "subscriberId",
107             "pnfs": {
108               "pnfInstanceV1": {
109                 "name": "pnfName",
110                 "pnfStoreKey": "pnfInstanceV1"
111               },
112               "pnfInstanceV2": {
113                 "name": "pnfName2",
114                 "pnfStoreKey": "pnfInstanceV2"
115               }
116             },
117             "modelInfo": {
118               "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
119               "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
120               "modelName": "action-data",
121               "modelVersion": "1.0",
122               "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
123             },
124             "instanceName": "InstanceName",
125             "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
126             "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
127             "lcpCloudRegionId": "AAIAIC25",
128             "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
129             "aicZoneId": "JAG1",
130             "projectName": null,
131             "rollbackOnFailure": "true",
132             "aicZoneName": "YUDFJULP-JAG1",
133             "owningEntityName": "WayneHolland",
134             "testApi": "GR_API",
135             "tenantName": "USP-SIP-IC-24335-T-01",
136             "bulkSize": 1,
137             "isALaCarte": false,
138             "name": "action-data",
139             "version": "1.0",
140             "description": "",
141             "category": "",
142             "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
143             "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
144             "serviceType": "",
145             "serviceRole": "",
146             "isMultiStepDesign": false
147           }
148         },
149         "subscribers": [
150           {
151             "id": "someSubscriberId",
152             "name": "someSubscriberName",
153             "isPermitted": true
154           },
155           {
156             "id": "subscriberId",
157             "name": "subscriberName",
158             "isPermitted": true
159           },
160           {
161             "id": "subscriberId2",
162             "name": "subscriberName2",
163             "isPermitted": true
164           }
165         ]
166       }
167     }
168   }
169 }
170
171 class MockFeatureFlagsService {
172 }
173
174 describe('pnf new popup service', () => {
175   let injector;
176   let service: PnfPopupService;
177   let store: NgRedux<AppState>;
178
179
180   beforeAll(done => (async () => {
181     TestBed.configureTestingModule({
182       providers: [
183         PnfPopupService,
184         DefaultDataGeneratorService,
185         GenericFormService,
186         FormBuilder,
187         IframeService,
188         {provide: FeatureFlagsService, useClass: MockFeatureFlagsService},
189         AaiService,
190         LogService,
191         BasicPopupService,
192         VfModulePopupService,
193         VfModuleUpgradePopupService,
194         ControlGeneratorUtil,
195         SharedControllersService,
196         PnfControlGenerator,
197         {provide: NgRedux, useClass: MockReduxStore},
198         {provide: HttpClient, useClass: MockAppStore},
199       ]
200     });
201     await TestBed.compileComponents();
202
203     injector = getTestBed();
204     store = injector.get(NgRedux);
205     service = injector.get(PnfPopupService);
206
207   })().then(done).catch(done.fail));
208
209   test('getGenericFormPopupDetails returns the FormPopupDetails object', () => {
210       const serviceId: string = 'serviceId';
211       const pnfModelName: string = 'pnfInstanceV2';
212       const pnfStoreKey: string = 'pnfInstanceV2';
213       let uuidData: UUIDData = <any>{
214         serviceId: "serviceId",
215         modelName: "pnfInstanceV2",
216         pnfStoreKey: "pnfInstanceV2"
217       };
218
219       const formPopupDetailsObject = service.getGenericFormPopupDetails(serviceId, pnfModelName, pnfStoreKey, null, uuidData, true);
220
221       expect(formPopupDetailsObject).toBeDefined();
222     }
223   );
224
225   test('getInstance with empty storekey should be created', () => {
226     const serviceId: string = 'serviceId';
227     const pnfModelName: string = 'pnfInstanceV1';
228
229     const newInstance = service.getInstance(serviceId, pnfModelName, null);
230
231     expect(newInstance).toBeDefined();
232     expect(newInstance.pnfStoreKey).toBeNull();
233   });
234
235   test('getInstance with not empty storekey should return existing instance with the same model name as store key', () => {
236     const serviceId: string = 'serviceId';
237     const pnfModelName: string = 'pnfInstanceV1';
238     const pnfStoreKey: string = 'pnfInstanceV2';
239
240     const newInstance = service.getInstance(serviceId, pnfModelName, pnfStoreKey);
241
242     expect(newInstance).toBeDefined();
243     expect(newInstance.pnfStoreKey).toEqual('pnfInstanceV2');
244   });
245
246   test('getModelInformation  pnf should update modelInformations', () => {
247     const serviceId: string = 'serviceId';
248     const pnfModelName: string = 'pnfInstanceV1';
249
250     service.getModelInformation(serviceId, pnfModelName);
251
252     expect(service.modelInformations.length).toEqual(14);
253
254     expect(service.modelInformations[0].label).toEqual("Subscriber Name");
255     expect(service.modelInformations[0].values).toEqual(['subscriberName']);
256
257     expect(service.modelInformations[1].label).toEqual("Service Name");
258     expect(service.modelInformations[1].values).toEqual(['action-data']);
259
260     expect(service.modelInformations[2].label).toEqual("Service Instance Name");
261     expect(service.modelInformations[2].values).toEqual(['InstanceName']);
262
263     expect(service.modelInformations[3].label).toEqual("Model Name");
264     expect(service.modelInformations[3].values).toEqual(['pnfName']);
265
266     expect(service.modelInformations[4].label).toEqual("Model version");
267     expect(service.modelInformations[4].values).toEqual(['1.0']);
268
269     expect(service.modelInformations[5].label).toEqual("Description");
270     expect(service.modelInformations[5].values).toEqual(['PNF description']);
271
272     expect(service.modelInformations[6].label).toEqual("Category");
273     expect(service.modelInformations[6].values).toEqual([undefined]);
274
275     expect(service.modelInformations[7].label).toEqual("Sub Category");
276     expect(service.modelInformations[7].values).toEqual([undefined]);
277
278     expect(service.modelInformations[8].label).toEqual("UUID");
279     expect(service.modelInformations[8].values).toEqual(['0903e1c0-8e03-4936-b5c2-260653b96413']);
280
281     expect(service.modelInformations[9].label).toEqual("Invariant UUID");
282     expect(service.modelInformations[9].values).toEqual(['00beb8f9-6d39-452f-816d-c709b9cbb87d']);
283
284     expect(service.modelInformations[10].label).toEqual("Service type");
285     expect(service.modelInformations[10].values).toEqual(['']);
286
287     expect(service.modelInformations[11].label).toEqual("Service role");
288     expect(service.modelInformations[11].values).toEqual(['']);
289
290     expect(service.modelInformations[12].label).toEqual("Minimum to instantiate");
291     expect(service.modelInformations[12].values).toEqual(['0']);
292
293     expect(service.modelInformations[13].label).toEqual("Maximum to instantiate");
294     expect(service.modelInformations[13].values).toEqual(['1']);
295   });
296
297   test('getSubLeftTitle new pnf popup should return service model name', () => {
298     service.uuidData = {
299       serviceId: 'serviceId',
300       modelName: 'pnfInstanceV1'
301     };
302     expect(service.getSubLeftTitle()).toBe("PNF MODEL: pnfName");
303   });
304
305   test('storePNF should dispatch createPNFInstance action when isUpdateMode is false', () => {
306     let mockedPopupService = getMockedPopupService(false);
307
308     spyOn(store, 'dispatch');
309     service.storePNF(mockedPopupService, {});
310
311     expect(store.dispatch).toHaveBeenCalledWith(jasmine.objectContaining({
312       type: "CREATE_PNF_INSTANCE",
313     }));
314   });
315
316   test('storePNF should dispatch updatePNFInstance action when isUpdateMode is true', () => {
317     let mockedPopupService = getMockedPopupService(true);
318
319     spyOn(mockedPopupService._store, 'dispatch');
320     service.storePNF(mockedPopupService, {});
321
322     expect(mockedPopupService._store.dispatch).toHaveBeenCalledWith(jasmine.objectContaining({
323       type: "UPDATE_PNF_INSTANCE",
324     }));
325   });
326
327   function getMockedPopupService(isUpdateMode: boolean) {
328     return <any>{
329       model: {},
330       isUpdateMode: isUpdateMode,
331       _store: {
332         dispatch: () => {
333         }
334       },
335       uuidData: {
336         serviceId: "serviceId"
337       }
338     };
339   }
340
341   test('getTitle pnf should return the correct title for edit and create mode', () => {
342     expect(service.getTitle(false)).toBe('Set a new PNF');
343     expect(service.getTitle(true)).toBe('Edit PNF instance');
344   });
345
346   test('extractSubscriberNameBySubscriberId should extract proper subscriber by id', () => {
347     expect(service.extractSubscriberNameBySubscriberId("subscriberId", store))
348       .toBe('subscriberName');
349   });
350
351 });