41ddb437278c60b548c32f6dd45502727ec57f3a
[vid.git] / vid-webpack-master / src / app / components / vnf-popup / vnf-instance-details / vnf-instance-details.service.spec.ts
1 import { TestBed, getTestBed } from '@angular/core/testing';
2 import {
3   HttpClientTestingModule,
4   HttpTestingController
5 } from '@angular/common/http/testing';
6 import { VnfInstanceDetailsService } from './vnf-instance-details.service';
7 import { FormControl, FormGroup, Validators } from '@angular/forms';
8 import { NumbersLettersUnderscoreValidator } from '../../../shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
9
10 describe('Vnf Instance Details Service', () => {
11   let injector;
12   let service: VnfInstanceDetailsService;
13   let httpMock: HttpTestingController;
14
15   let SERVICE_ID: string = '1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd';
16   let serviceHierarchy;
17
18   beforeEach(() => {
19     TestBed.configureTestingModule({
20       imports: [HttpClientTestingModule],
21       providers: [VnfInstanceDetailsService]
22     });
23
24     injector = getTestBed();
25     service = injector.get(VnfInstanceDetailsService);
26     httpMock = injector.get(HttpTestingController);
27     serviceHierarchy = getServiceServiceHierarchy();
28   });
29
30
31   describe('#hasInstanceNameError', ()=> {
32     it('hasInstanceNameError should return true if instanceName is illegal and enabled', (done: DoneFn) => {
33       let form = generateFormGroup();
34       form.controls['instanceName'].setValue('----');
35       form.controls['instanceName'].setErrors({
36         pattern : true
37       });
38       form.controls['instanceName'].markAsTouched();
39       let result = service.hasInstanceNameError(form);
40       expect(result).toBeTruthy();
41       done();
42     });
43
44     it('hasInstanceNameError should return false if instanceName is illegal and enabled and pattern is ok', (done: DoneFn) => {
45       let form = generateFormGroup();
46       form.controls['instanceName'].setValue('----');
47       form.controls['instanceName'].setErrors({
48         otherError : true
49       });
50       form.controls['instanceName'].markAsTouched();
51       let result = service.hasInstanceNameError(form);
52       expect(result).toBeFalsy();
53       done();
54     });
55   });
56
57   describe('#isUnique', () => {
58     it('Create Mode: should return false if instanceName exist', (done: DoneFn) => {
59       serviceHierarchy = getServiceServiceHierarchy();
60       let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceName', false);
61       expect(result).toBeFalsy();
62       done();
63     });
64
65     it('Update Mode: should return true if instanceName exist once', (done: DoneFn) => {
66       let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceName', true);
67       expect(result).toBeTruthy()
68       done();
69     });
70
71     it('Create Mode: should return true if instanceName not exist', (done: DoneFn) => {
72       let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceNameNotExist', false);
73       expect(result).toBeTruthy();
74       done();
75     });
76
77     it('Create Mode: should return false if instanceName exist inside vf modules', (done: DoneFn) => {
78       let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceNameVfModule', false);
79       expect(result).toBeFalsy();
80       done();
81     });
82
83     it('Update Mode: should return true if instanceName  exist once inside vf modules', (done: DoneFn) => {
84       let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceNameVfModule', true);
85       expect(result).toBeTruthy();
86       done();
87     });
88
89     it('Create Mode: should return true if instanceName is not exist at vf modules and vnfs', (done: DoneFn) => {
90       let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'uniqueInstanceNameVfModuleNotExist', false);
91       expect(result).toBeTruthy();
92       done();
93     });
94
95     it('Create Mode: should return false if instanceName exist service name', (done: DoneFn) => {
96       let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'Instance-Name', false);
97       expect(result).toBeFalsy();
98       done();
99     });
100
101     it('Create Mode: should return false if volumeGroupName exist service name', (done: DoneFn) => {
102       let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'volumeGroupNameExist', false);
103       expect(result).toBeFalsy();
104       done();
105     });
106
107     it('Create Mode: should return true if volumeGroupName not exist service name', (done: DoneFn) => {
108       let result = service.isUnique(serviceHierarchy, SERVICE_ID, 'volumeGroupNameNotExist', false);
109       expect(result).toBeTruthy();
110       done();
111     });
112   });
113
114   function getServiceServiceHierarchy() {
115     return JSON.parse(JSON.stringify(
116       {
117         "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd": {
118           "vnfs": {
119             "2017-388_ADIOD-vPE 1": {
120               "rollbackOnFailure": "true",
121               "vfModules": {},
122               "instanceParams": [
123                 {}
124               ],
125               "productFamilyId": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
126               "lcpCloudRegionId": "AAIAIC25",
127               "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
128               "lineOfBusiness": "zzz1",
129               "platformName": "platform",
130               "instanceName": "uniqueInstanceName",
131               "modelInfo": {
132                 "modelInvariantId": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
133                 "modelVersionId": "0903e1c0-8e03-4936-b5c2-260653b96413",
134                 "modelName": "2017-388_ADIOD-vPE",
135                 "modelVersion": "1.0",
136                 "modelCustomizationId": "280dec31-f16d-488b-9668-4aae55d6648a",
137                 "modelCustomizationName": "2017-388_ADIOD-vPE 1"
138               },
139               "isUserProvidedNaming": true
140             },
141             "2017-388_ADIOD-vPE 0": {
142               "rollbackOnFailure": "true",
143               "vfModules": {},
144               "instanceParams": [
145                 {}
146               ],
147               "productFamilyId": null,
148               "lcpCloudRegionId": "mtn6",
149               "tenantId": "1178612d2b394be4834ad77f567c0af2",
150               "lineOfBusiness": "ECOMP",
151               "platformName": "xxx1",
152               "instanceName": "blaaa",
153               "modelInfo": {
154                 "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
155                 "modelVersionId": "afacccf6-397d-45d6-b5ae-94c39734b168",
156                 "modelName": "2017-388_ADIOD-vPE",
157                 "modelVersion": "4.0",
158                 "modelCustomizationId": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
159                 "modelCustomizationName": "2017-388_ADIOD-vPE 0"
160               },
161               "isUserProvidedNaming": true
162             },
163             "2017488_ADIODvPE 0": {
164               "rollbackOnFailure": "true",
165               "vfModules": {
166                 "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
167                   "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
168                     "rollbackOnFailure": "true",
169                     "instanceName": "uniqueInstanceNameVfModule",
170                     "volumeGroupName": "volumeGroupNameExist",
171                     "modelInfo": {
172                       "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
173                       "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
174                       "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
175                       "modelVersion": "6"
176                     }
177                   }
178                 }
179               },
180               "instanceParams": [
181                 {}
182               ],
183               "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
184               "lcpCloudRegionId": "mtn6",
185               "tenantId": "19c5ade915eb461e8af52fb2fd8cd1f2",
186               "lineOfBusiness": "zzz1",
187               "platformName": "platform",
188               "instanceName": "2017488_ADIODvPE",
189               "modelInfo": {
190                 "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
191                 "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
192                 "modelName": "2017488_ADIODvPE",
193                 "modelVersion": "5.0",
194                 "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
195                 "modelCustomizationName": "2017488_ADIODvPE 0"
196               },
197               "isUserProvidedNaming": true
198             }
199           },
200           "instanceParams": [
201             {}
202           ],
203           "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
204           "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
205           "subscriptionServiceType": "VIRTUAL USP",
206           "lcpCloudRegionId": "AAIAIC25",
207           "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
208           "aicZoneId": "DKJ1",
209           "projectName": "DFW",
210           "owningEntityId": "aaa1",
211           "instanceName": "Instance-Name",
212           "bulkSize": 1,
213           "modelInfo": {
214             "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
215             "modelVersionId": "1a80c596-27e5-4ca9-b5bb-e03a7fd4c0fd",
216             "modelName": "action-data",
217             "modelVersion": "1.0"
218           },
219           "tenantName": "USP-SIP-IC-24335-T-01",
220           "aicZoneName": "DKJSJDKA-DKJ1",
221           "isUserProvidedNaming": true
222         }
223       }
224     ));
225   }
226
227   function generateFormGroup() {
228     return new FormGroup({
229       productFamilyId: new FormControl(),
230       lcpCloudRegionId: new FormControl(Validators.required),
231       tenantId: new FormControl({value: null, disabled: false}, Validators.required),
232       legacyRegion: new FormControl(),
233       lineOfBusiness: new FormControl(),
234       platformName: new FormControl(Validators.required),
235       rollbackOnFailure: new FormControl(Validators.required),
236       instanceName: new FormControl({value: null}, Validators.compose([Validators.required, NumbersLettersUnderscoreValidator.valid]))
237
238     });
239   }
240
241 });