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