import { CreateVFModuleInstanceAction, DeleteActionVfModuleInstanceAction, DeleteVFModuleField, DeleteVfModuleInstanceAction, UndoDeleteActionVfModuleInstanceAction, UpdateVFModluePosition, UpdateVFModuleField, UpgradeVfModuleInstanceAction, VfModuleActions } from "./vfModule.actions"; import {vfModuleReducer} from "./vfModule.reducers"; import {VfModuleInstance} from "../../../models/vfModuleInstance"; import {ServiceInstanceActions} from "../../../models/serviceInstanceActions"; import each from "jest-each"; describe('vfModuleReducer', () => { test('#REMOVE_VNF_MODULE_INSTANCE : should delete existing vnf module by dynamicModelName', () => { let state = vfModuleReducer({ serviceInstance: { 'serviceModelId': { vnfs: { 'vfName': { vfModules: { 'modelName': { 'dynamicModelName1': {}, 'dynamicModelName2': {}, } } } } } } }, { type: VfModuleActions.REMOVE_VNF_MODULE_INSTANCE, modelName: 'modelName', vfName: 'vfName', vnfStoreKey: 'vfName', serviceModelId: 'serviceModelId', dynamicModelName: 'dynamicModelName1' }); expect(state).toBeDefined(); expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']['dynamicModelName2']).toBeDefined(); expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']['dynamicModelName1']).not.toBeDefined(); }); test('#DELETE_LAST_VNF_MODULE_INSTANCE : should delete existing vnf module', () => { let state = vfModuleReducer({ serviceInstance: { 'serviceModelId': { vnfs: { 'vfName': { vfModules: { 'modelName': { 'dynamicModelName': {} } } } } } } }, { type: VfModuleActions.REMOVE_VNF_MODULE_INSTANCE, modelName: 'modelName', vfName: 'vfName', vnfStoreKey: 'vfName', serviceModelId: 'serviceModelId', dynamicModelName: 'dynamicModelName' }); expect(state).toBeDefined(); expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']).not.toBeDefined(); }); test('#CREATE_VF_MODULE: should create new vfModule to existing VNF', () => { let vfModuleInstance: VfModuleInstance = new VfModuleInstance(); vfModuleInstance.instanceName = 'instanceName'; vfModuleInstance.isMissingData = false; vfModuleInstance.volumeGroupName = 'volumeGroupName'; let vfModule = vfModuleReducer({ serviceInstance: { 'serviceUuid': { vnfs: { 'vnfStoreKey': { 'vfModules': {} } } } } }, { type: VfModuleActions.CREATE_VF_MODULE, vfId: 'vfId', vfInstance: new VfModuleInstance(), vnfStoreKey: 'vnfStoreKey', serviceUuid: 'serviceUuid', index: 1 }).serviceInstance['serviceUuid'].vnfs['vnfStoreKey'].vfModules; let firstVfModuleName = Object.keys(vfModule)[0]; expect(vfModule[firstVfModuleName]).toBeDefined(); expect(vfModule[firstVfModuleName].isMissingData).toBeFalsy(); }); test('#UPDATE_VFMODULE_FEILD: should update field with some value', () => { const newFieldName = 'newFieldName'; const newFieldValue = 'newFieldValue'; let oldState = getReduxState(); let newState = vfModuleReducer(oldState, { type: VfModuleActions.UPDATE_VFMODULE_FEILD, dynamicModelName: 'dynamicModelName1', vnfStoreKey: 'vnfStoreKey', serviceId: 'serviceModelId', modelName: 'vfModuleModelName', fieldName: newFieldName, fieldValue: newFieldValue }); let vfModule = newState.serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName']['dynamicModelName1']; expect(vfModule[newFieldName]).toEqual(newFieldValue); }); test('#DELETE_VFMODULE_FEILD: should update field with some value', () => { const deleteFieldName = 'deleteFieldName'; let oldState = { serviceHierarchy: { 'serviceModelId': {} }, serviceInstance: { 'serviceModelId': { vnfs: { 'vnfStoreKey': { vfModules: { 'modelName': { 'dynamicModelName1': { isMissingData: true, [deleteFieldName]: true, action: 'None' }, 'dynamicModelName2': {}, } } } } } } }; let newState = vfModuleReducer(oldState, { type: VfModuleActions.DELETE_VFMODULE_FIELD, dynamicModelName: 'dynamicModelName1', vnfStoreKey: 'vnfStoreKey', serviceId: 'serviceModelId', modelName: 'modelName', deleteFieldName: deleteFieldName, }); let vfModule = newState.serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1']; expect(vfModule[deleteFieldName]).toBeUndefined(); }); test('#UPDATE_VFMODULE_POSITION: should update position', () => { let vfModule = vfModuleReducer({ serviceHierarchy: { 'serviceModelId': {} }, serviceInstance: { 'serviceModelId': { vnfs: { 'vfName': { vfModules: { 'modelName': { 'dynamicModelName': { isMissingData: true } } } } } } } }, { type: VfModuleActions.UPDATE_VFMODULE_POSITION, node: { position: 1, dynamicModelName: "dynamicModelName", modelName: "modelName" }, instanceId: "serviceModelId", vnfStoreKey: "vfName" }).serviceInstance['serviceModelId'].vnfs['vfName'].vfModules["modelName"]["dynamicModelName"]; expect(vfModule.position).toEqual(1); }); each([ ['for the first vfModule', 'dynamicModelName1', true], ['for the second vfModule', 'dynamicModelName2', true], ]). test('#DELETE_ACTION_VF_MODULE_INSTANCE %s', (description, dynamicModelName: string, isMissingData: boolean) => { let vfModule = vfModuleReducer(getReduxState(), getDeleteActionVfModule(dynamicModelName)) .serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName'][dynamicModelName]; expect(vfModule).toBeDefined(); expect(vfModule.isMissingData).toBeTruthy(); expect(vfModule.action).toEqual(ServiceInstanceActions.None_Delete); }); test('#DELETE_ACTION_VF_MODULE_INSTANCE set tenantId and lcpCloudRegion to VFM', () => { let vfModule = vfModuleReducer(getReduxState(), getDeleteActionVfModule('dynamicModelName1')) .serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName']['dynamicModelName1']; expect(vfModule).toBeDefined(); expect(vfModule.tenantId).toEqual('tenantId'); expect(vfModule.lcpCloudRegionId).toEqual('lcpCloudRegionId'); }); 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']; expect(vfModule).toBeDefined(); expect(vfModule.action).toEqual(ServiceInstanceActions.None); }); test('#UPGRADE_VFMODULE', () => { let vfModule = vfModuleReducer(getReduxState(), { type: VfModuleActions.UPGRADE_VFMODULE, dynamicModelName: 'dynamicModelName1', vnfStoreKey: 'vnfStoreKey', serviceId: 'serviceModelId', modelName: 'vfModuleModelName' }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['vfModuleModelName']['dynamicModelName1']; expect(vfModule.action).toEqual(ServiceInstanceActions.None_Upgrade); }); test('#UNDO_UPGRADE_VFMODULE', () => { let vfModule = vfModuleReducer({ serviceHierarchy: { 'serviceModelId': {} }, serviceInstance: { 'serviceModelId': { vnfs: { 'vnfStoreKey': { vfModules: { 'modelName': { 'dynamicModelName1': { isMissingData: true, action: 'None_Upgrade' }, 'dynamicModelName2': {}, } } } } } } }, { type: VfModuleActions.UNDO_UPGRADE_VFMODULE_ACTION, dynamicModelName: 'dynamicModelName1', vnfStoreKey: 'vnfStoreKey', serviceId: 'serviceModelId', modelName: 'modelName' }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1']; expect(vfModule.action).toEqual(ServiceInstanceActions.None); }); function getReduxState() { return { serviceHierarchy: { 'serviceModelId': {} }, serviceInstance: { 'serviceModelId': { vnfs: { 'vnfStoreKey': { tenantId: 'tenantId', lcpCloudRegionId: 'lcpCloudRegionId', vfModules: { 'vfModuleModelName': { 'dynamicModelName1': { isMissingData: true, action: 'None', }, 'dynamicModelName2': { action: 'None', isMissingData: true, }, } } } } } } } } function getDeleteActionVfModule(dynamicModelName?: string) { return { type: VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE, dynamicModelName: dynamicModelName, vnfStoreKey: 'vnfStoreKey', serviceId: 'serviceModelId', vfModuleModelName: 'vfModuleModelName', } } });