VfModule upgrade: popup with retain-assignments checkbox 21/98721/4
authorYoav Schneiderman <yoav.schneiderman@intl.att.com>
Thu, 21 Nov 2019 14:17:55 +0000 (16:17 +0200)
committerYoav Schneiderman <yoav.schneiderman@intl.att.com>
Mon, 25 Nov 2019 10:42:52 +0000 (12:42 +0200)
Also:
 - undo upgrade -> remove field
 - cancel on popup works

Issue-ID: VID-603
Change-Id: I47106ce4d042c777b56699d8c5c5e1e99f856a5e
Signed-off-by: Yoav Schneiderman <yoav.schneiderman@intl.att.com>
vid-app-common/src/test/resources/payload_jsons/vfmodule/upgrade_vfmodule_e2e__fe_input_cypress.json
vid-app-common/src/test/resources/payload_jsons/vfmodule/upgrade_vfmodule_e2e__payload_to_mso.json
vid-webpack-master/cypress/integration/iFrames/viewEditUpgradeVfModule.e2e.ts
vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts
vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popuop.service.ts
vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popup.service.spec.ts
vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.actions.ts
vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.spec.ts
vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts

index 9571a2d..42a62e2 100644 (file)
@@ -1,6 +1,6 @@
 {
   "action": "None_Upgrade",
-  "isDirty": true,
+  "isDirty": false,
   "vnfs": {
     "d520268f-7489-4662-be59-f81495b3a069": {
       "action": "None_Upgrade",
@@ -33,6 +33,7 @@
         "xbitestmodulereplace0..XbiTestModuleReplace..base_ocg..module-0": {
           "b0732bed-3ddf-43cc-b193-7f18db84e476": {
             "action": "None_Upgrade",
+            "retainAssignments" : true,
             "instanceName": "PST-VfMod-Replace-5-Vfmod",
             "instanceId": "b0732bed-3ddf-43cc-b193-7f18db84e476",
             "orchStatus": "Active",
     "viewEditUI": "legacy",
     "instantiationType": "ALaCarte"
   }
-}
\ No newline at end of file
+}
index 4ca39b1..2d1ef87 100644 (file)
@@ -109,9 +109,11 @@ describe('View Edit Page: Upgrade VFModule', function () {
       upgradeTheVFM();
       cy.getDrawingBoardDeployBtn().click();
       cy.wait('@expectedPostAsyncInstantiation').then(xhr => {
-        expect(Object(xhr.request.body).action).to.equal("None_Upgrade");
-        expect(Object(xhr.request.body).vnfs['VNF2_INSTANCE_ID'].action).to.equal("None_Upgrade");
-        expect(Object(xhr.request.body).vnfs['VNF2_INSTANCE_ID'].vfModules['vf_vgeraldine0..VfVgeraldine..vflorence_vlc..module-1']['2c1ca484-cbc2-408b-ab86-25a2c15ce280'].action).to.equal("None_Upgrade");
+        const requestBody = Object(xhr.request.body);
+        const vfModuleRequest = requestBody.vnfs['VNF2_INSTANCE_ID'].vfModules['vf_vgeraldine0..VfVgeraldine..vflorence_vlc..module-1']['2c1ca484-cbc2-408b-ab86-25a2c15ce280'];
+          expect(requestBody.action).to.equal("None_Upgrade");
+        expect(requestBody.vnfs['VNF2_INSTANCE_ID'].action).to.equal("None_Upgrade");
+        expect(vfModuleRequest.action).to.equal("None_Upgrade");
       });
     });
 
@@ -213,6 +215,8 @@ describe('View Edit Page: Upgrade VFModule', function () {
     cy.getElementByDataTestsId(`${treeNodeId}-menu-btn`).click()
     .drawingBoardTreeClickOnContextMenuOptionByName("Upgrade");
     // The following is needed when enabling FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS
+
+    cy.getElementByDataTestsId('retainAssignments').click();
     cy.getElementByDataTestsId('form-set').click();
   }
 
index 2210d7c..5e14586 100644 (file)
@@ -20,10 +20,10 @@ import {MessageBoxService} from "../../../../../shared/components/messageBox/mes
 import {AvailableNodeIcons} from "../../../available-models-tree/available-models-tree.service";
 import {IframeService} from "../../../../../shared/utils/iframe.service";
 import {
-  deleteActionVfModuleInstance,
+  deleteActionVfModuleInstance, deleteVFModuleField,
   removeVfModuleInstance,
   undoDeleteVfModuleInstance,
-  undoUgradeVFModule,
+  undoUgradeVFModule, updateVFModuleField,
   updateVFModulePosition,
   upgradeVFModule
 } from "../../../../../shared/storeUtil/utils/vfModule/vfModule.actions";
@@ -354,7 +354,8 @@ 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));
+          this._store.dispatch(deleteVFModuleField(node.data.modelName,  node.parent.data.vnfStoreKey, node.data.servicedId ,node.data.dynamicModelName, 'retainAssignments'));
         },
         visible: (node) => this._sharedTreeService.shouldShowUndoDelete(node),
         enable: (node, serviceModelId) => this._sharedTreeService.shouldShowUndoDelete(node) && this._sharedTreeService.shouldShowDelete(node.parent) && !this._sharedTreeService.isServiceOnDeleteMode(serviceModelId)
@@ -386,9 +387,6 @@ export class VFModuleModelInfo implements ILevelNodeInfo {
   }
 
   private upgradeVFM(serviceModelId, node) {
-    this._sharedTreeService.upgradeBottomUp(node, serviceModelId);
-    this._store.dispatch(upgradeVFModule(node.data.modelName,  node.parent.data.vnfStoreKey, serviceModelId, node.data.dynamicModelName));
-
     if (FeatureFlagsService.getFlagState(Features.FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS, this._store)) {
       this._iframeService.addClassOpenModal('content');
       this._dialogService.addDialog(GenericFormPopupComponent, {
@@ -401,10 +399,14 @@ export class VFModuleModelInfo implements ILevelNodeInfo {
           modelId: node.data.modelId,
           type: node.data.type,
           popupService: this._vfModuleUpgradePopupService,
+          vfModule : _.cloneDeep(node)
         },
-        node: node,
+        node,
         isUpdateMode: false
       });
+    }else {
+      this._sharedTreeService.upgradeBottomUp(node, serviceModelId);
+      this._store.dispatch(upgradeVFModule(node.data.modelName,  node.parent.data.vnfStoreKey, serviceModelId ,node.data.dynamicModelName));
     }
   }
 
index a7f6d55..251a147 100644 (file)
@@ -3,9 +3,34 @@ import {ITreeNode} from "angular-tree-component/dist/defs/api";
 import {FormGroup} from "@angular/forms";
 import {VfModulePopuopService} from "../vfModule/vfModule.popuop.service";
 import {FormPopupDetails} from "../../../../models/formControlModels/formPopupDetails.model";
+import {updateVFModuleField, upgradeVFModule} from "../../../../storeUtil/utils/vfModule/vfModule.actions";
+import {SharedTreeService} from "../../../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../../../store/reducers";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {VfModuleControlGenerator} from "../../../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator";
+import {IframeService} from "../../../../utils/iframe.service";
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {
+  FormControlModel
+} from "../../../../models/formControlModels/formControl.model";
+import {CheckboxFormControl} from "../../../../models/formControlModels/checkboxFormControl.model";
+import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum";
 
 @Injectable()
 export class VfModuleUpgradePopupService extends VfModulePopuopService {
+  constructor(protected _basicControlGenerator: BasicControlGenerator,
+              protected _vfModuleControlGenerator: VfModuleControlGenerator,
+              protected _iframeService: IframeService,
+              protected _defaultDataGeneratorService: DefaultDataGeneratorService,
+              protected _aaiService: AaiService,
+              protected _basicPopupService : BasicPopupService,
+              protected _store: NgRedux<AppState>,
+              private _sharedTreeService : SharedTreeService){
+    super(_basicControlGenerator, _vfModuleControlGenerator, _iframeService, _defaultDataGeneratorService, _aaiService, _basicPopupService,_store);
+  }
   node: ITreeNode;
 
   getGenericFormPopupDetails(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
@@ -13,11 +38,31 @@ export class VfModuleUpgradePopupService extends VfModulePopuopService {
   }
 
   getDynamicInputs = () => [];
-  getControls = () => [];
+
+  getControls = () : FormControlModel[] => {
+    return [
+      new CheckboxFormControl({
+        type: FormControlType.CHECKBOX,
+        controlName: 'retainAssignments',
+        displayName: 'Retain Assignments',
+        dataTestId: 'retainAssignments',
+        value: false,
+        validations: []
+      })
+    ];
+  };
+
+
   getTitle = (): string => 'Upgrade Module';
 
   onSubmit(that, form: FormGroup) {
-    //that.storeVFModule(that, form.value);
+    const node = that.uuidData.vfModule;
+    const serviceInstanceId: string = that.uuidData.serviceId;
+
+    this._store.dispatch(upgradeVFModule(node.data.modelName,  node.parent.data.vnfStoreKey, serviceInstanceId ,node.data.dynamicModelName));
+    this._sharedTreeService.upgradeBottomUp(node, serviceInstanceId);
+    this._store.dispatch(updateVFModuleField(node.data.modelName,  node.parent.data.vnfStoreKey, serviceInstanceId ,node.data.dynamicModelName, 'retainAssignments', form.controls['retainAssignments'].value));
+
     this.postSubmitIframeMessage(that);
     this.onCancel(that, form);
   }
index 17054c7..50b0d36 100644 (file)
@@ -13,6 +13,7 @@ import {SdcUiServices} from "onap-ui-angular";
 import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
 import {getTestBed, TestBed} from "@angular/core/testing";
 import {VfModuleUpgradePopupService} from "./vfModule.upgrade.popuop.service";
+import {SharedTreeService} from "../../../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
 
 class MockModalService<T> {
 }
@@ -52,6 +53,7 @@ describe('VFModule popup service', () => {
         AaiService,
         LogService,
         BasicPopupService,
+        SharedTreeService,
         {provide: FeatureFlagsService, useClass: MockFeatureFlagsService},
         {provide: NgRedux, useClass: MockReduxStore},
         {provide: HttpClient, useClass: MockAppStore},
@@ -73,4 +75,15 @@ describe('VFModule popup service', () => {
     expect(service.getTitle()).toBe("Upgrade Module")
   });
 
+  test('get controls should return retainAssignments control with false i', ()=> {
+
+    const controls = service.getControls();
+
+    const retainAssignmentsControl = controls.find((control)=>{
+      return control.controlName === 'retainAssignments';
+    });
+
+    expect(retainAssignmentsControl).toBeDefined();
+    expect(retainAssignmentsControl.value).toBeFalsy();
+  });
 });
index 59e5ee1..70c10c4 100644 (file)
@@ -9,6 +9,8 @@ export enum VfModuleActions {
   UPDATE_VFMODULE_POSITION = "UPDATE_VFMODULE_POSITION",
   UPGRADE_VFMODULE = "UPGRADE_VFMODULE",
   UNDO_UPGRADE_VFMODULE_ACTION = "UNDO_UPGRADE_VFMODULE_ACTION",
+  UPDATE_VFMODULE_FEILD = "UPDATE_VFMODULE_FEILD",
+  DELETE_VFMODULE_FEILD = "DELETE_VFMODULE_FEILD",
 }
 
 
@@ -62,6 +64,23 @@ export interface UndoUpgradeVfModuleInstanceAction extends Action {
   dynamicModelName: string;
 }
 
+export interface UpdateVFModuleField extends Action {
+  modelName : string;
+  vnfStoreKey : string;
+  serviceId: string;
+  dynamicModelName: string;
+  fieldName: string;
+  fieldValue : any;
+}
+
+export interface DeleteVFModuleField extends Action {
+  modelName : string;
+  vnfStoreKey : string;
+  serviceId: string;
+  dynamicModelName: string;
+  deleteFieldName: string;
+}
+
 export interface UndoDeleteActionVfModuleInstanceAction extends Action {
   dynamicModelName: string;
   vnfStoreKey : string;
@@ -132,3 +151,22 @@ export const undoUgradeVFModule: ActionCreator<UndoUpgradeVfModuleInstanceAction
   vnfStoreKey,
   serviceId
 });
+
+export const updateVFModuleField: ActionCreator<UpdateVFModuleField> = (modelName, vnfStoreKey, serviceId, dynamicModelName, fieldName, fieldValue) => ({
+  type: VfModuleActions.UPDATE_VFMODULE_FEILD,
+  dynamicModelName,
+  modelName,
+  vnfStoreKey,
+  serviceId,
+  fieldName,
+  fieldValue
+});
+
+export const deleteVFModuleField: ActionCreator<DeleteVFModuleField> = (modelName, vnfStoreKey, serviceId, dynamicModelName, deleteFieldName) => ({
+  type: VfModuleActions.DELETE_VFMODULE_FEILD,
+  dynamicModelName,
+  modelName,
+  vnfStoreKey,
+  serviceId,
+  deleteFieldName
+});
index ee0edb0..7b890b7 100644 (file)
@@ -1,9 +1,9 @@
 import {
   CreateVFModuleInstanceAction,
-  DeleteActionVfModuleInstanceAction,
+  DeleteActionVfModuleInstanceAction, DeleteVFModuleField,
   DeleteVfModuleInstanceAction,
   UndoDeleteActionVfModuleInstanceAction,
-  UpdateVFModluePosition,
+  UpdateVFModluePosition, UpdateVFModuleField,
   UpgradeVfModuleInstanceAction,
   VfModuleActions
 } from "./vfModule.actions";
@@ -14,12 +14,13 @@ import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
 
 describe('vfModuleReducer', () => {
   test('#REMOVE_VNF_MODULE_INSTANCE : should delete existing vnf module by dynamicModelName', () => {
-    let state = vfModuleReducer(<any>{serviceInstance : {
-          'serviceModelId' : {
-            vnfs : {
-              'vfName' : {
-                vfModules : {
-                  'modelName' : {
+    let state = vfModuleReducer(<any>{
+        serviceInstance: {
+          'serviceModelId': {
+            vnfs: {
+              'vfName': {
+                vfModules: {
+                  'modelName': {
                     'dynamicModelName1': {},
                     'dynamicModelName2': {},
                   }
@@ -27,13 +28,14 @@ describe('vfModuleReducer', () => {
               }
             }
           }
-        }},
+        }
+      },
       <DeleteVfModuleInstanceAction>{
         type: VfModuleActions.REMOVE_VNF_MODULE_INSTANCE,
-        modelName : 'modelName',
-        vfName : 'vfName',
-        vnfStoreKey : 'vfName',
-        serviceModelId : 'serviceModelId',
+        modelName: 'modelName',
+        vfName: 'vfName',
+        vnfStoreKey: 'vfName',
+        serviceModelId: 'serviceModelId',
         dynamicModelName: 'dynamicModelName1'
       });
 
@@ -43,26 +45,27 @@ describe('vfModuleReducer', () => {
   });
 
   test('#DELETE_LAST_VNF_MODULE_INSTANCE : should delete existing vnf module', () => {
-    let state = vfModuleReducer(<any>{serviceInstance : {
-          'serviceModelId' : {
-            vnfs : {
-              'vfName' : {
-                vfModules : {
-                  'modelName' : {
-                    'dynamicModelName': {
-                    }
+    let state = vfModuleReducer(<any>{
+        serviceInstance: {
+          'serviceModelId': {
+            vnfs: {
+              'vfName': {
+                vfModules: {
+                  'modelName': {
+                    'dynamicModelName': {}
                   }
                 }
               }
             }
           }
-        }},
+        }
+      },
       <DeleteVfModuleInstanceAction>{
         type: VfModuleActions.REMOVE_VNF_MODULE_INSTANCE,
-        modelName : 'modelName',
-        vfName : 'vfName',
-        vnfStoreKey : 'vfName',
-        serviceModelId : 'serviceModelId',
+        modelName: 'modelName',
+        vfName: 'vfName',
+        vnfStoreKey: 'vfName',
+        serviceModelId: 'serviceModelId',
         dynamicModelName: 'dynamicModelName'
       });
 
@@ -70,28 +73,29 @@ describe('vfModuleReducer', () => {
     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();
+  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(<any>{serviceInstance : {
-          'serviceUuid' : {
-            vnfs : {
-              'vnfStoreKey' : {
-                'vfModules' : {
-                }
+    let vfModule = vfModuleReducer(<any>{
+        serviceInstance: {
+          'serviceUuid': {
+            vnfs: {
+              'vnfStoreKey': {
+                'vfModules': {}
               }
             }
           }
-        }},
+        }
+      },
       <CreateVFModuleInstanceAction>{
         type: VfModuleActions.CREATE_VF_MODULE,
-        vfId : 'vfId',
-        vfInstance : new VfModuleInstance(),
-        vnfStoreKey : 'vnfStoreKey',
-        serviceUuid : 'serviceUuid',
-        index : 1
+        vfId: 'vfId',
+        vfInstance: new VfModuleInstance(),
+        vnfStoreKey: 'vnfStoreKey',
+        serviceUuid: 'serviceUuid',
+        index: 1
       }).serviceInstance['serviceUuid'].vnfs['vnfStoreKey'].vfModules;
 
     let firstVfModuleName = Object.keys(vfModule)[0];
@@ -99,23 +103,64 @@ describe('vfModuleReducer', () => {
     expect(vfModule[firstVfModuleName].isMissingData).toBeFalsy();
   });
 
-  test('#UPDATE_VF_MODULE: should update existing VFModule', ()=>{
-    let vfModuleInstance : VfModuleInstance = new VfModuleInstance();
-    vfModuleInstance.instanceName = 'instanceName';
-    vfModuleInstance.isMissingData = false;
-    vfModuleInstance.volumeGroupName = 'volumeGroupName';
-    let vfModule = vfModuleReducer(<any>{
-        serviceHierarchy : {
-          'serviceModelId' : {}
+  test('#UPDATE_VFMODULE_FEILD: should update field with some value', () => {
+    const newFieldName = 'newFieldName';
+    const newFieldValue = 'newFieldValue';
+    let oldState = {
+      serviceHierarchy: {
+        'serviceModelId': {}
+      },
+      serviceInstance: {
+        'serviceModelId': {
+          vnfs: {
+            'vnfStoreKey': {
+              vfModules: {
+                'modelName': {
+                  'dynamicModelName1': {
+                    isMissingData: true,
+                    action: 'None'
+                  },
+                  'dynamicModelName2': {},
+                }
+              }
+            }
+          }
+        }
+      }
+    };
+
+    let newState = vfModuleReducer(<any>oldState,
+      <UpdateVFModuleField>{
+        type: VfModuleActions.UPDATE_VFMODULE_FEILD,
+        dynamicModelName: 'dynamicModelName1',
+        vnfStoreKey: 'vnfStoreKey',
+        serviceId: 'serviceModelId',
+        modelName: 'modelName',
+        fieldName: newFieldName,
+        fieldValue: newFieldValue
+      });
+
+    let vfModule = newState.serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['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 : {
-              'vfName' : {
-                vfModules : {
-                  'modelName' : {
+        serviceInstance: {
+          'serviceModelId': {
+            vnfs: {
+              'vnfStoreKey': {
+                vfModules: {
+                  'modelName': {
                     'dynamicModelName1': {
-                      isMissingData : true
+                      isMissingData: true,
+                      [deleteFieldName]: true,
+                      action: 'None'
                     },
                     'dynamicModelName2': {},
                   }
@@ -123,192 +168,197 @@ describe('vfModuleReducer', () => {
               }
             }
           }
-        }},
-      <CreateVFModuleInstanceAction>{
-        type: VfModuleActions.UPDATE_VF_MODULE,
-        vfId : 'modelName',
-        vfInstance : new VfModuleInstance(),
-        vnfStoreKey : 'vfName',
-        dynamicModelName : 'dynamicModelName1',
-        serviceUuid : 'serviceModelId',
-        index : 1
-      }).serviceInstance['serviceModelId'].vnfs['vfName'].vfModules;
+        }
+      };
+      let newState = vfModuleReducer(<any>oldState,
+    <DeleteVFModuleField>{
+      type: VfModuleActions.DELETE_VFMODULE_FEILD,
+      dynamicModelName: 'dynamicModelName1',
+      vnfStoreKey: 'vnfStoreKey',
+      serviceId: 'serviceModelId',
+      modelName: 'modelName',
+      deleteFieldName: deleteFieldName,
+    });
 
-    let firstVfModuleName = Object.keys(vfModule)[0];
-    expect(vfModule[firstVfModuleName]).toBeDefined();
-    expect(vfModule[firstVfModuleName].isMissingData).toBeFalsy();
-  });
+  let vfModule = newState.serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
 
+  expect(vfModule[deleteFieldName]).toBeUndefined();
+});
 
-  test('#UPDATE_VFMODULE_POSITION: should update position', ()=>{
-    let vfModule = vfModuleReducer(<any>{
-        serviceHierarchy : {
-          'serviceModelId' : {}
-        },
-        serviceInstance : {
-          'serviceModelId' : {
-            vnfs : {
-              'vfName' : {
-                vfModules : {
-                  'modelName' : {
-                    'dynamicModelName': {
-                      isMissingData : true
-                    }
+test('#UPDATE_VFMODULE_POSITION: should update position', () => {
+  let vfModule = vfModuleReducer(<any>{
+      serviceHierarchy: {
+        'serviceModelId': {}
+      },
+      serviceInstance: {
+        'serviceModelId': {
+          vnfs: {
+            'vfName': {
+              vfModules: {
+                'modelName': {
+                  'dynamicModelName': {
+                    isMissingData: true
                   }
                 }
               }
             }
           }
-        }},
-      <UpdateVFModluePosition>{
-        type: VfModuleActions.UPDATE_VFMODULE_POSITION,
-        node: {
-          position : 1,
-          dynamicModelName : "dynamicModelName",
-          modelName : "modelName"
-        },
-        instanceId : "serviceModelId",
-        vnfStoreKey : "vfName"
+        }
+      }
+    },
+    <UpdateVFModluePosition>{
+      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);
-  });
+    }).serviceInstance['serviceModelId'].vnfs['vfName'].vfModules["modelName"]["dynamicModelName"];
 
+  expect(vfModule.position).toEqual(1);
+});
 
-  test('#DELETE_ACTION_VF_MODULE_INSTANCE', ()=>{
-    let vfModule = vfModuleReducer(<any>{
-        serviceHierarchy : {
-          'serviceModelId' : {}
-        },
-        serviceInstance : {
-          'serviceModelId' : {
-            vnfs : {
-              'vnfStoreKey' : {
-                vfModules : {
-                  'modelName' : {
-                    'dynamicModelName1': {
-                      isMissingData : true,
-                      action : 'None'
-                    },
-                    'dynamicModelName2': {},
-                  }
+test('#DELETE_ACTION_VF_MODULE_INSTANCE', () => {
+  let vfModule = vfModuleReducer(<any>{
+      serviceHierarchy: {
+        'serviceModelId': {}
+      },
+      serviceInstance: {
+        'serviceModelId': {
+          vnfs: {
+            'vnfStoreKey': {
+              vfModules: {
+                'modelName': {
+                  'dynamicModelName1': {
+                    isMissingData: true,
+                    action: 'None'
+                  },
+                  'dynamicModelName2': {},
                 }
               }
             }
           }
-        }},
-      <DeleteActionVfModuleInstanceAction>{
-        type: VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE,
-        dynamicModelName: 'dynamicModelName1',
-        vnfStoreKey : 'vnfStoreKey',
-        serviceId: 'serviceModelId'
-      }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
+        }
+      }
+    },
+    <DeleteActionVfModuleInstanceAction>{
+      type: VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE,
+      dynamicModelName: 'dynamicModelName1',
+      vnfStoreKey: 'vnfStoreKey',
+      serviceId: 'serviceModelId'
+    }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
 
-    console.log(vfModule.action);
-    expect(vfModule).toBeDefined();
-    expect(vfModule.isMissingData).toBeTruthy();
-    expect(vfModule.action).toEqual(ServiceInstanceActions.None_Delete);
-  });
+  console.log(vfModule.action);
+  expect(vfModule).toBeDefined();
+  expect(vfModule.isMissingData).toBeTruthy();
+  expect(vfModule.action).toEqual(ServiceInstanceActions.None_Delete);
+});
 
-  test('#UNDO_DELETE_ACTION_VF_MODULE_INSTANCE', ()=>{
-    let vfModule = vfModuleReducer(<any>{
-        serviceHierarchy : {
-          'serviceModelId' : {}
-        },
-        serviceInstance : {
-          'serviceModelId' : {
-            vnfs : {
-              'vnfStoreKey' : {
-                vfModules : {
-                  'modelName' : {
-                    'dynamicModelName1': {
-                      isMissingData : true,
-                      action : 'None_Delete'
-                    },
-                    'dynamicModelName2': {},
-                  }
+test('#UNDO_DELETE_ACTION_VF_MODULE_INSTANCE', () => {
+  let vfModule = vfModuleReducer(<any>{
+      serviceHierarchy: {
+        'serviceModelId': {}
+      },
+      serviceInstance: {
+        'serviceModelId': {
+          vnfs: {
+            'vnfStoreKey': {
+              vfModules: {
+                'modelName': {
+                  'dynamicModelName1': {
+                    isMissingData: true,
+                    action: 'None_Delete'
+                  },
+                  'dynamicModelName2': {},
                 }
               }
             }
           }
-        }},
-      <UndoDeleteActionVfModuleInstanceAction>{
-        type: VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE,
-        dynamicModelName: 'dynamicModelName1',
-        vnfStoreKey : 'vnfStoreKey',
-        serviceId: 'serviceModelId'
-      }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
+        }
+      }
+    },
+    <UndoDeleteActionVfModuleInstanceAction>{
+      type: VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE,
+      dynamicModelName: 'dynamicModelName1',
+      vnfStoreKey: 'vnfStoreKey',
+      serviceId: 'serviceModelId'
+    }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
 
-    console.log(vfModule.action);
-    expect(vfModule).toBeDefined();
-    expect(vfModule.action).toEqual(ServiceInstanceActions.None);
-  });
+  console.log(vfModule.action);
+  expect(vfModule).toBeDefined();
+  expect(vfModule.action).toEqual(ServiceInstanceActions.None);
+});
 
-  test('#UPGRADE_VFMODULE', ()=>{
-    let vfModule = vfModuleReducer(<any>{
-        serviceHierarchy : {
-          'serviceModelId' : {}
-        },
-        serviceInstance : {
-          'serviceModelId' : {
-            vnfs : {
-              'vnfStoreKey' : {
-                vfModules : {
-                  'modelName' : {
-                    'dynamicModelName1': {
-                      isMissingData : true,
-                      action : 'None'
-                    },
-                    'dynamicModelName2': {},
-                  }
+test('#UPGRADE_VFMODULE', () => {
+  let vfModule = vfModuleReducer(<any>{
+      serviceHierarchy: {
+        'serviceModelId': {}
+      },
+      serviceInstance: {
+        'serviceModelId': {
+          vnfs: {
+            'vnfStoreKey': {
+              vfModules: {
+                'modelName': {
+                  'dynamicModelName1': {
+                    isMissingData: true,
+                    action: 'None'
+                  },
+                  'dynamicModelName2': {},
                 }
               }
             }
           }
-        }},
-      <UpgradeVfModuleInstanceAction>{
-        type: VfModuleActions.UPGRADE_VFMODULE,
-        dynamicModelName: 'dynamicModelName1',
-        vnfStoreKey : 'vnfStoreKey',
-        serviceId: 'serviceModelId',
-        modelName: 'modelName'
-      }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
+        }
+      }
+    },
+    <UpgradeVfModuleInstanceAction>{
+      type: VfModuleActions.UPGRADE_VFMODULE,
+      dynamicModelName: 'dynamicModelName1',
+      vnfStoreKey: 'vnfStoreKey',
+      serviceId: 'serviceModelId',
+      modelName: 'modelName'
+    }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
 
-    expect(vfModule.action).toEqual(ServiceInstanceActions.None_Upgrade);
-  });
+  expect(vfModule.action).toEqual(ServiceInstanceActions.None_Upgrade);
+});
 
-  test('#UNDO_UPGRADE_VFMODULE', ()=>{
-    let vfModule = vfModuleReducer(<any>{
-        serviceHierarchy : {
-          'serviceModelId' : {}
-        },
-        serviceInstance : {
-          'serviceModelId' : {
-            vnfs : {
-              'vnfStoreKey' : {
-                vfModules : {
-                  'modelName' : {
-                    'dynamicModelName1': {
-                      isMissingData : true,
-                      action : 'None_Upgrade'
-                    },
-                    'dynamicModelName2': {},
-                  }
+test('#UNDO_UPGRADE_VFMODULE', () => {
+  let vfModule = vfModuleReducer(<any>{
+      serviceHierarchy: {
+        'serviceModelId': {}
+      },
+      serviceInstance: {
+        'serviceModelId': {
+          vnfs: {
+            'vnfStoreKey': {
+              vfModules: {
+                'modelName': {
+                  'dynamicModelName1': {
+                    isMissingData: true,
+                    action: 'None_Upgrade'
+                  },
+                  'dynamicModelName2': {},
                 }
               }
             }
           }
-        }},
-      <UpgradeVfModuleInstanceAction>{
-        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);
-  });
+        }
+      }
+    },
+    <UpgradeVfModuleInstanceAction>{
+      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);
 });
+
+})
+;
index a7aadba..1bb2b15 100644 (file)
@@ -1,10 +1,10 @@
 import {Action} from "redux";
 import * as _ from "lodash";
 import {
-  CreateVFModuleInstanceAction, DeleteActionVfModuleInstanceAction,
-  DeleteVfModuleInstanceAction, UndoDeleteActionVfModuleInstanceAction, UpdateVFModluePosition,
+  CreateVFModuleInstanceAction, DeleteActionVfModuleInstanceAction, DeleteVFModuleField,
+  DeleteVfModuleInstanceAction, UndoDeleteActionVfModuleInstanceAction, UpdateVFModluePosition, UpdateVFModuleField,
   UpdateVFModuleInstanceAction, UpgradeVfModuleInstanceAction,
-  VfModuleActions
+  VfModuleActions,
 } from "./vfModule.actions";
 import {ServiceInstance} from "../../../models/serviceInstance";
 import {VfModuleMap} from "../../../models/vfModulesMap";
@@ -145,6 +145,26 @@ export function vfModuleReducer(state: ServiceState , action: Action) : ServiceS
       }
       return clonedState;
     }
+    case VfModuleActions.UPDATE_VFMODULE_FEILD : {
+      let clonedState = _.cloneDeep(state);
+      let updateFieldAction =  <UpdateVFModuleField> action;
+
+        clonedState.serviceInstance[updateFieldAction.serviceId]
+          .vnfs[updateFieldAction.vnfStoreKey]
+          .vfModules[updateFieldAction.modelName][updateFieldAction.dynamicModelName][updateFieldAction.fieldName] =  updateFieldAction.fieldValue;
+
+      return clonedState;
+    }
+    case VfModuleActions.DELETE_VFMODULE_FEILD : {
+      let clonedState = _.cloneDeep(state);
+      let deleteAction =  <DeleteVFModuleField> action;
+
+      delete clonedState.serviceInstance[deleteAction.serviceId]
+        .vnfs[deleteAction.vnfStoreKey]
+        .vfModules[deleteAction.modelName][deleteAction.dynamicModelName][deleteAction.deleteFieldName];
+
+      return clonedState;
+    }
   }
 }