When opening new VNF modal the modal should be empty. 73/99573/10
authorYoav Schneiderman <yoav.schneiderman@intl.att.com>
Thu, 12 Dec 2019 14:11:59 +0000 (16:11 +0200)
committerEinat Vinouze <einat.vinouze@intl.att.com>
Mon, 16 Dec 2019 11:51:28 +0000 (13:51 +0200)
Issue-ID: VID-727
Change-Id: I29a83ae7460c30661ad5d99860bcddda5a2936be
Signed-off-by: Yoav Schneiderman <yoav.schneiderman@intl.att.com>
Signed-off-by: Einat Vinouze <einat.vinouze@intl.att.com>
15 files changed:
vid-automation/src/test/resources/asyncInstantiation/vidRequestDelete1Create1Vnf.json
vid-webpack-master/cypress/integration/iFrames/drawingBoard.e2e.ts
vid-webpack-master/cypress/integration/iFrames/vnf.update.e2e.ts
vid-webpack-master/cypress/support/steps/fill.vnf.popup.step.ts
vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.spec.ts
vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.ts
vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.ts
vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts
vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts
vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.ts
vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.html
vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts
vid-webpack-master/src/app/shared/storeUtil/utils/global/global.actions.ts
vid-webpack-master/src/app/shared/storeUtil/utils/global/global.reducers.spec.ts
vid-webpack-master/src/app/shared/storeUtil/utils/global/global.reducers.ts

index 4eb5445..1fcc828 100644 (file)
@@ -22,7 +22,7 @@ describe('Drawing board', function () {
     const vnfNodeName = 'node-2017-488_PASQUALE-vPE 0';
     cy.drawingBoardPressAddButtonByElementName(vnfNodeName).get('i').should('have.class', 'fa-plus-circle');
     cy.drawingBoardPressAddButtonByElementName(vnfNodeName).click({force: true});
-    cy.fillVnfPopup(true).then(() => {
+    cy.fillVnfPopup().then(() => {
       cy.drawingBoardPressAddButtonByElementName(vnfNodeName).click({force: true});
       cy.fillVnfPopup().then(() => {
         cy.drawingBoardPressAddButtonByElementName(vnfNodeName).click({force: true});
@@ -41,7 +41,7 @@ describe('Drawing board', function () {
         cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
         cy.drawingBoardPressAddButtonByElementName('node-2017-488_PASQUALE-vPE 0').get('i').should('have.class', 'fa-plus-circle');
         cy.drawingBoardPressAddButtonByElementName('node-2017-488_PASQUALE-vPE 0').click({force: true});
-        cy.fillVnfPopup(true).then(() => {
+        cy.fillVnfPopup().then(() => {
           cy.drawingBoardPressAddButtonByElementName('node-2017-488_PASQUALE-vPE 0').click({force: true});
           cy.fillVnfPopup().then(() => {
             cy.drawingBoardNumberOfExistingElementsShouldContains(2);
@@ -66,7 +66,7 @@ describe('Drawing board', function () {
         cy.openIframe('app/ui/#/servicePlanning?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd');
         cy.drawingBoardPressAddButtonByElementName('node-2017-488_PASQUALE-vPE 0').get('i').should('have.class', 'fa-plus-circle')
           .drawingBoardPressAddButtonByElementName('node-2017-488_PASQUALE-vPE 0').click({force: true});
-        cy.fillVnfPopup(true).then(() => {
+        cy.fillVnfPopup().then(() => {
           cy.drawingBoardTreeOpenContextMenuByElementDataTestId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0')
             .drawingBoardTreeClickOnContextMenuOptionByName('Duplicate')
             .get('.quantity-select option').should('have.length', 9)
index d5b851d..a81270c 100644 (file)
@@ -71,7 +71,7 @@ describe('Delete vnf instance', function () {
     // add a vnf on update mode
     cy.drawingBoardPressAddButtonByElementName('node-2017-388_PASQUALE-vPE 0').click({force: true});
     cy.selectDropdownOptionByText('rollback', 'Rollback');
-    cy.fillVnfPopup(true);
+    cy.fillVnfPopup();
 
     // delete VNF
     cy.drawingBoardTreeOpenContextMenuByElementDataTestId('node-69e09f68-8b63-4cc9-b9ff-860960b5db09-2017-488_PASQUALE-vPE 0', 0)
@@ -85,7 +85,7 @@ describe('Delete vnf instance', function () {
       cy.wait('@expectedPostAsyncInstantiation').then(xhr => {
         cy.readFile('../vid-automation/src/test/resources/asyncInstantiation/vidRequestDelete1Create1Vnf.json').then((expectedResult) => {
           expectedResult.vnfs["2017-388_PASQUALE-vPE 0_1"].trackById = vnf.trackById;
-          expectedResult.vnfs["2017-388_PASQUALE-vPE 0_1"].platformName = 'platform,xxx1';
+          expectedResult.vnfs["2017-388_PASQUALE-vPE 0_1"].instanceName = '2017-388_PASQUALE-vPE';
           cy.deepCompare(expectedResult, xhr.request.body);
         });
       });
index 3e91f77..29166f6 100644 (file)
@@ -7,14 +7,12 @@ declare namespace Cypress {
     duplicateVnf: typeof DuplicateVnf,
   }
 }
-function FillVnfPopup(changePlatformValue?: boolean): Chainable<any> {
+function FillVnfPopup(): Chainable<any> {
   cy.selectDropdownOptionByText('productFamily', 'Emanuel');
   cy.selectDropdownOptionByText('lcpRegion', 'hvf6');
   cy.selectDropdownOptionByText('tenant', 'AIN Web Tool-15-D-STTest2');
   cy.selectDropdownOptionByText('lineOfBusiness', 'zzz1');
-  if(changePlatformValue === true){
-    cy.selectPlatformValue('xxx1')
-  }
+  cy.selectPlatformValue('xxx1');
   return cy.getElementByDataTestsId('form-set').click({force : true}).then((done)=>{
     return done;
   });
index 077d849..7e2d3f9 100644 (file)
@@ -1,9 +1,10 @@
 import {getTestBed, TestBed} from '@angular/core/testing';
 import {AaiService} from "../../../services/aaiService/aai.service";
-import {FormControlModel, ValidatorModel, ValidatorOptions} from "../../../models/formControlModels/formControl.model";
+import {FormControlModel} from "../../../models/formControlModels/formControl.model";
 import {FeatureFlagsService} from "../../../services/featureFlag/feature-flags.service";
 import {BasicControlGenerator} from "./basic.control.generator";
 import {NgRedux} from '@angular-redux/store';
+import each from "jest-each";
 import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
 import {FileFormControl} from "../../../models/formControlModels/fileFormControl.model";
 
@@ -81,5 +82,27 @@ describe('Basic Control Generator', () => {
       "supplementaryFile_hidden_content"
     ]);
   });
-});
+  each([
+    [null, false],
+    [{}, true]
+  ]).
+  test('retrieveInstanceIfUpdateMode returns %s if update mode is %s', (expected, isUpdateModalMode) => {
+    //given
+    const store= <any>{
+      getState() {
+        return {
+          global: {
+            isUpdateModalMode
+          }
+        }}};
+    const instance = {};
+
+    //when
+    let retrievedInstance = service.retrieveInstanceIfUpdateMode (store, instance);
 
+    //then
+    expect(retrievedInstance).toEqual(expected);
+
+  });
+
+});
index 7ab6475..aff3398 100644 (file)
@@ -280,6 +280,10 @@ export class BasicControlGenerator {
     })
   };
 
+  retrieveInstanceIfUpdateMode(store: NgRedux<AppState>, instance: any): any{
+    return store.getState().global.isUpdateModalMode ? instance : null;
+  }
+
   private getOnDeleteForSupplementaryFile() {
     return (form: FormGroup) => {
       form.controls[SUPPLEMENTARY_FILE + "_hidden"].setValue(null);
index 11c4561..19c85a1 100644 (file)
@@ -73,8 +73,7 @@ export class NetworkControlGenerator {
       this._logService.error('should provide serviceId, networkName, networkStoreKey', serviceId);
       return [];
     }
-
-    const networkInstance = this.getNetworkInstance(serviceId, networkStoreKey, isUpdateMode);
+    const networkInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, this.getNetworkInstance(serviceId, networkStoreKey, isUpdateMode));
     const networkModel = new NetworkModel(this.store.getState().service.serviceHierarchy[serviceId].networks[networkName]);
     let result: FormControlModel[] = [];
 
@@ -99,7 +98,7 @@ export class NetworkControlGenerator {
     }
 
     let result: FormControlModel[] = [];
-    const networkInstance = this.getNetworkInstance(serviceId, networkStoreKey, isUpdateMode);
+    const networkInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, this.getNetworkInstance(serviceId, networkStoreKey, isUpdateMode));
     const networkModel = new NetworkModel(this.store.getState().service.serviceHierarchy[serviceId].networks[networkName]);
 
     if (!_.isNil(networkModel)) {
index 8919c04..011f434 100644 (file)
@@ -92,7 +92,7 @@ export class VfModuleControlGenerator {
       }
     }
 
-    const vfModuleInstance = this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode);
+    const vfModuleInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode));
     const vfModuleModel = this.vfModuleModel;
     const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey];
     const vnfModelName: string = vnf.originalName;
@@ -126,11 +126,11 @@ export class VfModuleControlGenerator {
         return [];
       }
     }
-    const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey];
+    const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey] ;
     const vnfModelName: string = vnf.originalName;
     const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfModelName]);
 
-    const vfModuleInstance = this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode);
+    const vfModuleInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode));
     let result: FormControlModel[] = [];
     this.pushInstanceAndVGToForm(result, vfModuleInstance, serviceId, vnfModel, true);
     result.push(this.getLcpRegionControl(serviceId, vfModuleInstance, result));
index ff0a525..c45fa96 100644 (file)
@@ -73,8 +73,7 @@ export class VnfControlGenerator {
       this._logService.error('should provide serviceId, vnfName, vnfStoreKey', serviceId);
       return [];
     }
-
-    const vnfInstance = this.getVnfInstance(serviceId, vnfStoreKey);
+    const vnfInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store,this.getVnfInstance(serviceId, vnfStoreKey));
     const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfName]);
     let result: FormControlModel[] = [];
     const flags = this.store.getState().global.flags;
@@ -99,7 +98,7 @@ export class VnfControlGenerator {
     }
 
     let result: FormControlModel[] = [];
-    const vnfInstance = this.getVnfInstance(serviceId, vnfStoreKey);
+    const vnfInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store,this.getVnfInstance(serviceId, vnfStoreKey));
     const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfName]);
 
     if (!_.isNil(vnfModel)) {
index e503f4d..45f5ffa 100644 (file)
@@ -52,7 +52,7 @@ export class VnfGroupControlGenerator {
       return [];
     }
 
-    const vnfGroupInstance = this.getVnfGroupInstance(serviceId, vnfGroupStoreKey);
+    const vnfGroupInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, this.getVnfGroupInstance(serviceId, vnfGroupStoreKey));
     const vnfGroupModel = new VnfGroupModel(this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName]);
     let result: FormControlModel[] = [];
 
@@ -70,7 +70,7 @@ export class VnfGroupControlGenerator {
     }
 
     let result: FormControlModel[] = [];
-    const vnfGroupInstance = this.getVnfGroupInstance(serviceId, vnfGroupStoreKey);
+    const vnfGroupInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, this.getVnfGroupInstance(serviceId, vnfGroupStoreKey));
     const vnfGroupModel = new VnfGroupModel(this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName]);
 
     if (!_.isNil(vnfGroupModel)) {
index f9a11ea..2b2c2a7 100644 (file)
@@ -3,7 +3,7 @@
     <div class="modal-header">
       <button type="button"
               class="close"
-              (click)="formPopupDetails?.onCancel(formPopupDetails.that,dynamicForm)">&times;
+              (click)="formPopupDetails?.onCancel(formPopupDetails.that,dynamicForm);clearModalIsUpdateMode()">&times;
       </button>
       <span [attr.data-tests-id]="'create-modal-title'"
             class="modal-title">{{formPopupDetails?.title}}
         <button
           [attr.data-tests-id]="'cancelButton'"
           type="button" class="btn btn-default cancel"
-          (click)="formPopupDetails.onCancel(formPopupDetails.that, dynamicForm)"><span>Cancel</span></button>
+          (click)="formPopupDetails.onCancel(formPopupDetails.that, dynamicForm); clearModalIsUpdateMode()"><span>Cancel</span></button>
 
         <input type="submit"
                value="Set"
                data-tests-id="form-set"
                class="btn btn-success submit"
                [disabled]="!dynamicForm?.valid"
-               (click)="formPopupDetails.onSubmit(formPopupDetails.that, dynamicForm, servicesQty)">
+               (click)="formPopupDetails.onSubmit(formPopupDetails.that, dynamicForm, servicesQty);clearModalIsUpdateMode()">
       </div>
     </div>
   </div>
index 3939e44..3cd633d 100644 (file)
@@ -15,6 +15,7 @@ import {FormControlModel} from "../../models/formControlModels/formControl.model
 import {FormGeneralErrorsService} from "../formGeneralErrors/formGeneralErrors.service";
 import {FeatureFlagsService, Features} from "../../services/featureFlag/feature-flags.service";
 import {InstantiationTemplatesModalComponent} from "./instantiationTemplatesModal/instantiation.templates.modal.component";
+import {updateCurrentModalModeAction} from "../../storeUtil/utils/global/global.actions";
 
 
 export interface PopupModel {
@@ -80,7 +81,12 @@ export class GenericFormPopupComponent extends DialogComponent<PopupModel, boole
     return this.formPopupDetails && this.formPopupDetails.UUIDData['bulkSize'] > 1
   }
 
+  clearModalIsUpdateMode() : void {
+    this._store.dispatch(updateCurrentModalModeAction(null));
+  }
+
   ngOnInit(): void {
+    this._store.dispatch(updateCurrentModalModeAction(this.isUpdateMode));
     this._route
       .queryParams
       .subscribe(params => {
index 4af0243..d4e6cf2 100644 (file)
@@ -11,9 +11,15 @@ export enum GlobalActions {
   UPDATE_GENERIC_MODAL_TABLE_DATA_HELPER = 'UPDATE_GENERIC_MODAL_TABLE_DATA_HELPER',
   DELETE_GENERIC_MODAL_TABLE_DATA_HELPER = 'DELETE_GENERIC_MODAL_TABLE_DATA_HELPER',
   UPDATE_GENERIC_CURRNT_VRF_HELPER = 'UPDATE_GENERIC_CURRNT_VRF_HELPER',
-  DELETE_GENERIC_CURRNT_VRF_HELPER = 'DELETE_GENERIC_CURRNT_VRF_HELPER'
+  DELETE_GENERIC_CURRNT_VRF_HELPER = 'DELETE_GENERIC_CURRNT_VRF_HELPER',
+  UPDATE_CURRENT_MODAL_MODE = 'UPDATE_CURRENT_MODAL_MODE'
 }
 
+export interface UpdateCurrentModalModeAction extends Action {
+  isUpdateModalMode?: boolean;
+}
+
+
 export interface UpdateGlobalAction extends Action {
   name?: string;
 }
@@ -106,3 +112,8 @@ export const deleteGenericModalTableDataHelper: ActionCreator<DeleteGenericModal
 export const clearAllGenericModalhelper: ActionCreator<ClearGenericModalHelper> = (field, uniqObjectField) => ({
   type : GlobalActions.CLEAR_ALL_GENERIC_MODAL_HELPER
 });
+
+export const updateCurrentModalModeAction: ActionCreator<UpdateCurrentModalModeAction> = (isUpdateModalMode? :boolean) => ({
+  type : GlobalActions.UPDATE_CURRENT_MODAL_MODE,
+  isUpdateModalMode
+});
index c8aecdd..47b5e09 100644 (file)
@@ -7,7 +7,7 @@ import {
   UpdateGenericModalHelper,
   DeleteGenericModalHelper,
   ClearGenericModalHelper,
-  UpdateGenericModalTableDataHelper
+  UpdateGenericModalTableDataHelper, UpdateCurrentModalModeAction
 } from "./global.actions";
 import {globalReducer} from "./global.reducers";
 
@@ -142,6 +142,43 @@ describe('globalReducer', () => {
     expect(globalDrawingBoardState.genericModalHelper[keyName]).toBeUndefined();
   });
 
+
+
+  test('#UPDATE_CURRENT_MODAL_MODE : should update current modal mode: true',  ()=> {
+    let globalDrawingBoardState = globalReducer(<any>{global : {},genericModalHelper : {
+          isUpdateModalMode : null
+        }},
+      <UpdateCurrentModalModeAction>{
+        type: GlobalActions.UPDATE_CURRENT_MODAL_MODE,
+        isUpdateModalMode : true
+      });
+    expect(globalDrawingBoardState.isUpdateModalMode).toBeTruthy();
+  });
+
+
+  test('#UPDATE_CURRENT_MODAL_MODE : should update current modal mode: false',  ()=> {
+    let globalDrawingBoardState = globalReducer(<any>{global : {},genericModalHelper : {
+          isUpdateModalMode : true
+        }},
+      <UpdateCurrentModalModeAction>{
+        type: GlobalActions.UPDATE_CURRENT_MODAL_MODE,
+        isUpdateModalMode : false
+      });
+    expect(globalDrawingBoardState.isUpdateModalMode).toBeFalsy();
+  });
+
+  test('#UPDATE_CURRENT_MODAL_MODE : should delete modal mode if value is null',  ()=> {
+    let globalDrawingBoardState = globalReducer(<any>{global : {},genericModalHelper : {
+          isUpdateModalMode : true
+        }},
+      <UpdateCurrentModalModeAction>{
+        type: GlobalActions.UPDATE_CURRENT_MODAL_MODE,
+        isUpdateModalMode : null
+      });
+    expect(globalDrawingBoardState.isUpdateModalMode).toBeUndefined();
+  });
+
+
 });
 
 
index aedcce2..49df208 100644 (file)
@@ -8,7 +8,7 @@ import {
   UpdateGenericModalHelper,
   DeleteGenericModalHelper,
   DeleteGenericModalTabelDataHelper,
-  UpdateGenericModalTableDataHelper
+  UpdateGenericModalTableDataHelper, UpdateCurrentModalModeAction
 } from "./global.actions";
 import * as _ from "lodash";
 
@@ -18,6 +18,7 @@ export interface GlobalState {
   drawingBoardStatus : string;
   genericModalCriteria : { [key: string]: any };
   genericModalHelper : { [key: string]: any };
+  isUpdateModalMode?: boolean;
 
 }
 
@@ -28,7 +29,8 @@ const initialState: GlobalState = {
   genericModalCriteria : {
     roles : []
   },
-  genericModalHelper : {}
+  genericModalHelper : {},
+  isUpdateModalMode : null
 };
 
 export const globalReducer =
@@ -81,6 +83,15 @@ export const globalReducer =
         newState.genericModalHelper[(<UpdateGenericModalTableDataHelper>action).field] = (<UpdateGenericModalTableDataHelper>action).values ;
         return newState;
       }
+      case GlobalActions.UPDATE_CURRENT_MODAL_MODE : {
+        let newState = {...state};
+        if ((<UpdateCurrentModalModeAction>action).isUpdateModalMode === null){
+          delete newState.isUpdateModalMode;
+        } else {
+          newState.isUpdateModalMode = (<UpdateCurrentModalModeAction>action).isUpdateModalMode;
+        }
+        return newState;
+      }
       default:
         return state;
     }