aboutsummaryrefslogtreecommitdiffstats
path: root/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
diff options
context:
space:
mode:
authorMateusz Gołuchowski <mateusz.goluchowski@nokia.com>2020-11-05 10:11:08 +0100
committerIkram Ikramullah <ikram@research.att.com>2020-11-12 14:21:25 +0000
commitd74f6cc4a47f4ebe94c6143f5ffb12b7f47c8fb6 (patch)
tree659d245c2d60edd94c19f06683916e0d37a9c79b /vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
parent182d036de5a7d64250fc5058f3cf361b9d823282 (diff)
Extend Modern UI for pnf usecase
Implemented functionalities to manage PNFs in modern UI: - Adding, removing, editing PNFs - PNF default generation based on 'min_instances' property - FE sends proper instantiation request to BE This is still impossible to deploy service with PNFs as VID's BE logic must be adjusted to generate proper request to SO as described in VID-695. Issue-ID: VID-694 Signed-off-by: Mateusz Goluchowski <mateusz.goluchowski@nokia.com> Change-Id: I5285ac2ab5e95665244ca29c6549249d9330b1ed
Diffstat (limited to 'vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts')
-rw-r--r--vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts234
1 files changed, 223 insertions, 11 deletions
diff --git a/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
index 56f49e75c..4abffabcb 100644
--- a/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
+++ b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
@@ -4,25 +4,176 @@ import {NgRedux} from '@angular-redux/store';
import {DefaultDataGeneratorService} from './default.data.generator.service';
import {ServiceNodeTypes} from "../../models/ServiceNodeTypes";
import {VNFModel} from "../../models/vnfModel";
+import {AppState} from "../../store/reducers";
-class MockAppStore<T> {}
+class MockAppStore<T> {
+ dispatch() {
+
+ }
+
+ getState() {
+ return {
+ "global": {
+ "flags": {
+ "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+ "FLAG_SHOW_ASSIGNMENTS": true,
+ "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+ "FLAG_SHOW_VERIFY_SERVICE": false,
+ "FLAG_SERVICE_MODEL_CACHE": true,
+ "FLAG_ADD_MSO_TESTAPI_FIELD": true
+ }
+ },
+ "service": {
+ "serviceHierarchy": {
+ "serviceId": {
+ "service": {
+ "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+ "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "name": "action-data",
+ "version": "1.0",
+ "toscaModelURL": null,
+ "category": "Emanuel",
+ "serviceType": "",
+ "serviceRole": "",
+ "description": "action-data",
+ "serviceEcompNaming": "false",
+ "instantiationType": "Macro",
+ "vidNotions": {
+ "instantiationType": "Macro"
+ },
+ },
+ "globalSubscriberId": "subscriberId",
+ "pnfs": {
+ "pnfInstanceV1": {
+ "name": "pnfName",
+ "pnfStoreKey": "pnfInstanceV1",
+ "version": "1.0",
+ "description": "PNF description",
+ "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+ "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+ "properties": {
+ "min_instances": "1",
+ "ecomp_generated_naming": "true"
+ }
+ }
+ },
+ "modelInfo": {
+ "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+ "modelName": "action-data",
+ "modelVersion": "1.0",
+ "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
+ },
+ "instanceName": "InstanceName",
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+ "lcpCloudRegionId": "AAIAIC25",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "aicZoneId": "JAG1",
+ "projectName": null,
+ "rollbackOnFailure": "true",
+ "aicZoneName": "YUDFJULP-JAG1",
+ "owningEntityName": "WayneHolland",
+ "testApi": "GR_API",
+ "tenantName": "USP-SIP-IC-24335-T-01",
+ "bulkSize": 1,
+ "isALaCarte": false,
+ "name": "action-data",
+ "version": "1.0",
+ "description": "",
+ "category": "",
+ "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+ "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceType": "",
+ "serviceRole": "",
+ "isMultiStepDesign": false
+ }
+ },
+ "serviceInstance": {
+ "serviceId": {
+ "globalSubscriberId": "subscriberId",
+ "pnfs": {
+ "pnfInstanceV1": {
+ "name": "pnfName",
+ "pnfStoreKey": "pnfInstanceV1"
+ },
+ "pnfInstanceV2": {
+ "name": "pnfName2",
+ "pnfStoreKey": "pnfInstanceV2"
+ }
+ },
+ "modelInfo": {
+ "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+ "modelName": "action-data",
+ "modelVersion": "1.0",
+ "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
+ },
+ "instanceName": "InstanceName",
+ "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+ "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+ "lcpCloudRegionId": "AAIAIC25",
+ "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+ "aicZoneId": "JAG1",
+ "projectName": null,
+ "rollbackOnFailure": "true",
+ "aicZoneName": "YUDFJULP-JAG1",
+ "owningEntityName": "WayneHolland",
+ "testApi": "GR_API",
+ "tenantName": "USP-SIP-IC-24335-T-01",
+ "bulkSize": 1,
+ "isALaCarte": false,
+ "name": "action-data",
+ "version": "1.0",
+ "description": "",
+ "category": "",
+ "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+ "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+ "serviceType": "",
+ "serviceRole": "",
+ "isMultiStepDesign": false
+ }
+ },
+ "subscribers": [
+ {
+ "id": "someSubscriberId",
+ "name": "someSubscriberName",
+ "isPermitted": true
+ },
+ {
+ "id": "subscriberId",
+ "name": "subscriberName",
+ "isPermitted": true
+ },
+ {
+ "id": "subscriberId2",
+ "name": "subscriberName2",
+ "isPermitted": true
+ }
+ ]
+ }
+ }
+ }
+}
describe('Default Data Generator Service', () => {
let injector;
let service: DefaultDataGeneratorService;
+ let store: NgRedux<AppState>;
let httpMock: HttpTestingController;
beforeAll(done => (async () => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
- providers: [DefaultDataGeneratorService,
- {provide: NgRedux, useClass: MockAppStore}]
+ providers: [DefaultDataGeneratorService,
+ {provide: NgRedux, useClass: MockAppStore}]
});
await TestBed.compileComponents();
injector = getTestBed();
service = injector.get(DefaultDataGeneratorService);
httpMock = injector.get(HttpTestingController);
+ store = injector.get(NgRedux);
})().then(done).catch(done.fail));
test('generateVFModule aLaCarte vf module object should missed data', () => {
@@ -124,7 +275,7 @@ describe('Default Data Generator Service', () => {
"modelVersion": "1"
},
volumeGroupName: "",
- isMissingData : false,
+ isMissingData: false,
trackById: Math.random().toString()
}, vfModuleModel, vnfModuleUUID, false, [], "");
expect(newVfModule.name).toEqual('&lt;Automatically Assigned&gt;');
@@ -147,7 +298,7 @@ describe('Default Data Generator Service', () => {
"modelVersion": "1"
},
volumeGroupName: "",
- isMissingData : false,
+ isMissingData: false,
trackById: Math.random().toString()
}, vfModuleModel, vnfModuleUUID, true, [], "");
expect(newVfModule.name).toEqual('&lt;Automatically Assigned&gt;');
@@ -159,7 +310,7 @@ describe('Default Data Generator Service', () => {
test('createNewVnfTreeNode with isEcompGeneratedNaming instance name not filled - missing data true', () => {
const vnfModel = generateServiceHierarchy().vnfs['VF_vGeraldine 0'];
const newVnf = service.createNewTreeNode({
- uuid : '',
+ uuid: '',
instanceName: "",
productFamilyId: "productFamilyId",
lcpCloudRegionId: "lcpCloudRegionId",
@@ -168,7 +319,7 @@ describe('Default Data Generator Service', () => {
platformName: "platformName",
lineOfBusiness: "lineOfBusiness",
rollbackOnFailure: "rollbackOnFailure",
- originalName : null,
+ originalName: null,
vfModules: {},
modelInfo: {
"modelCustomizationName": "VF_vGeraldine 0",
@@ -182,7 +333,7 @@ describe('Default Data Generator Service', () => {
isMissingData: false,
trackById: Math.random().toString(),
vnfStoreKey: "abc"
- }, new VNFModel(vnfModel),'VF_vGeraldine 0', 'vnfs');
+ }, new VNFModel(vnfModel), 'VF_vGeraldine 0', 'vnfs');
expect(newVnf.name).toEqual('VF_vGeraldine 0');
expect(newVnf.missingData).toEqual(true);
});
@@ -190,7 +341,7 @@ describe('Default Data Generator Service', () => {
test('createNewVnfTreeNode with isEcompGeneratedNaming instance name filled - missing data false', () => {
const vnfModel = generateServiceHierarchy().vnfs['VF_vGeraldine 0'];
const newVnf = service.createNewTreeNode({
- uuid : '',
+ uuid: '',
instanceName: "instanceName",
productFamilyId: "productFamilyId",
lcpCloudRegionId: "lcpCloudRegionId",
@@ -199,7 +350,7 @@ describe('Default Data Generator Service', () => {
platformName: "platformName",
lineOfBusiness: "lineOfBusiness",
rollbackOnFailure: "rollbackOnFailure",
- originalName : null,
+ originalName: null,
vfModules: {},
modelInfo: {
"modelCustomizationName": "VF_vGeraldine 0",
@@ -213,12 +364,73 @@ describe('Default Data Generator Service', () => {
isMissingData: false,
trackById: Math.random().toString(),
vnfStoreKey: "abc"
- }, vnfModel,'VF_vGeraldine 0', 'vnfs');
+ }, vnfModel, 'VF_vGeraldine 0', 'vnfs');
expect(newVnf.name).toEqual("instanceName");
expect(newVnf.missingData).toEqual(false);
});
});
+ describe('#updatePnfsOnFirstSet tests', () => {
+
+ test('updatePnfsOnFirstSet should call createPNFInstanceReduxIfNotExist when pnfs exists and extended pnf flag is on', () => {
+ jest.spyOn(service, 'isExtendedMacroPnfConfigOn').mockReturnValue(true);
+ spyOn(service, 'createPNFInstanceReduxIfNotExist');
+
+ service.updatePnfsOnFirstSet("serviceId", {})
+
+ expect(service.createPNFInstanceReduxIfNotExist).toHaveBeenCalled();
+ });
+
+ test('updatePnfsOnFirstSet should not call createPNFInstanceReduxIfNotExist when pnfs exists and extended pnf flag is off', () => {
+ jest.spyOn(service, 'isExtendedMacroPnfConfigOn').mockReturnValue(false);
+ spyOn(service, 'createPNFInstanceReduxIfNotExist');
+
+ service.updatePnfsOnFirstSet("serviceId", {})
+
+ expect(service.createPNFInstanceReduxIfNotExist).not.toHaveBeenCalled();
+ });
+
+ test('updatePnfsOnFirstSet should not call createPNFInstanceReduxIfNotExist when min_instances == 0 and extended pnf flag is on', () => {
+ jest.spyOn(service, 'isExtendedMacroPnfConfigOn').mockReturnValue(true);
+ jest.spyOn(service, 'isMinInstancesGreaterThanZero').mockReturnValue(false);
+ spyOn(service, 'createPNFInstanceReduxIfNotExist');
+
+ service.updatePnfsOnFirstSet("serviceId", {})
+
+ expect(service.createPNFInstanceReduxIfNotExist).not.toHaveBeenCalled();
+ });
+
+ test('createPNFInstanceReduxIfNotExist should dispatch proper actions when pnf doesnt exist', () => {
+ let pnfData = {
+ modelInfo: {
+ modelCustomizationName: "pnfName"
+ }
+ };
+ spyOn(store, 'dispatch');
+
+ service.createPNFInstanceReduxIfNotExist("serviceId", pnfData);
+
+ expect(store.dispatch).toHaveBeenCalledWith(jasmine.objectContaining({
+ type: "CREATE_PNF_INSTANCE",
+ }));
+ expect(store.dispatch).toHaveBeenCalledWith(jasmine.objectContaining({
+ type: "CHANGE_INSTANCE_COUNTER",
+ }));
+ });
+
+ test('createPNFInstanceReduxIfNotExist should not dispatch anything when pnf exists', () => {
+ let pnfData = {
+ modelInfo: {
+ modelCustomizationName: "pnfInstanceV1"
+ }
+ };
+ spyOn(store, 'dispatch');
+
+ service.createPNFInstanceReduxIfNotExist("serviceId", pnfData);
+
+ expect(store.dispatch).not.toHaveBeenCalled();
+ });
+ });
});