From f792671ae247a931f34d902e9276202b5016ef9a Mon Sep 17 00:00:00 2001 From: Ittay Stern Date: Sun, 7 Jul 2019 19:23:03 +0300 Subject: Merge from ecomp 718fd196 - Modern UI Issue-ID: VID-378 Change-Id: I2736b98426e324ec3aa233b034229ba84d99839f Signed-off-by: Ittay Stern --- .../vrf/vrfModal/networkStep/network.step.model.ts | 18 + .../networkStep/network.step.service.spec.ts | 458 ++++++++++++++++++++ .../vrfModal/networkStep/network.step.service.ts | 242 +++++++++++ .../models/vrf/vrfModal/vpnStep/vpn.step.model.ts | 17 + .../vrf/vrfModal/vpnStep/vpn.step.service.spec.ts | 463 +++++++++++++++++++++ .../vrf/vrfModal/vpnStep/vpn.step.service.ts | 195 +++++++++ 6 files changed, 1393 insertions(+) create mode 100644 vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.model.ts create mode 100644 vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.service.spec.ts create mode 100644 vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.service.ts create mode 100644 vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.model.ts create mode 100644 vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.spec.ts create mode 100644 vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts (limited to 'vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal') diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.model.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.model.ts new file mode 100644 index 000000000..8a2d18ad5 --- /dev/null +++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.model.ts @@ -0,0 +1,18 @@ +export class NetworkModalRow { + instanceName : string; + instanceType: string; + role: string; + orchStatus: string; + physicalName: string; + instanceId: string; + serviceName : string; + serviceUUID : string; + tenantName : string; + lcpCloudRegionId : string; + modelInfo : { + modelCustomizationId: string; + modelInvariantId: string; + modelVersionId: string; + modelType: string; + } +} diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.service.spec.ts new file mode 100644 index 000000000..e06e4c9f9 --- /dev/null +++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.service.spec.ts @@ -0,0 +1,458 @@ +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../../../../../../shared/store/reducers"; +import {getTestBed, TestBed} from "@angular/core/testing"; +import {NgReduxTestingModule} from "@angular-redux/store/testing"; +import {HttpClientTestingModule} from "@angular/common/http/testing"; +import {FeatureFlagsService} from "../../../../../../../shared/services/featureFlag/feature-flags.service"; +import {AaiService} from "../../../../../../../shared/services/aaiService/aai.service"; +import {NetworkStepService} from "./network.step.service"; +import {updateGenericModalCriteria} from "../../../../../../../shared/storeUtil/utils/global/global.actions"; +import {ITableContent} from "../../../../../../../shared/components/searchMembersModal/members-table/element-table-row.model"; + +describe('Network step service', () => { + let injector; + let service: NetworkStepService; + let store: NgRedux; + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [NgReduxTestingModule, HttpClientTestingModule], + providers: [ + NetworkStepService, + FeatureFlagsService, + AaiService + ] + }); + await TestBed.compileComponents(); + injector = getTestBed(); + service = injector.get(NetworkStepService); + store = injector.get(NgRedux); + })().then(done).catch(done.fail)); + + test('service should be defined', () => { + expect(service).toBeDefined(); + }); + + + test('networkStep', () => { + spyOn(store, 'getState').and.returnValue({ + "global": { + "genericModalHelper": { + "selectedNetwork": { + "action": "None", + "instanceName": "NETWORK_1_INSTANCE_NAME", + "instanceId": "NETWORK_1_INSTANCE_ID", + "orchStatus": null, + "productFamilyId": null, + "lcpCloudRegionId": "hvf23b", + "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a", + "tenantName": "APPC-24595-T-IST-02C", + "modelInfo": { + "modelInvariantId": "network-instance-model-invariant-id", + "modelVersionId": "7a6ee536-f052-46fa-aa7e-2fca9d674c44", + "modelVersion": "2.0", + "modelName": "vf_vEPDG", + "modelType": "vnf" + }, + "roles": ["network role 1", "network role 2"], + "instanceType": "NETWORK_1_INSTANCE_TYPE", + "provStatus": null, + "inMaint": false, + "uuid": "7a6ee536-f052-46fa-aa7e-2fca9d674c44", + "originalName": null, + "legacyRegion": null, + "lineOfBusiness": null, + "platformName": null, + "trackById": "VNF1_INSTANCE_ID", + "serviceInstanceId": "service-instance-id1", + "serviceInstanceName": "service-instance-name", + "isSelected": true + }, + "selectedVpn": { + "vpn-id": "120d39fb-3627-473d-913c-d228dd0f8e5b", + "vpn-name": "LPPVPN", + "vpn-platform": "AVPN", + "vpn-type": "SERVICE-INFRASTRUCTURE", + "vpn-region": "USA,EMEA", + "customer-vpn-id": "VPN1260", + "model-customization-id": null, + "model-invariant-id": null, + "model-version-id": null, + "route-targets": null, + "isSelected": true + } + }, + "genericModalCriteria": {"roles": ["-- select an option --", "network role 1", "network role 2", "network role 3", "network role 4", "network role 5"]}, + "name": null, + "flags": { + "CREATE_INSTANCE_TEST": false, + "EMPTY_DRAWING_BOARD_TEST": false, + "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false, + "FLAG_ASYNC_INSTANTIATION": true, + "FLAG_ASYNC_JOBS": true, + "FLAG_ADD_MSO_TESTAPI_FIELD": true, + "FLAG_UNASSIGN_SERVICE": false, + "FLAG_SERVICE_MODEL_CACHE": false, + "FLAG_SHOW_ASSIGNMENTS": true, + "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true, + "FLAG_DUPLICATE_VNF": true, + "FLAG_DEFAULT_VNF": true, + "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": true, + "FLAG_A_LA_CARTE_AUDIT_INFO": true, + "FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST": true, + "FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS": true, + "FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE": true, + "FLAG_1902_NEW_VIEW_EDIT": true, + "FLAG_VF_MODULE_RESUME_STATUS_CREATE": true, + "FLAG_1906_COMPONENT_INFO": true + }, + "drawingBoardStatus": "CREATE", + "type": "UPDATE_DRAWING_BOARD_STATUS" + }, "service": { + "serviceHierarchy": { + "f028b2e2-7080-4b13-91b2-94944d4c42d8": { + "service": { + "uuid": "f028b2e2-7080-4b13-91b2-94944d4c42d8", + "invariantUuid": "dfc2c44c-2429-44ca-ae26-1e6dc1f207fb", + "name": "infraVPN", + "version": "1.0", + "toscaModelURL": null, + "category": "Network Service", + "serviceType": "BONDING", + "serviceRole": "INFRASTRUCTURE-VPN", + "description": "ddd", + "serviceEcompNaming": "true", + "instantiationType": "A-La-Carte", + "inputs": {}, + "vidNotions": {"instantiationUI": "macroService", "modelCategory": "other", "viewEditUI": "legacy"} + }, + "vnfs": {}, + "networks": {}, + "collectionResources": {}, + "configurations": {}, + "fabricConfigurations": {}, + "serviceProxies": { + "misvpn_service_proxy 0": { + "uuid": "35186eb0-e6b6-4fa5-86bb-1501b342a7b1", + "invariantUuid": "73f89e21-b96c-473f-8884-8b93bcbd2f76", + "description": "A Proxy for Service MISVPN_SERVICE", + "name": "MISVPN_SERVICE Service Proxy", + "version": "3.0", + "customizationUuid": "4c2fb7e0-a0a5-4b32-b6ed-6a974e55d923", + "inputs": {}, + "commands": {}, + "properties": {"ecomp_generated_naming": "false"}, + "type": "Service Proxy", + "sourceModelUuid": "d5cc7d15-c842-450e-95ae-2a69e66dd23b", + "sourceModelInvariant": "c126ec86-59fe-48c0-9532-e39a9b3e5272", + "sourceModelName": "MISVPN_SERVICE" + } + }, + "vfModules": {}, + "volumeGroups": {}, + "pnfs": {}, + "vnfGroups": {}, + "vrfs": { + "VRF Entry Configuration 0": { + "uuid": "9cac02be-2489-4374-888d-2863b4511a59", + "invariantUuid": "b67a289b-1688-496d-86e8-1583c828be0a", + "description": "VRF Entry configuration object", + "name": "VRF Entry Configuration", + "version": "30.0", + "customizationUuid": "dd024d73-9bd1-425d-9db5-476338d53433", + "inputs": {}, + "commands": {}, + "properties": {"ecomp_generated_naming": "false"}, + "type": "Configuration", + "modelCustomizationName": "VRF Entry Configuration 0", + "sourceNodes": [], + "collectorNodes": null, + "configurationByPolicy": false + } + } + } + }, + "serviceInstance": { + "f028b2e2-7080-4b13-91b2-94944d4c42d8": { + "action": "Create", + "isDirty": false, + "vnfs": {}, + "vrfs": {}, + "instanceParams": [{}], + "validationCounter": 0, + "existingNames": {"dfd": ""}, + "existingVNFCounterMap": {}, + "existingVRFCounterMap": {}, + "existingVnfGroupCounterMap": {}, + "existingNetworksCounterMap": {}, + "optionalGroupMembersMap": {}, + "networks": {}, + "vnfGroups": {}, + "bulkSize": 1, + "instanceName": "dfd", + "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89", + "subscriptionServiceType": "TYLER SILVIA", + "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "projectName": "WATKINS", + "rollbackOnFailure": "true", + "aicZoneName": null, + "owningEntityName": "WayneHolland", + "testApi": "VNF_API", + "tenantName": null, + "modelInfo": { + "modelInvariantId": "dfc2c44c-2429-44ca-ae26-1e6dc1f207fb", + "modelVersionId": "f028b2e2-7080-4b13-91b2-94944d4c42d8", + "modelName": "infraVPN", + "modelVersion": "1.0", + "uuid": "f028b2e2-7080-4b13-91b2-94944d4c42d8", + "modelUniqueId": "f028b2e2-7080-4b13-91b2-94944d4c42d8" + }, + "isALaCarte": true, + "name": "infraVPN", + "version": "1.0", + "description": "ddd", + "category": "Network Service", + "uuid": "f028b2e2-7080-4b13-91b2-94944d4c42d8", + "invariantUuid": "dfc2c44c-2429-44ca-ae26-1e6dc1f207fb", + "serviceType": "BONDING", + "serviceRole": "INFRASTRUCTURE-VPN", + "vidNotions": {"instantiationUI": "macroService", "modelCategory": "other", "viewEditUI": "legacy"}, + "isEcompGeneratedNaming": true, + "isMultiStepDesign": false + } + }, + "type": "UPDATE_CATEGORY_PARAMETERS", + "categoryParameters": { + "owningEntityList": [{ + "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + "name": "WayneHolland" + }, {"id": "Melissa", "name": "Melissa"}, {"id": "aaa1", "name": "aaa1"}], + "projectList": [{"id": "WATKINS", "name": "WATKINS"}, {"id": "x1", "name": "x1"}, {"id": "yyy1", "name": "yyy1"}], + "lineOfBusinessList": [{"id": "ONAP", "name": "ONAP"}, {"id": "zzz1", "name": "zzz1"}], + "platformList": [{"id": "platform", "name": "platform"}, {"id": "xxx1", "name": "xxx1"}] + } + } + }); + const networkStep = service.getNetworkStep( + "f028b2e2-7080-4b13-91b2-94944d4c42d8", + { + data: { + children: [], + componentInfoType: "VRF", + count: 0, + disabled: false, + id: "dd024d73-9bd1-425d-9db5-476338d53433", + isEcompGeneratedNaming: false, + max: 1, + modelCustomizationId: "dd024d73-9bd1-425d-9db5-476338d53433", + modelUniqueId: "dd024d73-9bd1-425d-9db5-476338d53433", + modelVersionId: "9cac02be-2489-4374-888d-2863b4511a59", + name: "VRF Entry Configuration 0", + tooltip: "VRF", + type: "VRF", + typeName: "VRF" + } + }); + + + expect(networkStep.type).toEqual('Network'); + expect(networkStep.title).toEqual('Associate network to VRF Entry'); + expect(networkStep.description).toEqual('Select a network to associate to the VRF Entry'); + expect(networkStep.noElementsMsg).toEqual('No network were found.'); + expect(networkStep.maxSelectRow).toEqual(1); + expect(networkStep.uniqObjectField).toEqual('instanceId'); + expect(networkStep.topButton.text).toEqual('Next'); + expect(networkStep.criteria).toHaveLength(1); + + }); + + test('getsNetworkStepSearchFields', () => { + const networkStepSearchFields = service.getsNetworkStepSearchFields({ + "lcpCloudRegionId": "lcpCloudRegionId", + "tenantName": "tenantName" + }); + + expect(networkStepSearchFields[0].value).toEqual("lcpCloudRegionId"); + expect(networkStepSearchFields[1].value).toEqual("tenantName"); + expect(networkStepSearchFields[2].value).toEqual("Active"); + expect(networkStepSearchFields[3].value).toEqual("VPN binding"); + }); + + test('generateRolesOptions should sort networks roles, check if should add "Not assigned" option', () => { + const networks = [ + {"role": "2"}, + {"role": "3"}, + {"role": "4"}, + {"role": "1"}, + {"role": "6"} + ]; + + spyOn(store, 'dispatch'); + + service.generateRolesOptions(networks); + expect(store.dispatch).toHaveBeenCalledWith(updateGenericModalCriteria("roles", ["-- select an option --", "1", "2", "3", "4", "6"])) + + networks.push({"role": null}); + service.generateRolesOptions(networks); + expect(store.dispatch).toHaveBeenCalledWith(updateGenericModalCriteria("roles", ["-- select an option --", "Not assigned", "1", "2", "3", "4", "6"])) + }); + + test('shouldAddNotAssigned- check if "Not Assigned" option to roles', () => { + const networks = [ + {"role": "5"}, + {"role": "3"}, + {"role": "4"}, + {"role": "1"}, + {"role": "6"} + ]; + + let result: boolean = service.shouldAddNotAssigned(networks); + expect(result).toBeFalsy(); + + networks.push({"role": null}); + + result = service.shouldAddNotAssigned(networks); + expect(result).toBeTruthy(); + }); + + + test('getNetworkStepHeaders should return the correct headers for network popup', () => { + let headers = service.getNetworkStepHeaders(); + + expect(headers[0].displayName).toEqual('Name'); + expect(headers[0].key).toEqual(['instanceName']); + + expect(headers[1].displayName).toEqual('Type'); + expect(headers[1].key).toEqual(['instanceType']); + + expect(headers[2].displayName).toEqual('Role'); + expect(headers[2].key).toEqual(['role']); + + expect(headers[3].displayName).toEqual('Orch. Status'); + expect(headers[3].key).toEqual(['orchStatus']); + + expect(headers[4].displayName).toEqual('Physical name'); + expect(headers[4].key).toEqual(['physicalName']); + + expect(headers[5].displayName).toEqual('Instance ID'); + expect(headers[5].key).toEqual(['instanceId']); + + expect(headers[6].displayName).toEqual('Model UUID'); + expect(headers[6].key).toEqual(['modelInfo', 'modelVersionId']); + + expect(headers[7].displayName).toEqual('Service name'); + expect(headers[7].key).toEqual(['serviceName']); + + expect(headers[8].displayName).toEqual('Service UUID'); + expect(headers[8].key).toEqual(['serviceUUID']); + + expect(headers[9].displayName).toEqual('Tenant'); + expect(headers[9].key).toEqual(['tenantName']); + + expect(headers[10].displayName).toEqual('Region'); + expect(headers[10].key).toEqual(['lcpCloudRegionId']); + }); + + test('getElementsFirstStep should return sort networks by instance name', () => { + let networks = [ + {"instanceUUID": "B"}, + {"instanceUUID": "A"}, + {"instanceUUID": "D"}, + {"instanceUUID": "C"}, + {"instanceUUID": "E"} + ]; + + let sortedNetworkByInstanceName = service.sortElementsResultByField(networks, "instanceUUID"); + expect(sortedNetworkByInstanceName).toEqual([ + {"instanceUUID": "A"}, + {"instanceUUID": "B"}, + {"instanceUUID": "C"}, + {"instanceUUID": "D"}, + {"instanceUUID": "E"} + ]) + }); + + + test('getNetworkTableContent', () => { + let tableContent: ITableContent[] = service.getNetworkTableContent(); + expect(tableContent).toEqual( + [ + { + id: 'instanceName', + contents: [{ + id: ['name'], + value: ["instanceName"] + }] + }, + { + id: 'instanceType', + contents: [{ + id: ['type'], + value: ['instanceType'] + }] + }, + { + id: 'role', + contents: [{ + id: ['role'], + value: ['role'] + }] + }, + { + id: 'network-orch-status', + contents: [{ + id: ['orchStatus'], + value: ['orchStatus'] + }] + }, + { + id: 'network-physical-name', + contents: [{ + id: ['physicalName'], + value: ['physicalName'] + }] + }, + { + id: 'network-instance-id', + contents: [{ + id: ['instanceID'], + value: ['instanceId'] + }] + }, + { + id: 'network-model-uuid', + contents: [{ + id: ['modelUUID'], + value: ['modelInfo', 'modelVersionId'] + }] + }, + { + id: 'network-serviceName', + contents: [{ + id: ['serviceName'], + value: ['serviceName'] + }] + }, + { + id: 'network-service-id', + contents: [{ + id: ['serviceUUID'], + value: ['serviceUUID'] + }] + }, + { + id: 'network-tenantName', + contents: [{ + id: ['tenant'], + value: ['tenantName'] + }] + }, + { + id: 'network-region', + contents: [{ + id: ['region'], + value: ['lcpCloudRegionId'] + }] + } + ]); + }); +}); diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.service.ts new file mode 100644 index 000000000..9cd928e8f --- /dev/null +++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/networkStep/network.step.service.ts @@ -0,0 +1,242 @@ +import {Injectable} from "@angular/core"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../../../../../../shared/store/reducers"; +import {AaiService} from "../../../../../../../shared/services/aaiService/aai.service"; +import { + updateGenericModalCriteria, + updateGenericModalhelper +} from "../../../../../../../shared/storeUtil/utils/global/global.actions"; +import {ElementsTableService} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.service"; +import { + ICriteria, ISearchField, ITableContent, + ModalInformation +} from "../../../../../../../shared/components/searchMembersModal/members-table/element-table-row.model"; +import {Observable, of} from "rxjs"; +import * as _ from "lodash"; +import {CustomTableColumnDefinition} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.component"; +import {NetworkModalRow} from "./network.step.model"; + +@Injectable() +export class NetworkStepService { + constructor(private _store: NgRedux, private _aaiService: AaiService) {} + + uniqObjectField: string = "instanceId"; + type: string = "Network"; + + getNetworkStep = (serviceInstance, serviceModelId, ...otherSteps): ModalInformation => { + return { + type: this.type, + serviceModelId: serviceModelId, + title: 'Associate network to VRF Entry', + description: 'Select a network to associate to the VRF Entry', + noElementsMsg: 'No network were found.', + maxSelectRow: 1, + uniqObjectField: this.uniqObjectField, + backAction: (searchElementsModalComponent) => { + searchElementsModalComponent.closeDialog(); + }, + topButton: { + text: 'Next', + action: (searchElementsModalComponent) => { + let tmpMembers = searchElementsModalComponent._membersTableService.allElementsStatusMap; + let vpnStep = otherSteps[0]; + for (let key in tmpMembers) { + if (tmpMembers[key].isSelected) { + this._store.dispatch(updateGenericModalhelper(`selected${this.type}`, tmpMembers[key], this.uniqObjectField)); + } + } + ElementsTableService.changeModalInformationDataTrigger.next({ + modalInformation: vpnStep.getVpnStep(serviceInstance, searchElementsModalComponent.modalInformation.serviceModelId, ...otherSteps), + selectedRowsIds: [] + }) + } + }, + searchButton: { + text: 'Search', + action: (searchElementsModalComponent) => { + this.getNetworks(serviceInstance).subscribe((networks) => { + const currentRole = searchElementsModalComponent.modalInformation.criteria.find((criteria: ICriteria) => { + criteria.label === 'Roles'; + }); + ElementsTableService.changeFnTableDataTrigger.next( + networks.filter((network) => { + if (_.isNil(currentRole)) return network; + return network.role === currentRole.currentValue; + })); + }); + } + }, + getElements: (...args) => this.getNetworks(serviceInstance), + criteria: this.getNetworkStepCriteria(serviceInstance), + searchFields: this.getsNetworkStepSearchFields(serviceInstance), + tableHeaders: this.getNetworkStepHeaders(), + tableContent: this.getNetworkTableContent() + }; + }; + + getNetworks = (serviceInstance): Observable => { + let cloudRegion = serviceInstance.lcpCloudRegionId; + let tenantId = serviceInstance.tenantName; + return this._aaiService.retrieveActiveNetwork(cloudRegion, tenantId).map((networks: NetworkModalRow[]) => { + this.generateRolesOptions(networks); + return this.sortElementsResultByField(networks, this.uniqObjectField); + }); + }; + + getNetworkStepCriteria(serviceInstance): ICriteria[] { + return [{ + label: "Roles", + defaultValue: "", + type: 'DROPDOWN', + onInit: (): Observable => of(this._store.getState().global.genericModalCriteria.roles), + onChange: (that, selectedOption): void => { + that.currentValue = selectedOption; + }, + dataTestId: 'roles-criteria', + isRequired: false + }] + } + + getsNetworkStepSearchFields = (serviceInstance): ISearchField[] => { + return [ + { + title: 'Region', + dataTestId: 'Region', + value: serviceInstance["lcpCloudRegionId"], + type: "LABEL" + }, { + title: 'Tenant', + dataTestId: 'Tenant', + value: serviceInstance["tenantName"], + type: "LABEL" + }, + { + title: 'Orch. status', + dataTestId: 'Orch_status', + value: "Active", + type: "LABEL" + }, + { + title: 'Related to', + dataTestId: 'Related_to', + value: "VPN binding", + type: "LABEL" + } + ] + }; + + generateRolesOptions = (networks): void => { + let roles: string[] = (_.uniq(_.flatten(_.map(networks, 'role').filter((role) => !_.isNil(role))))).sort(); + const SELECTED_AN_OPTION: string = "-- select an option --"; + const NOT_ASSIGNED: string = "Not assigned"; + + roles = _.remove([SELECTED_AN_OPTION, this.shouldAddNotAssigned(networks) ? NOT_ASSIGNED : null, ...roles], null); + this._store.dispatch(updateGenericModalCriteria("roles", roles)); + }; + + getNetworkStepHeaders = (): CustomTableColumnDefinition[] => { + return [ + {displayName: `Name`, key: ['instanceName']}, + {displayName: `Type`, key: ['instanceType']}, + {displayName: `Role`, key: ['role']}, + {displayName: 'Orch. Status', key: ['orchStatus']}, + {displayName: 'Physical name', key: ['physicalName']}, + {displayName: 'Instance ID', key: ['instanceId']}, + {displayName: 'Model UUID', key: ['modelInfo', 'modelVersionId']}, + {displayName: 'Service name', key: ['serviceName']}, + {displayName: 'Service UUID', key: ['serviceUUID']}, + {displayName: 'Tenant', key: ['tenantName']}, + {displayName: 'Region', key: ['lcpCloudRegionId']} + ]; + }; + + getNetworkTableContent = (): ITableContent[] => { + return [ + { + id: 'instanceName', + contents: [{ + id: ['name'], + value: ["instanceName"] + }] + }, + { + id: 'instanceType', + contents: [{ + id: ['type'], + value: ['instanceType'] + }] + }, + { + id: 'role', + contents: [{ + id: ['role'], + value: ['role'] + }] + }, + { + id: 'network-orch-status', + contents: [{ + id: ['orchStatus'], + value: ['orchStatus'] + }] + }, + { + id: 'network-physical-name', + contents: [{ + id: ['physicalName'], + value: ['physicalName'] + }] + }, + { + id: 'network-instance-id', + contents: [{ + id: ['instanceID'], + value: ['instanceId'] + }] + }, + { + id: 'network-model-uuid', + contents: [{ + id: ['modelUUID'], + value: ['modelInfo', 'modelVersionId'] + }] + }, + { + id: 'network-serviceName', + contents: [{ + id: ['serviceName'], + value: ['serviceName'] + }] + }, + { + id: 'network-service-id', + contents: [{ + id: ['serviceUUID'], + value: ['serviceUUID'] + }] + }, + { + id: 'network-tenantName', + contents: [{ + id: ['tenant'], + value: ['tenantName'] + }] + }, + { + id: 'network-region', + contents: [{ + id: ['region'], + value: ['lcpCloudRegionId'] + }] + } + ]; + }; + + sortElementsResultByField = (elements, fieldName): any[] => { + return _.sortBy(elements, o => o[fieldName]); + }; + + shouldAddNotAssigned = (networks): boolean => { + return _.values(networks).some(network => _.isNil(network.role) || network.role === ""); + }; +} diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.model.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.model.ts new file mode 100644 index 000000000..ea3c69690 --- /dev/null +++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.model.ts @@ -0,0 +1,17 @@ +export class VPNModalRow { + instanceId: string; + instanceName: string; + platformName: string; + instanceType: string; + region: string; + customerId: string; + modelInfo : { + modelCustomizationId: string; + modelInvariantId: string; + modelVersionId: string; + }; + routeTargets: { + "globalRouteTarget" : string, + "routeTargetRole" : string + }[]; +} diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.spec.ts new file mode 100644 index 000000000..b64b2f1b5 --- /dev/null +++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.spec.ts @@ -0,0 +1,463 @@ +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../../../../../../shared/store/reducers"; +import {getTestBed, TestBed} from "@angular/core/testing"; +import {NgReduxTestingModule} from "@angular-redux/store/testing"; +import {HttpClientTestingModule} from "@angular/common/http/testing"; +import {FeatureFlagsService} from "../../../../../../../shared/services/featureFlag/feature-flags.service"; +import {AaiService} from "../../../../../../../shared/services/aaiService/aai.service"; +import {VpnStepService} from "./vpn.step.service"; +import {NetworkStepService} from "../networkStep/network.step.service"; +import {ITableContent} from "../../../../../../../shared/components/searchMembersModal/members-table/element-table-row.model"; +import {SearchElementsModalComponent} from "../../../../../../../shared/components/searchMembersModal/search-elements-modal.component"; +import {ElementsTableService} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.service"; +import {DataFilterPipe} from "../../../../../../../shared/pipes/dataFilter/data-filter.pipe"; +import * as _ from "lodash"; + +describe('VPN step service', () => { + let injector; + let service: VpnStepService; + let memberTableService: ElementsTableService; + let store: NgRedux; + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + imports: [NgReduxTestingModule, HttpClientTestingModule], + providers: [ + VpnStepService, + NetworkStepService, + FeatureFlagsService, + AaiService, + ElementsTableService, + DataFilterPipe + ] + }); + await TestBed.compileComponents(); + injector = getTestBed(); + service = injector.get(VpnStepService); + store = injector.get(NgRedux); + memberTableService = injector.get(ElementsTableService); + })().then(done).catch(done.fail)); + + test('service should be defined', () => { + expect(service).toBeDefined(); + }); + + test('getVPNStepHeaders', () => { + let vpnHeaders = service.getVPNStepHeaders(); + expect(vpnHeaders).toEqual([ + {displayName: `VPN instance name`, key: ['instanceName']}, + {displayName: `Version`, key: ['modelInfo', 'modelVersionId']}, + {displayName: `Instance ID`, key: ['instanceId']}, + {displayName: `Platform`, key: ['platformName']}, + {displayName: 'Region', key: ['region']}, + {displayName: 'Route target', key: ['routeTargets', 'globalRouteTarget'], type: "LIST"}, + {displayName: 'Route target role', key: ['routeTargets', 'routeTargetRole'], type: "LIST"}, + {displayName: 'Customer VPN ID', key: ['customerId']}, + ]); + }); + + + test('vpnStep', () => { + spyOn(store, 'getState').and.returnValue({ + "global": { + "genericModalHelper": { + "selectedNetwork": { + "action": "None", + "instanceName": "NETWORK_1_INSTANCE_NAME", + "instanceId": "NETWORK_1_INSTANCE_ID", + "orchStatus": null, + "productFamilyId": null, + "lcpCloudRegionId": "hvf23b", + "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a", + "tenantName": "APPC-24595-T-IST-02C", + "modelInfo": { + "modelInvariantId": "network-instance-model-invariant-id", + "modelVersionId": "7a6ee536-f052-46fa-aa7e-2fca9d674c44", + "modelVersion": "2.0", + "modelName": "vf_vEPDG", + "modelType": "vnf" + }, + "roles": ["network role 1", "network role 2"], + "instanceType": "NETWORK_1_INSTANCE_TYPE", + "provStatus": null, + "inMaint": false, + "uuid": "7a6ee536-f052-46fa-aa7e-2fca9d674c44", + "originalName": null, + "legacyRegion": null, + "lineOfBusiness": null, + "platformName": null, + "trackById": "VNF1_INSTANCE_ID", + "serviceInstanceId": "service-instance-id1", + "serviceInstanceName": "service-instance-name", + "isSelected": true + }, + "selectedVpn": { + "vpn-id": "120d39fb-3627-473d-913c-d228dd0f8e5b", + "vpn-name": "LPPVPN", + "vpn-platform": "AVPN", + "vpn-type": "SERVICE-INFRASTRUCTURE", + "vpn-region": "USA,EMEA", + "customer-vpn-id": "VPN1260", + "model-customization-id": null, + "model-invariant-id": null, + "model-version-id": null, + "route-targets": null, + "isSelected": true + } + }, + }, "service": {} + }); + const networkStep = service.getVpnStep( + "f028b2e2-7080-4b13-91b2-94944d4c42d8", + { + data: { + children: [], + componentInfoType: "VRF", + count: 0, + disabled: false, + id: "dd024d73-9bd1-425d-9db5-476338d53433", + isEcompGeneratedNaming: false, + max: 1, + modelCustomizationId: "dd024d73-9bd1-425d-9db5-476338d53433", + modelUniqueId: "dd024d73-9bd1-425d-9db5-476338d53433", + modelVersionId: "9cac02be-2489-4374-888d-2863b4511a59", + name: "VRF Entry Configuration 0", + tooltip: "VRF", + type: "VRF", + typeName: "VRF" + } + }); + + expect(networkStep.type).toEqual('VPN'); + expect(networkStep.title).toEqual('Associate VPN'); + expect(networkStep.description).toEqual('Select a VPN to associate to the VRF Entry'); + expect(networkStep.noElementsMsg).toEqual('No VPN instances were found.'); + expect(networkStep.maxSelectRow).toEqual(1); + expect(networkStep.uniqObjectField).toEqual('instanceId'); + expect(networkStep.topButton.text).toEqual('SET VPN'); + expect(networkStep.criteria).toHaveLength(0); + + }); + + test('getsVPNStepSearchFields', () => { + const networkStepSearchFields = service.getsVPNStepSearchFields(); + expect(networkStepSearchFields[0].value).toEqual("SERVICE-INFRASTRUCTURE"); + }); + + test('getVpnStepHeaders should return the correct headers for vpn popup', () => { + let headers = service.getVPNStepHeaders(); + expect(headers[0].displayName).toEqual('VPN instance name'); + expect(headers[0].key).toEqual(['instanceName']); + + expect(headers[1].displayName).toEqual('Version'); + expect(headers[1].key).toEqual(['modelInfo', 'modelVersionId']); + + expect(headers[2].displayName).toEqual('Instance ID'); + expect(headers[2].key).toEqual(['instanceId']); + + expect(headers[3].displayName).toEqual('Platform'); + expect(headers[3].key).toEqual(['platformName']); + + expect(headers[4].displayName).toEqual('Region'); + expect(headers[4].key).toEqual(['region']); + + expect(headers[5].displayName).toEqual('Route target'); + expect(headers[5].key).toEqual(['routeTargets', 'globalRouteTarget']); + + expect(headers[6].displayName).toEqual('Route target role'); + expect(headers[6].key).toEqual(['routeTargets', 'routeTargetRole']); + + expect(headers[7].displayName).toEqual('Customer VPN ID'); + expect(headers[7].key).toEqual(['customerId']); + + }); + + test('getElementsFirstStep should return sort vpns by name', () => { + let vpns = [ + {"name": "B"}, + {"name": "A"}, + {"name": "D"}, + {"name": "C"}, + {"name": "E"} + ]; + + let sortedNetworkByInstanceName = service.sortElementsResultByField(vpns, "name"); + expect(sortedNetworkByInstanceName).toEqual([ + {"name": "A"}, + {"name": "B"}, + {"name": "C"}, + {"name": "D"}, + {"name": "E"} + ]) + }); + + test('getVpnTableContent', () => { + let tableContent: ITableContent[] = service.getVPNTableContent(); + expect(tableContent).toEqual( + [ + { + id: 'vpn-name', + contents: [{ + id: ['vpn-name'], + value: ['instanceName'] + }] + }, + { + id: 'model-version-id', + contents: [{ + id: ['model-version-id'], + value: ['modelInfo', 'modelVersionId'] + }] + }, + { + id: 'vpn-id', + contents: [{ + id: ['vpn-id'], + value: ['instanceId'] + }] + }, + { + id: 'vpn-platform', + contents: [{ + id: ['vpn-platform'], + value: ['platformName'] + }] + }, + { + id: 'vpn-region', + contents: [{ + id: ['vpn-region'], + value: ['region'] + }] + }, + { + id: 'global-route-target', + contents: [{ + id: ['global-route-target'], + value: ['routeTargets', 'globalRouteTarget'], + type: 'LIST' + }] + }, + { + id: 'route-target-role', + contents: [{ + id: ['route-target-role'], + value: ['routeTargets', 'routeTargetRole'], + type: 'LIST' + }] + }, + { + id: 'customer-vpn-id', + contents: [{ + id: ['customer-vpn-id'], + value: ['customerId'] + }] + } + ] + ) + }); + + test('associateVrfNetworkMember', () => { + const vrfStoreKey: string = 'vrfStoreKey'; + const serviceModelId: string = 'serviceModelId'; + const reduxState = { + "global": { + "genericModalHelper": { + "selectedNetwork": { + "10a74149-c9d7-4918-bbcf-d5fb9b1799ce": true + } + } + } + }; + spyOn(store, 'dispatch'); + spyOn(store, 'getState').and.returnValue(reduxState); + let searchElementsModalComponent = new SearchElementsModalComponent(null, null, null, null, null); + + searchElementsModalComponent.modalInformation = { + serviceModelId: serviceModelId + }; + service.associateVrfNetworkMember(searchElementsModalComponent, vrfStoreKey); + expect(store.dispatch).toHaveBeenCalledTimes(Object.keys(reduxState.global.genericModalHelper.selectedNetwork).length); + }); + + test('associateVrfVPNMember', () => { + const vrfStoreKey: string = 'vrfStoreKey'; + const serviceModelId: string = 'serviceModelId'; + const members = { + "120d39fb-3627-473d-913c-d228dd0f8e5b": { + "instanceId": "120d39fb-3627-473d-913c-d228dd0f8e5b", + "instanceName": "LPPVPN", + "platformName": "AVPN", + "instanceType": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "VPN1260", + "modelInfo": { + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null, + }, + "routeTargets": [ + { + "globalRouteTarget": "globalRouteTarget_1", + "routeTargetRole": "routeTargetRole_1" + }, + { + "globalRouteTarget": "globalRouteTarget_2", + "routeTargetRole": "routeTargetRole_2" + }, + { + "globalRouteTarget": "globalRouteTarget_3", + "routeTargetRole": "routeTargetRole_3" + } + ], + "isSelected": true + }, + "c70391f3-a6e3-4874-9834-cbe12d7bf8b6": { + "instanceId": "c70391f3-a6e3-4874-9834-cbe12d7bf8b6", + "instanceName": "LPPVPN", + "platformName": "AVPN", + "instanceType": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "VPN1274", + "modelInfo": { + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null + }, + "routeTargets": null, + "isSelected": false + }, + "4776516b-7da2-446c-9ba7-47ca8c30c571": { + "instanceId": "4776516b-7da2-446c-9ba7-47ca8c30c571", + "instanceName": "LPPVPN", + "platformName": "AVPN", + "instanceType": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "VPN1275", + "modelInfo": { + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null + }, + + "routeTargets": null, + "isSelected": false + }, + "46fcb25a-e7ba-4d96-99ba-3bb6eae6aba7": { + "instanceId": "46fcb25a-e7ba-4d96-99ba-3bb6eae6aba7", + "instanceName": "LPPVPN", + "platformName": "AVPN", + "instanceType": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "VPN1271", + "modelInfo": { + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null, + }, + "routeTargets": null, + "isSelected": false + }, + "ffefbe38-3087-418a-87ae-f6582a15be78": { + "instanceId": "ffefbe38-3087-418a-87ae-f6582a15be78", + "instanceName": "LPPVPN", + "platformName": "AVPN", + "instanceType": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "VPN1272", + "modelInfo": { + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null, + }, + "routeTargets": null, + "isSelected": false + }, + "961d05be-ee41-40a2-8653-f603fc495175": { + "id": "961d05be-ee41-40a2-8653-f603fc495175", + "name": "LPPVPN", + "platform": "AVPN", + "type": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "VPN1273", + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null, + "routeTargets": null, + "isSelected": false + }, + "14bcfc2f-bbee-4fd9-89a5-42eb5dbb08d5": { + "instanceId": "14bcfc2f-bbee-4fd9-89a5-42eb5dbb08d5", + "instanceName": "LPPVPN", + "platformName": "AVPN", + "instanceType": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "913443", + "modelInfo": { + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null, + }, + "routeTargets": null, + "isSelected": false + }, + "89d4c968-158c-4722-a22c-c5c2ccc17fd5": { + "instanceId": "89d4c968-158c-4722-a22c-c5c2ccc17fd5", + "instanceName": "LPPVPN", + "platformName": "AVPN", + "instanceType": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "VPN1276", + "modelInfo": { + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null, + }, + "routeTargets": null, + "isSelected": false + }, + "3e7834fb-a8e0-4243-a837-5352ccab4602": { + "instanceId": "3e7834fb-a8e0-4243-a837-5352ccab4602", + "instanceName": "LPPVPN", + "platformName": "AVPN", + "instanceType": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "VPN1259", + "modelInfo": { + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null, + }, + "routeTargets": null, + "isSelected": false + }, + "844a1ea7-556a-4e49-8aa3-171f1db4ea02": { + "instanceId": "844a1ea7-556a-4e49-8aa3-171f1db4ea02", + "instanceName": "LPPVPN", + "platformName": "AVPN", + "instanceType": "SERVICE-INFRASTRUCTURE", + "region": "USA,EMEA", + "customerId": "VPN1277", + "modelInfo": { + "modelCustomizationId": null, + "modelInvariantId": null, + "modelVersionId": null, + }, + "routeTargets": null, + "isSelected": false + } + }; + spyOn(store, 'dispatch'); + memberTableService.allElementsStatusMap = members; + let searchElementsModalComponent = new SearchElementsModalComponent(null, null, null, memberTableService, null); + + searchElementsModalComponent.modalInformation = { + modalInformation: { + serviceModelId: serviceModelId + } + }; + + let memberArr = _.values(members); + service.associateVrfVPNMember(searchElementsModalComponent, vrfStoreKey); + expect(store.dispatch).toHaveBeenCalledTimes(memberArr.filter((item) => item.isSelected).length * 2); + }); +}); diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts new file mode 100644 index 000000000..5523cf1ff --- /dev/null +++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts @@ -0,0 +1,195 @@ +import {Injectable} from "@angular/core"; +import {NgRedux} from "@angular-redux/store"; +import {AppState} from "../../../../../../../shared/store/reducers"; +import {AaiService} from "../../../../../../../shared/services/aaiService/aai.service"; +import { + ISearchField, + ITableContent, + ModalInformation +} from "../../../../../../../shared/components/searchMembersModal/members-table/element-table-row.model"; +import {ElementsTableService} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.service"; +import { + clearAllGenericModalhelper, + updateGenericModalhelper +} from "../../../../../../../shared/storeUtil/utils/global/global.actions"; +import {Observable} from "rxjs"; +import {CustomTableColumnDefinition} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.component"; +import {VPNModalRow} from "./vpn.step.model"; +import {NetworkStepService} from "../networkStep/network.step.service"; +import * as _ from "lodash"; +import { + associateVRFMember, + clearAssociateVRFMemberInstance, + createVrfInstance +} from "../../../../../../../shared/storeUtil/utils/vrf/vrf.actions"; +import {calculateNextUniqueModelName} from "../../../../../../../shared/storeUtil/utils/vnf/vnf.reducers"; + +@Injectable() +export class VpnStepService { + constructor(private _store: NgRedux, private _aaiService: AaiService, private _networkStepService: NetworkStepService) { + } + + uniqObjectField: string = "instanceId"; + type: string = "VPN"; + + getVpnStep = (serviceInstance, serviceModelId, ...otherSteps): ModalInformation => { + return { + type: this.type, + serviceModelId: serviceModelId, + title: 'Associate VPN', + description: 'Select a VPN to associate to the VRF Entry', + noElementsMsg: 'No VPN instances were found.', + maxSelectRow: 1, + uniqObjectField: this.uniqObjectField, + backAction: (searchElementsModalComponent) => { + ElementsTableService.changeModalInformationDataTrigger.next({ + modalInformation: otherSteps[1].getNetworkStep(serviceInstance, searchElementsModalComponent.modalInformation.serviceModelId, ...otherSteps), + selectedRowsIds: [this._store.getState().global.genericModalHelper.selectedNetwork.instanceUUID] + }); + }, + topButton: { + text: 'SET VPN', + action: (searchElementsModalComponent) => { + let currentVRF = this._store.getState().global.genericModalHelper['currentVRF']; + const vrfStoreKey: string = _.isNil(currentVRF['vrfStoreKey']) + ? calculateNextUniqueModelName(currentVRF['model']['name'], searchElementsModalComponent.modalInformation.serviceModelId, this._store.getState().service, 'vrfs') + : currentVRF['vrfStoreKey']; + + + if (_.isNil(currentVRF['vrfStoreKey'])) { + this._store.dispatch(createVrfInstance(currentVRF['model'], serviceModelId, vrfStoreKey)); + } else { + this._store.dispatch(clearAssociateVRFMemberInstance(vrfStoreKey, serviceModelId, 'networks')); + this._store.dispatch(clearAssociateVRFMemberInstance(vrfStoreKey, serviceModelId, 'vpns')); + } + + this.associateVrfVPNMember(searchElementsModalComponent, vrfStoreKey); + this.associateVrfNetworkMember(searchElementsModalComponent, vrfStoreKey); + + this._store.dispatch(clearAllGenericModalhelper()); + searchElementsModalComponent.closeDialog(); + } + }, + getElements: () => this.getVPNs(), + criteria: [], + searchFields: this.getsVPNStepSearchFields(), + tableHeaders: this.getVPNStepHeaders(), + tableContent: this.getVPNTableContent() + }; + }; + + getVPNs = (): Observable => { + return this._aaiService.retrieveActiveVPNs().map((vpns: VPNModalRow[]) => { + return this.sortElementsResultByField(vpns, "instanceName"); + }); + }; + + sortElementsResultByField = (elements, fieldName): any[] => { + return _.sortBy(elements, o => o[fieldName]); + }; + + associateVrfVPNMember = (searchElementsModalComponent, vrfStoreKey): void => { + let tmpMembers = searchElementsModalComponent._membersTableService.allElementsStatusMap; + for (let key in tmpMembers) { + if (tmpMembers[key].isSelected) { + this._store.dispatch(updateGenericModalhelper(`selected${this.type}`, tmpMembers[key], this.uniqObjectField)); + this._store.dispatch(associateVRFMember(vrfStoreKey, searchElementsModalComponent.modalInformation.serviceModelId, tmpMembers[key], 'vpns')); + } + } + }; + + associateVrfNetworkMember = (searchElementsModalComponent, vrfStoreKey): void => { + let selectedNetworks = this._store.getState().global.genericModalHelper['selectedNetwork']; + for (let key in selectedNetworks) { + this._store.dispatch(associateVRFMember(vrfStoreKey, searchElementsModalComponent.modalInformation.serviceModelId, selectedNetworks[key], 'networks')); + } + }; + + getsVPNStepSearchFields = (): ISearchField[] => { + return [ + { + title: 'Type ', + dataTestId: 'Type', + value: "SERVICE-INFRASTRUCTURE", + type: "LABEL" + } + ] + }; + + getVPNStepHeaders = (): CustomTableColumnDefinition[] => { + return [ + {displayName: `VPN instance name`, key: ['instanceName']}, + {displayName: `Version`, key: ['modelInfo', 'modelVersionId']}, + {displayName: `Instance ID`, key: ['instanceId']}, + {displayName: `Platform`, key: ['platformName']}, + {displayName: 'Region', key: ['region']}, + {displayName: 'Route target', key: ['routeTargets', 'globalRouteTarget'], type: 'LIST'}, + {displayName: 'Route target role', key: ['routeTargets', 'routeTargetRole'], type: 'LIST'}, + {displayName: 'Customer VPN ID', key: ['customerId']}, + ]; + }; + + getVPNTableContent = (): ITableContent[] => { + return [ + { + id: 'vpn-name', + contents: [{ + id: ['vpn-name'], + value: ['instanceName'] + }] + }, + { + id: 'model-version-id', + contents: [{ + id: ['model-version-id'], + value: ['modelInfo', 'modelVersionId'] + }] + }, + { + id: 'vpn-id', + contents: [{ + id: ['vpn-id'], + value: ['instanceId'] + }] + }, + { + id: 'vpn-platform', + contents: [{ + id: ['vpn-platform'], + value: ['platformName'] + }] + }, + { + id: 'vpn-region', + contents: [{ + id: ['vpn-region'], + value: ['region'] + }] + }, + { + id: 'global-route-target', + contents: [{ + id: ['global-route-target'], + value: ['routeTargets', 'globalRouteTarget'], + type: 'LIST' + }] + }, + { + id: 'route-target-role', + contents: [{ + id: ['route-target-role'], + value: ['routeTargets', 'routeTargetRole'], + type: 'LIST' + }] + }, + { + id: 'customer-vpn-id', + contents: [{ + id: ['customer-vpn-id'], + value: ['customerId'] + }] + } + ]; + }; + +} -- cgit 1.2.3-korg