1 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
2 import {NgRedux} from "@angular-redux/store";
3 import {IframeService} from "../../../../utils/iframe.service";
4 import {VfModulePopupService} from "../vfModule/vfModule.popup.service";
5 import {FormBuilder} from "@angular/forms";
6 import {GenericFormService} from "../../../genericForm/generic-form.service";
7 import {BasicPopupService} from "../basic.popup.service";
8 import {AaiService} from "../../../../services/aaiService/aai.service";
9 import {LogService} from "../../../../utils/log/log.service";
10 import {HttpClient} from "@angular/common/http";
11 import {ControlGeneratorUtil} from "../../../genericForm/formControlsServices/control.generator.util.service";
12 import {PnfControlGenerator} from "../../../genericForm/formControlsServices/pnfGenerator/pnf.control.generator";
13 import {UUIDData} from "../../generic-form-popup.component";
14 import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
15 import {getTestBed, TestBed} from "@angular/core/testing";
16 import {VfModuleUpgradePopupService} from "../vfModuleUpgrade/vfModule.upgrade.popuop.service";
17 import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
18 import {PnfPopupService} from "../pnf/pnf.popup.service";
19 import {AppState} from "../../../../store/reducers";
21 class MockAppStore<T> {
24 class MockReduxStore<T> {
30 "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
31 "FLAG_SHOW_ASSIGNMENTS": true,
32 "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
33 "FLAG_SHOW_VERIFY_SERVICE": false,
34 "FLAG_SERVICE_MODEL_CACHE": true,
35 "FLAG_ADD_MSO_TESTAPI_FIELD": true
42 "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
43 "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
44 "name": "action-data",
46 "toscaModelURL": null,
47 "category": "Emanuel",
50 "description": "action-data",
51 "serviceEcompNaming": "false",
52 "instantiationType": "Macro",
54 "instantiationType": "Macro"
57 "globalSubscriberId": "subscriberId",
61 "pnfStoreKey": "pnfInstanceV1",
63 "description": "PNF description",
64 "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
65 "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d"
69 "pnfStoreKey": "pnfInstanceV2"
73 "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
74 "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
75 "modelName": "action-data",
76 "modelVersion": "1.0",
77 "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
79 "instanceName": "InstanceName",
80 "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
81 "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
82 "lcpCloudRegionId": "AAIAIC25",
83 "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
86 "rollbackOnFailure": "true",
87 "aicZoneName": "YUDFJULP-JAG1",
88 "owningEntityName": "WayneHolland",
90 "tenantName": "USP-SIP-IC-24335-T-01",
93 "name": "action-data",
97 "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
98 "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
101 "isMultiStepDesign": false
106 "globalSubscriberId": "subscriberId",
110 "pnfStoreKey": "pnfInstanceV1"
114 "pnfStoreKey": "pnfInstanceV2"
118 "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
119 "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
120 "modelName": "action-data",
121 "modelVersion": "1.0",
122 "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
124 "instanceName": "InstanceName",
125 "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
126 "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
127 "lcpCloudRegionId": "AAIAIC25",
128 "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
131 "rollbackOnFailure": "true",
132 "aicZoneName": "YUDFJULP-JAG1",
133 "owningEntityName": "WayneHolland",
135 "tenantName": "USP-SIP-IC-24335-T-01",
138 "name": "action-data",
142 "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
143 "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
146 "isMultiStepDesign": false
151 "id": "someSubscriberId",
152 "name": "someSubscriberName",
156 "id": "subscriberId",
157 "name": "subscriberName",
161 "id": "subscriberId2",
162 "name": "subscriberName2",
171 class MockFeatureFlagsService {
174 describe('pnf new popup service', () => {
176 let service: PnfPopupService;
177 let store: NgRedux<AppState>;
180 beforeAll(done => (async () => {
181 TestBed.configureTestingModule({
184 DefaultDataGeneratorService,
188 {provide: FeatureFlagsService, useClass: MockFeatureFlagsService},
192 VfModulePopupService,
193 VfModuleUpgradePopupService,
194 ControlGeneratorUtil,
195 SharedControllersService,
197 {provide: NgRedux, useClass: MockReduxStore},
198 {provide: HttpClient, useClass: MockAppStore},
201 await TestBed.compileComponents();
203 injector = getTestBed();
204 store = injector.get(NgRedux);
205 service = injector.get(PnfPopupService);
207 })().then(done).catch(done.fail));
209 test('getGenericFormPopupDetails returns the FormPopupDetails object', () => {
210 const serviceId: string = 'serviceId';
211 const pnfModelName: string = 'pnfInstanceV2';
212 const pnfStoreKey: string = 'pnfInstanceV2';
213 let uuidData: UUIDData = <any>{
214 serviceId: "serviceId",
215 modelName: "pnfInstanceV2",
216 pnfStoreKey: "pnfInstanceV2"
219 const formPopupDetailsObject = service.getGenericFormPopupDetails(serviceId, pnfModelName, pnfStoreKey, null, uuidData, true);
221 expect(formPopupDetailsObject).toBeDefined();
225 test('getInstance with empty storekey should be created', () => {
226 const serviceId: string = 'serviceId';
227 const pnfModelName: string = 'pnfInstanceV1';
229 const newInstance = service.getInstance(serviceId, pnfModelName, null);
231 expect(newInstance).toBeDefined();
232 expect(newInstance.pnfStoreKey).toBeNull();
235 test('getInstance with not empty storekey should return existing instance with the same model name as store key', () => {
236 const serviceId: string = 'serviceId';
237 const pnfModelName: string = 'pnfInstanceV1';
238 const pnfStoreKey: string = 'pnfInstanceV2';
240 const newInstance = service.getInstance(serviceId, pnfModelName, pnfStoreKey);
242 expect(newInstance).toBeDefined();
243 expect(newInstance.pnfStoreKey).toEqual('pnfInstanceV2');
246 test('getModelInformation pnf should update modelInformations', () => {
247 const serviceId: string = 'serviceId';
248 const pnfModelName: string = 'pnfInstanceV1';
250 service.getModelInformation(serviceId, pnfModelName);
252 expect(service.modelInformations.length).toEqual(14);
254 expect(service.modelInformations[0].label).toEqual("Subscriber Name");
255 expect(service.modelInformations[0].values).toEqual(['subscriberName']);
257 expect(service.modelInformations[1].label).toEqual("Service Name");
258 expect(service.modelInformations[1].values).toEqual(['action-data']);
260 expect(service.modelInformations[2].label).toEqual("Service Instance Name");
261 expect(service.modelInformations[2].values).toEqual(['InstanceName']);
263 expect(service.modelInformations[3].label).toEqual("Model Name");
264 expect(service.modelInformations[3].values).toEqual(['pnfName']);
266 expect(service.modelInformations[4].label).toEqual("Model version");
267 expect(service.modelInformations[4].values).toEqual(['1.0']);
269 expect(service.modelInformations[5].label).toEqual("Description");
270 expect(service.modelInformations[5].values).toEqual(['PNF description']);
272 expect(service.modelInformations[6].label).toEqual("Category");
273 expect(service.modelInformations[6].values).toEqual([undefined]);
275 expect(service.modelInformations[7].label).toEqual("Sub Category");
276 expect(service.modelInformations[7].values).toEqual([undefined]);
278 expect(service.modelInformations[8].label).toEqual("UUID");
279 expect(service.modelInformations[8].values).toEqual(['0903e1c0-8e03-4936-b5c2-260653b96413']);
281 expect(service.modelInformations[9].label).toEqual("Invariant UUID");
282 expect(service.modelInformations[9].values).toEqual(['00beb8f9-6d39-452f-816d-c709b9cbb87d']);
284 expect(service.modelInformations[10].label).toEqual("Service type");
285 expect(service.modelInformations[10].values).toEqual(['']);
287 expect(service.modelInformations[11].label).toEqual("Service role");
288 expect(service.modelInformations[11].values).toEqual(['']);
290 expect(service.modelInformations[12].label).toEqual("Minimum to instantiate");
291 expect(service.modelInformations[12].values).toEqual(['0']);
293 expect(service.modelInformations[13].label).toEqual("Maximum to instantiate");
294 expect(service.modelInformations[13].values).toEqual(['1']);
297 test('getSubLeftTitle new pnf popup should return service model name', () => {
299 serviceId: 'serviceId',
300 modelName: 'pnfInstanceV1'
302 expect(service.getSubLeftTitle()).toBe("PNF MODEL: pnfName");
305 test('storePNF should dispatch createPNFInstance action when isUpdateMode is false', () => {
306 let mockedPopupService = getMockedPopupService(false);
308 spyOn(store, 'dispatch');
309 service.storePNF(mockedPopupService, {});
311 expect(store.dispatch).toHaveBeenCalledWith(jasmine.objectContaining({
312 type: "CREATE_PNF_INSTANCE",
316 test('storePNF should dispatch updatePNFInstance action when isUpdateMode is true', () => {
317 let mockedPopupService = getMockedPopupService(true);
319 spyOn(mockedPopupService._store, 'dispatch');
320 service.storePNF(mockedPopupService, {});
322 expect(mockedPopupService._store.dispatch).toHaveBeenCalledWith(jasmine.objectContaining({
323 type: "UPDATE_PNF_INSTANCE",
327 function getMockedPopupService(isUpdateMode: boolean) {
330 isUpdateMode: isUpdateMode,
336 serviceId: "serviceId"
341 test('getTitle pnf should return the correct title for edit and create mode', () => {
342 expect(service.getTitle(false)).toBe('Set a new PNF');
343 expect(service.getTitle(true)).toBe('Edit PNF instance');
346 test('extractSubscriberNameBySubscriberId should extract proper subscriber by id', () => {
347 expect(service.extractSubscriberNameBySubscriberId("subscriberId", store))
348 .toBe('subscriberName');