use mergeObjectByPathAction for update VfModule properties upon upgrade 89/98889/2
authorEylon Malin <eylon.malin@intl.att.com>
Wed, 27 Nov 2019 10:08:01 +0000 (12:08 +0200)
committerEylon Malin <eylon.malin@intl.att.com>
Wed, 27 Nov 2019 11:15:50 +0000 (13:15 +0200)
Issue-ID: VID-603
Change-Id: Icdec60aa0e0522e5af394184c5f700ed2d493e4e
Signed-off-by: Eylon Malin <eylon.malin@intl.att.com>
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/general/general.reducers.ts

index b82074d..5de2da1 100644 (file)
@@ -2,7 +2,7 @@ import {Injectable} from "@angular/core";
 import {ITreeNode} from "angular-tree-component/dist/defs/api";
 import {FormGroup} from "@angular/forms";
 import {VfModulePopupServiceBase} from "../vfModule/vfModule.popuop.service";
-import {updateVFModuleField, upgradeVFModule} from "../../../../storeUtil/utils/vfModule/vfModule.actions";
+import {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";
@@ -15,6 +15,7 @@ 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";
+import {mergeObjectByPathAction} from "../../../../storeUtil/utils/general/general.actions";
 
 export enum UpgradeFormControlNames {
   RETAIN_VOLUME_GROUPS = 'retainVolumeGroups',
@@ -35,7 +36,7 @@ export class VfModuleUpgradePopupService extends VfModulePopupServiceBase {
   }
   node: ITreeNode;
 
-  getDynamicInputs = () => [];
+  getDynamicInputs = () => null;
 
   getControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, isUpdateMode: boolean)  {
     let result: FormControlModel[] = [];
@@ -49,22 +50,18 @@ export class VfModuleUpgradePopupService extends VfModulePopupServiceBase {
   onSubmit(that, form: FormGroup) {
     const node = that.uuidData.vfModule;
     const serviceInstanceId: string = that.uuidData.serviceId;
+    const vnfStoreKey = node.parent.data.vnfStoreKey;
+    const modelName = node.data.modelName;
+    const dynamicModelName = node.data.dynamicModelName;
 
-    this._store.dispatch(upgradeVFModule(node.data.modelName,  node.parent.data.vnfStoreKey, serviceInstanceId ,node.data.dynamicModelName));
+    this._store.dispatch(upgradeVFModule(modelName,  vnfStoreKey, serviceInstanceId ,dynamicModelName));
+    this._store.dispatch(mergeObjectByPathAction(['serviceInstance',serviceInstanceId, 'vnfs', vnfStoreKey, 'vfModules', modelName, dynamicModelName], form.value));
     this._sharedTreeService.upgradeBottomUp(node, serviceInstanceId);
 
-    this.updateVFModuleField(UpgradeFormControlNames.RETAIN_VOLUME_GROUPS,node, serviceInstanceId, form);
-    this.updateVFModuleField(UpgradeFormControlNames.RETAIN_ASSIGNMENTS,node, serviceInstanceId, form);
-
     this.postSubmitIframeMessage(that);
     this.onCancel(that, form);
   }
 
-  private updateVFModuleField(fieldName: string, node, serviceInstanceId: string, form: FormGroup) {
-    this._store.dispatch(updateVFModuleField(node.data.modelName, node.parent.data.vnfStoreKey, serviceInstanceId, node.data.dynamicModelName, fieldName, form.controls[fieldName].value));
-  }
-
-
   getRetainVolumeGroupsControl = (): CheckboxFormControl => {
     return new CheckboxFormControl({
       type: FormControlType.CHECKBOX,
index a7c8214..5feadeb 100644 (file)
@@ -4,7 +4,7 @@ import {BasicControlGenerator} from "../../../genericForm/formControlsServices/b
 import {AaiService} from "../../../../services/aaiService/aai.service";
 import {HttpClient} from "@angular/common/http";
 import {GenericFormService} from "../../../genericForm/generic-form.service";
-import {FormBuilder} from "@angular/forms";
+import {FormBuilder, FormGroup} from "@angular/forms";
 import {IframeService} from "../../../../utils/iframe.service";
 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
 import {BasicPopupService} from "../basic.popup.service";
@@ -14,6 +14,11 @@ import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flag
 import {getTestBed, TestBed} from "@angular/core/testing";
 import {UpgradeFormControlNames, VfModuleUpgradePopupService} from "./vfModule.upgrade.popuop.service";
 import {SharedTreeService} from "../../../../../drawingBoard/service-planning/objectsToTree/shared.tree.service";
+import {AppState} from "../../../../store/reducers";
+import {instance, mock} from "ts-mockito";
+import {GeneralActions} from "../../../../storeUtil/utils/general/general.actions";
+import {VfModuleActions} from "../../../../storeUtil/utils/vfModule/vfModule.actions";
+import {ServiceActions} from "../../../../storeUtil/utils/service/service.actions";
 
 class MockModalService<T> {
 }
@@ -27,6 +32,8 @@ class MockReduxStore<T> {
   getState() {
     return {};
   }
+
+  dispatch() {}
 }
 
 class MockFeatureFlagsService {
@@ -39,6 +46,7 @@ describe('VFModule popup service', () => {
   let defaultDataGeneratorService: DefaultDataGeneratorService;
   let fb: FormBuilder;
   let iframeService: IframeService;
+  let store : NgRedux<AppState>;
 
   beforeAll(done => (async () => {
     TestBed.configureTestingModule({
@@ -68,6 +76,7 @@ describe('VFModule popup service', () => {
     defaultDataGeneratorService = injector.get(DefaultDataGeneratorService);
     fb = injector.get(FormBuilder);
     iframeService = injector.get(IframeService);
+    store = injector.get(NgRedux);
 
   })().then(done).catch(done.fail));
 
@@ -77,7 +86,7 @@ describe('VFModule popup service', () => {
 
   test('get controls should return retainAssignments control with false i', ()=> {
 
-    const controls = service.getControls();
+    const controls = service.getControls('a', 'b', 'c', true);
     expect(controls.length).toEqual(2);
 
     const retainAssignmentsControl = controls.find((control)=>{
@@ -95,4 +104,54 @@ describe('VFModule popup service', () => {
     expect(retainVolumeGroup).toBeDefined();
     expect(retainVolumeGroup.value).toBeTruthy();
   });
+
+  test('on submit should call merge action of form value to vfModule', () => {
+
+    //given
+
+    const serviceId = "serviceId5";
+    const vnfStoreKey = 'vnfStoreKey3';
+    const modelName = 'modelA';
+    const dynamicModelName = 'dynamicModel';
+    const that = {
+      uuidData : {
+        vfModule : {
+          data : {
+            modelName,
+            dynamicModelName
+          },
+          parent : {
+            data: {
+              vnfStoreKey
+            }}},
+        serviceId
+      },
+      serviceModel: {
+        uuid : "someUuid"
+      },
+      _iframeService: {
+        removeClassCloseModal : jest.fn()
+      }
+    };
+
+    let mockFrom: FormGroup = mock(FormGroup);
+    let form = instance(mockFrom);
+    form.value = {
+      a: "value",
+      b: "another"
+    };
+
+    spyOn(store, 'dispatch');
+
+    //when
+    service.onSubmit(that, form);
+
+    //then
+    expect(store.dispatch).toBeCalledWith(
+      {type: GeneralActions.MERGE_OBJECT_BY_PATH, path: ['serviceInstance', serviceId, 'vnfs', vnfStoreKey, 'vfModules',modelName, dynamicModelName], payload:form.value});
+    expect(store.dispatch).toBeCalledWith(
+      {type: VfModuleActions.UPGRADE_VFMODULE, dynamicModelName: "dynamicModel", modelName: "modelA", serviceId: "serviceId5", vnfStoreKey: "vnfStoreKey3"});
+    expect(store.dispatch).toBeCalledWith({type: ServiceActions.UPGRADE_SERVICE_ACTION, serviceUuid: "serviceId5"});
+
+  });
 });
index a343227..f87a973 100644 (file)
@@ -92,6 +92,9 @@ export function generalReducer(state: ServiceState, action: Action) : ServiceSta
       if (targetObject) {
         targetObject = _.merge(targetObject, mergeObjectByPathAction.payload);
       }
+      else {
+        console.error(`Can't find object at ${mergeObjectByPathAction.path.join()}`)
+      }
       return newState;
     }