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