From 4464942ccab08ce2c562c7b27451d0f2c48cc1ff Mon Sep 17 00:00:00 2001 From: Alexey Sandler Date: Thu, 30 Apr 2020 11:26:40 +0300 Subject: Can't undo delete the second vfModule in drawing board - fix. Given two vfModules created under the same vnf, when try to undo delete action the second vfModule its status not updated to deleted. Issue-ID: VID-819 Signed-off-by: Alexey Sandler Change-Id: I8b14896be68a3aa132027f007ec0695ff706339c --- .../models/vfModule/vfModule.model.info.ts | 2 +- .../storeUtil/utils/vfModule/vfModule.actions.ts | 6 +- .../utils/vfModule/vfModule.reducers.spec.ts | 80 +++++++++++++--------- .../storeUtil/utils/vfModule/vfModule.reducers.ts | 23 +++---- 4 files changed, 63 insertions(+), 48 deletions(-) diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts index b1a67a5bc..c7c4d3a56 100644 --- a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts +++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts @@ -358,7 +358,7 @@ export class VFModuleModelInfo implements ILevelNodeInfo { }, undoDelete: { method: (node, serviceModelId) => { - this._store.dispatch(undoDeleteVfModuleInstance(node.data.dynamicModelName, node.parent.data.vnfStoreKey, serviceModelId)); + this._store.dispatch(undoDeleteVfModuleInstance(node.data.dynamicModelName, node.parent.data.vnfStoreKey, serviceModelId, node.data.modelName)); this._store.dispatch(deleteVFModuleField(node.data.modelName, node.parent.data.vnfStoreKey, node.data.servicedId ,node.data.dynamicModelName, 'retainAssignments')); }, visible: (node) => this._sharedTreeService.shouldShowUndoDelete(node), diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.actions.ts index ac26ba936..40c1ea9e4 100644 --- a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.actions.ts +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.actions.ts @@ -86,6 +86,7 @@ export interface UndoDeleteActionVfModuleInstanceAction extends Action { dynamicModelName: string; vnfStoreKey : string; serviceId?: string; + vfModuleModelName: string; } export const removeVfModuleInstance: ActionCreator = (modelName, serviceModelId, vfName, vnfStoreKey, dynamicModelName) => ({ @@ -124,11 +125,12 @@ export const deleteActionVfModuleInstance: ActionCreator = (dynamicModelName, vnfStoreKey, serviceId) => ({ +export const undoDeleteVfModuleInstance: ActionCreator = (dynamicModelName, vnfStoreKey, serviceId, vfModuleModelName) => ({ type: VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE, dynamicModelName: dynamicModelName, vnfStoreKey : vnfStoreKey, - serviceId: serviceId + serviceId: serviceId, + vfModuleModelName }); export const updateVFModulePosition: ActionCreator = (node, instanceId, vnfStoreKey) => ({ diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.spec.ts index 9bbcf46f7..7ec221a02 100644 --- a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.spec.ts +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.spec.ts @@ -204,10 +204,10 @@ test('#UPDATE_VFMODULE_POSITION: should update position', () => { }); each([ - ['for the first vfModule', 'dynamicModelName1', true], - ['for the second vfModule', 'dynamicModelName2', true], + ['for the first vfModule', 'dynamicModelName1'], + ['for the second vfModule', 'dynamicModelName2'], ]). -test('#DELETE_ACTION_VF_MODULE_INSTANCE %s', (description, dynamicModelName: string, isMissingData: boolean) => { +test('#DELETE_ACTION_VF_MODULE_INSTANCE %s', (description, dynamicModelName: string) => { let vfModule = vfModuleReducer(getReduxState(), getDeleteActionVfModule(dynamicModelName)) .serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName'][dynamicModelName]; @@ -226,35 +226,13 @@ test('#DELETE_ACTION_VF_MODULE_INSTANCE set tenantId and lcpCloudRegion to VFM', }); -test('#UNDO_DELETE_ACTION_VF_MODULE_INSTANCE', () => { - let vfModule = vfModuleReducer({ - serviceHierarchy: { - 'serviceModelId': {} - }, - serviceInstance: { - 'serviceModelId': { - vnfs: { - 'vnfStoreKey': { - vfModules: { - 'modelName': { - 'dynamicModelName1': { - isMissingData: true, - action: 'None_Delete' - }, - 'dynamicModelName2': {}, - } - } - } - } - } - } - }, - { - type: VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE, - dynamicModelName: 'dynamicModelName1', - vnfStoreKey: 'vnfStoreKey', - serviceId: 'serviceModelId' - }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1']; + each([ + ['for the first vfModule', 'dynamicModelName1', true], + ['for the second vfModule', 'dynamicModelName2', true], + ]). +test('#UNDO_DELETE_ACTION_VF_MODULE_INSTANCE %s', (description, dynamicModelName: string) => { + let vfModule = vfModuleReducer(getDeleteRedux(), getUndoDeleteActionVfModule(dynamicModelName)) + .serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName'][dynamicModelName]; expect(vfModule).toBeDefined(); expect(vfModule.action).toEqual(ServiceInstanceActions.None); @@ -346,4 +324,42 @@ function getDeleteActionVfModule(dynamicModelName?: string) { vfModuleModelName: 'vfModuleModelName', } } + +function getUndoDeleteActionVfModule(dynamicModelName?: string) { + return { + type: VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE, + dynamicModelName: dynamicModelName, + vnfStoreKey: 'vnfStoreKey', + serviceId: 'serviceModelId', + vfModuleModelName: 'vfModuleModelName', + } +} + +function getDeleteRedux() { + return { + serviceHierarchy: { + 'serviceModelId': {} + }, + serviceInstance: { + 'serviceModelId': { + vnfs: { + 'vnfStoreKey': { + vfModules: { + 'vfModuleModelName': { + 'dynamicModelName1': { + isMissingData: true, + action: 'None_Delete' + }, + 'dynamicModelName2': { + isMissingData: true, + action: 'None_Delete' + }, + } + } + } + } + } + } + } +} }); diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts index 9c624b055..8efecf2ca 100644 --- a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts @@ -70,7 +70,7 @@ export function vfModuleReducer(state: ServiceState , action: Action) : ServiceS return Object.assign({}, state); } case VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE : { - let deleteAction = (action); + const deleteAction = (action); let newState = _.cloneDeep(state); let vfModule = newState.serviceInstance[deleteAction.serviceId].vnfs[deleteAction.vnfStoreKey] .vfModules[deleteAction.vfModuleModelName][deleteAction.dynamicModelName]; @@ -79,23 +79,20 @@ export function vfModuleReducer(state: ServiceState , action: Action) : ServiceS newState.serviceInstance[deleteAction.serviceId].vnfs[deleteAction.vnfStoreKey] .vfModules[deleteAction.vfModuleModelName][deleteAction.dynamicModelName].action = (oldAction + '_Delete') as ServiceInstanceActions; setLcpCloudRegionIdAndTenantIdFromVnf(newState, deleteAction.serviceId, deleteAction.vnfStoreKey, deleteAction.vfModuleModelName, deleteAction.dynamicModelName); - updateIsMissingDataOnDeleteVFModule(newState, (action).serviceId, (action).vnfStoreKey, deleteAction.vfModuleModelName); + updateIsMissingDataOnDeleteVFModule(newState, deleteAction.serviceId, deleteAction.vnfStoreKey, deleteAction.vfModuleModelName); return newState; } case VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE : { + const undoDeleteAction = (action); let newState = _.cloneDeep(state); - let vfModules = newState.serviceInstance[(action).serviceId].vnfs[(action).vnfStoreKey].vfModules; - - for(let key in vfModules){ - let firstKey = Object.keys(vfModules[key])[0]; - if(firstKey === (action).dynamicModelName){ - let oldAction = newState.serviceInstance[(action).serviceId].vnfs[(action).vnfStoreKey].vfModules[key][firstKey].action; - newState.serviceInstance[(action).serviceId].vnfs[(action).vnfStoreKey].vfModules[key][firstKey].action = (oldAction.split('_')[0]) as ServiceInstanceActions; - updateIsMissingDataOnDeleteVFModule(newState, (action).serviceId, (action).vnfStoreKey, key); - return newState; - } - } + let vfModule = newState.serviceInstance[undoDeleteAction.serviceId].vnfs[undoDeleteAction.vnfStoreKey] + .vfModules[undoDeleteAction.vfModuleModelName][undoDeleteAction.dynamicModelName]; + + let oldAction = vfModule.action; + newState.serviceInstance[undoDeleteAction.serviceId].vnfs[undoDeleteAction.vnfStoreKey] + .vfModules[undoDeleteAction.vfModuleModelName][undoDeleteAction.dynamicModelName].action = (oldAction.split('_')[0]) as ServiceInstanceActions; + updateIsMissingDataOnDeleteVFModule(newState, undoDeleteAction.serviceId, undoDeleteAction.vnfStoreKey, undoDeleteAction.vfModuleModelName); return newState; } -- cgit 1.2.3-korg