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