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