6dcaa823548293e9aa23dfbcbd622a3a54ff266b
[vid.git] / vid-webpack-master / src / app / shared / components / genericForm / formControlsServices / vnfGroupGenerator / vnfGroup.control.generator.spec.ts
1 import {getTestBed, TestBed} from '@angular/core/testing';
2 import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
3 import {NgRedux} from '@angular-redux/store';
4 import {FormControlNames} from "../service.control.generator";
5 import {BasicControlGenerator} from "../basic.control.generator";
6 import {AaiService} from "../../../../services/aaiService/aai.service";
7 import {GenericFormService} from "../../generic-form.service";
8 import {FormBuilder} from "@angular/forms";
9 import {
10   FormControlModel,
11   ValidatorModel,
12   ValidatorOptions
13 } from "../../../../models/formControlModels/formControl.model";
14 import {LogService} from "../../../../utils/log/log.service";
15 import {VnfGroupControlGenerator} from "./vnfGroup.control.generator";
16 import {Observable} from "rxjs";
17 import {SelectOption} from "../../../../models/selectOption";
18 import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
19
20 class MockAppStore<T> {
21   getState(){
22     return {
23       "global": {
24         "name": null,
25         "type": "UPDATE_DRAWING_BOARD_STATUS",
26         "drawingBoardStatus": "CREATE",
27         "flags": {
28           "CREATE_INSTANCE_TEST": false,
29           "EMPTY_DRAWING_BOARD_TEST": false,
30           "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
31           "FLAG_ASYNC_INSTANTIATION": true,
32           "FLAG_ASYNC_JOBS": true,
33           "FLAG_ADD_MSO_TESTAPI_FIELD": true,
34           "FLAG_UNASSIGN_SERVICE": false,
35           "FLAG_SERVICE_MODEL_CACHE": false,
36           "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
37           "FLAG_SHOW_ASSIGNMENTS": true,
38           "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
39           "FLAG_DUPLICATE_VNF": true,
40           "FLAG_DEFAULT_VNF": true,
41           "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": true,
42           "FLAG_A_LA_CARTE_AUDIT_INFO": true,
43           "FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST": true,
44           "FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS": true,
45           "FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE": true,
46           "FLAG_1902_NEW_VIEW_EDIT": true
47         }
48       },
49       "service": {
50         "serviceHierarchy": {
51           "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc": {
52             "service": {
53               "vidNotions": {
54                 "instantiationUI": "serviceWithVnfGrouping",
55                 "modelCategory": "other",
56                 "viewEditUI": "serviceWithVnfGrouping"
57               },
58               "uuid": "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc",
59               "invariantUuid": "7ee41ce4-4827-44b0-a48e-2707a59905d2",
60               "name": "Grouping Service for Test",
61               "version": "1.0",
62               "toscaModelURL": null,
63               "category": "Network L4+",
64               "serviceType": "INFRASTRUCTURE",
65               "serviceRole": "GROUPING",
66               "description": "xxx",
67               "serviceEcompNaming": "false",
68               "instantiationType": "A-La-Carte",
69               "inputs": {}
70             },
71             "vnfs": {},
72             "networks": {},
73             "collectionResource": {},
74             "configurations": {},
75             "fabricConfigurations": {},
76             "serviceProxies": {
77               "vdbe_svc_vprs_proxy 0": {
78                 "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c",
79                 "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc",
80                 "description": "A Proxy for Service vDBE_Svc_vPRS",
81                 "name": "vDBE_Svc_vPRS Service Proxy",
82                 "version": "1.0",
83                 "customizationUuid": "bdb63d23-e132-4ce7-af2c-a493b4cafac9",
84                 "inputs": {},
85                 "commands": {},
86                 "properties": {},
87                 "type": "Service Proxy",
88                 "sourceModelUuid": "da7827a2-366d-4be6-8c68-a69153c61274",
89                 "sourceModelInvariant": "24632e6b-584b-4f45-80d4-fefd75fd9f14",
90                 "sourceModelName": "vDBE_Svc_vPRS"
91               },
92               "tsbc0001vm001_svc_proxy 0": {
93                 "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c",
94                 "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc",
95                 "description": "A Proxy for Service tsbc0001vm001_Svc",
96                 "name": "tsbc0001vm001_Svc Service Proxy",
97                 "version": "1.0",
98                 "customizationUuid": "3d814462-30fb-4c62-b997-9aa360d27ead",
99                 "inputs": {},
100                 "commands": {},
101                 "properties": {},
102                 "type": "Service Proxy",
103                 "sourceModelUuid": "28aeb8f6-5620-4148-8bfb-a5fb406f0309",
104                 "sourceModelInvariant": "c989ab9a-33c7-46ec-b521-1b2daef5f047",
105                 "sourceModelName": "tsbc0001vm001_Svc"
106               }
107             },
108             "vfModules": {},
109             "volumeGroups": {},
110             "pnfs": {},
111             "vnfGroups": {
112               "groupingservicefortest..ResourceInstanceGroup..0": {
113                 "type": "VnfGroup",
114                 "invariantUuid": "4bb2e27e-ddab-4790-9c6d-1f731bc14a45",
115                 "uuid": "daeb6568-cef8-417f-9075-ed259ce59f48",
116                 "version": "1",
117                 "name": "groupingservicefortest..ResourceInstanceGroup..0",
118                 "modelCustomizationName": "groupingservicefortest..ResourceInstanceGroup..0",
119                 "properties": {
120                   "ecomp_generated_naming": "false",
121                   "contained_resource_type": "VF",
122                   "role": "SERVICE-ACCESS",
123                   "function": "DATA",
124                   "description": "DDD0",
125                   "type": "LOAD-GROUP"
126                 },
127                 "members": {
128                   "vdbe_svc_vprs_proxy 0": {
129                     "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c",
130                     "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc",
131                     "description": "A Proxy for Service vDBE_Svc_vPRS",
132                     "name": "vDBE_Svc_vPRS Service Proxy",
133                     "version": "1.0",
134                     "customizationUuid": "bdb63d23-e132-4ce7-af2c-a493b4cafac9",
135                     "inputs": {},
136                     "commands": {},
137                     "properties": {},
138                     "type": "Service Proxy",
139                     "sourceModelUuid": "da7827a2-366d-4be6-8c68-a69153c61274",
140                     "sourceModelInvariant": "24632e6b-584b-4f45-80d4-fefd75fd9f14",
141                     "sourceModelName": "vDBE_Svc_vPRS"
142                   }
143                 }
144               },
145               "groupingservicefortest..ResourceInstanceGroup..1": {
146                 "type": "VnfGroup",
147                 "invariantUuid": "a704112d-dbc6-4e56-8d4e-aec57e95ef9a",
148                 "uuid": "c2b300e6-45de-4e5e-abda-3032bee2de56",
149                 "version": "1",
150                 "name": "groupingservicefortest..ResourceInstanceGroup..1",
151                 "modelCustomizationName": "groupingservicefortest..ResourceInstanceGroup..1",
152                 "properties": {
153                   "ecomp_generated_naming": "true",
154                   "contained_resource_type": "VF",
155                   "role": "SERVICE-ACCESS",
156                   "function": "SIGNALING",
157                   "description": "DDD1",
158                   "type": "LOAD-GROUP"
159                 },
160                 "members": {
161                   "tsbc0001vm001_svc_proxy 0": {
162                     "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c",
163                     "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc",
164                     "description": "A Proxy for Service tsbc0001vm001_Svc",
165                     "name": "tsbc0001vm001_Svc Service Proxy",
166                     "version": "1.0",
167                     "customizationUuid": "3d814462-30fb-4c62-b997-9aa360d27ead",
168                     "inputs": {},
169                     "commands": {},
170                     "properties": {},
171                     "type": "Service Proxy",
172                     "sourceModelUuid": "28aeb8f6-5620-4148-8bfb-a5fb406f0309",
173                     "sourceModelInvariant": "c989ab9a-33c7-46ec-b521-1b2daef5f047",
174                     "sourceModelName": "tsbc0001vm001_Svc"
175                   }
176                 }
177               }
178             }
179           }
180         },
181         "serviceInstance": {
182           "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc": {
183             "existingVNFCounterMap": {},
184             "existingVnfGroupCounterMap": {
185               "daeb6568-cef8-417f-9075-ed259ce59f48": 1,
186               "c2b300e6-45de-4e5e-abda-3032bee2de56": 0
187               },
188               "existingNetworksCounterMap": {},
189               "vnfs": {},
190               "vnfGroups": {
191                 "groupingservicefortest..ResourceInstanceGroup..0": {
192                   "inMaint": false,
193                   "rollbackOnFailure": "true",
194                   "originalName": "groupingservicefortest..ResourceInstanceGroup..0",
195                   "isMissingData": false,
196                   "trackById": "johjmxpmrlk",
197                   "vnfGroupStoreKey": "groupingservicefortest..ResourceInstanceGroup..0",
198                   "instanceName": "groupingservicefortestResourceInstanceGroup0",
199                   "instanceParams": [
200                     {}
201                   ],
202                   "modelInfo": {
203                     "modelInvariantId": "4bb2e27e-ddab-4790-9c6d-1f731bc14a45",
204                     "modelVersionId": "daeb6568-cef8-417f-9075-ed259ce59f48",
205                     "modelName": "groupingservicefortest..ResourceInstanceGroup..0",
206                     "modelVersion": "1",
207                     "modelCustomizationName": "groupingservicefortest..ResourceInstanceGroup..0",
208                     "uuid": "daeb6568-cef8-417f-9075-ed259ce59f48"
209                   },
210                   "uuid": "daeb6568-cef8-417f-9075-ed259ce59f48"
211                 }
212               },
213               "isEcompGeneratedNaming": false,
214             "existingNames": {}
215           }
216         }
217       }
218     }
219   }
220 }
221
222 class MockFeatureFlagsService {}
223
224 describe('VNF Group Control Generator', () => {
225   let injector;
226   let service: VnfGroupControlGenerator;
227   let httpMock: HttpTestingController;
228
229   beforeAll(done => (async () => {
230     TestBed.configureTestingModule({
231       imports: [HttpClientTestingModule],
232       providers: [VnfGroupControlGenerator,
233         GenericFormService,
234         BasicControlGenerator,
235         AaiService,
236         FormBuilder,
237         LogService,
238         {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
239         {provide: NgRedux, useClass: MockAppStore}]
240     });
241     await TestBed.compileComponents();
242
243     injector = getTestBed();
244     service = injector.get(VnfGroupControlGenerator);
245     httpMock = injector.get(HttpTestingController);
246
247   })().then(done).catch(done.fail));
248
249
250
251   test('getMacroFormControls check for mandatory controls', () => {
252     const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
253     const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..0";
254     const vnfGroupStoreKey : string = "groupingservicefortest..ResourceInstanceGroup..0";
255     const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []);
256
257     const mandatoryControls : string[] = [
258       FormControlNames.INSTANCE_NAME
259     ];
260
261     for(let i = 0 ; i < mandatoryControls.length ; i++){
262       let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
263       expect(requiredExist).toBeDefined();
264     }
265   });
266
267   test('getMacroFormControls should return the correct order of controls', () => {
268     const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
269     const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..0";
270     const vnfGroupStoreKey : string = "groupingservicefortest..ResourceInstanceGroup..0";
271     const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []);
272
273     const controlsOrderNames = [
274       FormControlNames.INSTANCE_NAME,
275       'rollbackOnFailure'];
276
277     expect(controls.length).toEqual(1);
278     for(let i = 0 ; i < controls.length ; i++){
279       expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
280     }
281   });
282
283   test('getMacroFormControls check for mandatory controls when ecomp naming = true', () => {
284     const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
285     const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..1";
286     const vnfGroupStoreKey : string = "groupingservicefortest..ResourceInstanceGroup..1";
287     const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []);
288
289     let isOptional = controls.find(ctrl => ctrl.controlName === 'instanceName').validations.find(item => item.validatorName !== 'required');
290     expect(isOptional).toBeTruthy();
291   });
292
293   test('getAlacartFormControls should return the correct order of controls', () => {
294     const controls:FormControlModel[] = getALaCarteFormControls();
295
296     const controlsOrderNames = [
297       FormControlNames.INSTANCE_NAME,
298       'rollbackOnFailure'];
299     expect(controls.length).toEqual(2);
300     for(let i = 0 ; i < controls.length ; i++) {
301       expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
302     }
303   });
304
305
306   test('getAlacartFormControls check for mandatory controls', () => {
307     const controls:FormControlModel[] = getALaCarteFormControls();
308
309     const mandatoryControls : string[] = [
310       FormControlNames.INSTANCE_NAME,
311       'rollbackOnFailure'
312     ];
313     for(let i = 0 ; i < mandatoryControls.length ; i++){
314       let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
315       expect(requiredExist).toBeDefined();
316     }
317   });
318
319   test('getAlacartFormControls with ecomp_naming true check for mandatory controls', () => {
320     const controls:FormControlModel[] = getALaCarteFormControls();
321
322     const mandatoryControls : string[] = [
323       'rollbackOnFailure'
324     ];
325     for(let i = 0 ; i < mandatoryControls.length ; i++){
326       let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
327       expect(requiredExist).toBeDefined();
328     }
329   });
330
331   test('default instanceName', () => {
332     const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
333     const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..0";
334     let result:FormControlModel  = service.getInstanceName(null, serviceId, vnfGroupName, false);
335     expect(result.value).toEqual("groupingservicefortest..ResourceInstanceGroup..0");
336   });
337
338   test('rollbackOnFailure', () => {
339     let result : Observable<SelectOption[]> = service.getRollBackOnFailureOptions();
340     result.subscribe((val)=>{
341       expect(val).toEqual([
342         new SelectOption({id: 'true', name: 'Rollback'}),
343         new SelectOption({id: 'false', name: 'Don\'t Rollback'})
344       ]);
345     });
346   });
347
348   test('getAlacartFormControls instance name control validator shall have the expected regex', () => {
349     const controls:FormControlModel[] = getALaCarteFormControls();
350
351     const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName === FormControlNames.INSTANCE_NAME);
352     const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern);
353     expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/);
354   });
355
356   function getALaCarteFormControls():FormControlModel[] {
357     const serviceId: string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
358     const vnfGroupName: string = "groupingservicefortest..ResourceInstanceGroup..0";
359     const vnfGroupStoreKey: string = "groupingservicefortest..ResourceInstanceGroup..0";
360     const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []);
361     return controls;
362   }
363 });
364