Add to VFM context menu action "Add pause upon completion". 55/107255/7
authorAlexey Sandler <alexey.sandler@intl.att.com>
Wed, 6 May 2020 15:58:14 +0000 (18:58 +0300)
committerIttay Stern <ittay.stern@att.com>
Sun, 17 May 2020 02:37:48 +0000 (02:37 +0000)
Issue-ID: VID-821
Signed-off-by: Alexey Sandler <alexey.sandler@intl.att.com>
Change-Id: I8b0ef7021fb7b74e8ad12ae92e581510491d9605
Signed-off-by: Alexey Sandler <alexey.sandler@intl.att.com>
15 files changed:
vid-automation/src/main/java/vid/automation/test/infra/Features.java
vid-webpack-master/cypress/integration/iFrames/pauseInstantiationOnVfModule.e2e.ts [new file with mode: 0644]
vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json
vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/reduxModelOneVnfAndTwoVfmodulesInstanceOneVnf.json [new file with mode: 0644]
vid-webpack-master/package.json
vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.component.ts
vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.html
vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.scss
vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.service.spec.ts
vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.service.ts
vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.spec.ts
vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vfModule/vfModule.model.info.ts
vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/shared.tree.service.ts
vid-webpack-master/src/app/shared/models/treeNodeModel.ts
vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts

index 02b841f..3e96fa1 100644 (file)
@@ -65,7 +65,8 @@ public enum Features implements Feature {
     FLAG_EXP_USE_FORMAT_PARAMETER_FOR_CM_DASHBOARD,
     FLAG_2006_NETWORK_LOB_MULTI_SELECT,
     FLAG_2006_VNF_LOB_MULTI_SELECT,
-    FLAG_2006_PORT_MIRRORING_LET_SELECTING_SOURCE_SUBSCRIBER
+    FLAG_2006_PORT_MIRRORING_LET_SELECTING_SOURCE_SUBSCRIBER,
+    FLAG_2006_PAUSE_VFMODULE_INSTANTIATION_CREATION,
     ;
 
     public boolean isActive() {
diff --git a/vid-webpack-master/cypress/integration/iFrames/pauseInstantiationOnVfModule.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/pauseInstantiationOnVfModule.e2e.ts
new file mode 100644 (file)
index 0000000..c725e33
--- /dev/null
@@ -0,0 +1,97 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/> / <reference types="Cypress" />
+
+describe('Create Instance page: Pause after vfModule instantiation ', () => {
+
+  beforeEach(() => {
+    cy.clearSessionStorage();
+    cy.setTestApiParamToGR();
+    cy.initVidMock();
+    cy.permissionVidMock();
+    cy.login();
+
+  });
+
+  afterEach(() => {
+    cy.screenshot();
+  });
+
+  it(`Pause on VFModule instantiation: create two vfmodules and pause after a first vfmodule`, function () {
+    cy.readFile('cypress/support/jsonBuilders/mocks/jsons/flags.cypress.json').then((flags) => {
+      cy.server()
+      .route({
+        method: 'GET',
+        delay: 0,
+        status: 200,
+        url: Cypress.config('baseUrl') + "/flags**",
+        response: flags
+      }).as('initFlags');
+    });
+
+    cy.readFile('cypress/support/jsonBuilders/mocks/jsons/reduxModelOneVnfAndTwoVfmodulesInstanceOneVnf.json').then((reduxState) => {
+
+      cy.setReduxState(<any>reduxState);
+      cy.openIframe('app/ui/#/servicePlanning?serviceModelId=f3862254-8df2-4a0a-8137-0a9fe985860c');
+      const vnfName = "vOCG_1804_VF 0";
+      let vfModulesNames: Array<string> = [
+        'vocg_1804_vf0..Vocg1804Vf..base_ocg..module-0',
+        'vocg_1804_vf0..Vocg1804Vf..ocgapp_004..module-11'
+      ];
+      const uuidAndVfModuleNames: Array<string> = [
+        '815db6e5-bdfd-4cb6-9575-82c36df8747a-vocg_1804_vf0..Vocg1804Vf..base_ocg..module-0',
+        'da10c7fe-cf81-441c-9694-4e9ddf2054d8-vocg_1804_vf0..Vocg1804Vf..ocgapp_004..module-11'
+      ];
+
+      addALaCarteVfModuleEcompGeneratedNamingTrue(vnfName, vfModulesNames[0], uuidAndVfModuleNames[0]);
+      addALaCarteVfModuleEcompGeneratedNamingTrue(vnfName, vfModulesNames[1], uuidAndVfModuleNames[1]);
+      pauseOnVfModuleInstantiation('node-' + uuidAndVfModuleNames[1], 0)
+      mockAsyncBulkResponse();
+      cy.getDrawingBoardDeployBtn().click();
+
+      cy.wait('@expectedPostAsyncInstantiation')
+      .then(xhr => {
+        let vfModules = bodyOf(xhr).vnfs['vOCG_1804_VF 0'].vfModules;
+
+        let unPausedVModule = vfModules[vfModulesNames[0]];
+        const unPausedVModuleObject = unPausedVModule[Object.keys(unPausedVModule)[0]];
+        expect(unPausedVModuleObject.pauseInstantiation).equals(undefined);
+
+        let pausedVModule = vfModules[vfModulesNames[1]];
+        const pausedVModuleObject = pausedVModule[Object.keys(pausedVModule)[0]];
+        expect(pausedVModuleObject.pauseInstantiation).equals("afterCompletion");
+      });
+    });
+  });
+
+  function addALaCarteVfModuleEcompGeneratedNamingTrue(vnfName: string, vfModulesName: string, uuidAndVfModuleName: string): Chainable<any> {
+    return cy.getElementByDataTestsId('node-' + vnfName).click({force: true}).then(() => {
+      cy.getElementByDataTestsId('node-' + vfModulesName + '-add-btn').click({force: true}).then(() => {
+        cy.getElementByDataTestsId('node-' + uuidAndVfModuleName + '-menu-btn')
+        .click({force: true}).then(() => {
+          cy.getElementByDataTestsId('context-menu-edit').click().then(() => {
+            cy.getElementByDataTestsId('form-set').click();
+          })
+        })
+      })
+    })
+  }
+
+  function bodyOf(xhr: Cypress.WaitXHR) {
+    return JSON.parse(JSON.stringify(xhr.request.body));
+  }
+
+  function mockAsyncBulkResponse() {
+    cy.server().route({
+      url: Cypress.config('baseUrl') + '/asyncInstantiation/bulk',
+      method: 'POST',
+      status: 200,
+      response: "[]",
+    }).as("expectedPostAsyncInstantiation");
+  }
+
+
+  function pauseOnVfModuleInstantiation(nodeId: string, index: number) {
+    cy.drawingBoardTreeOpenContextMenuByElementDataTestId(`${nodeId}`, index)
+    .getElementByDataTestsId('context-menu-pause').click({force: true});
+  }
+
+});
index d60b375..9c597c5 100644 (file)
@@ -27,5 +27,6 @@
   "FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF": true,
   "FLAG_2006_NETWORK_PLATFORM_MULTI_SELECT" :true,
   "FLAG_2006_NETWORK_LOB_MULTI_SELECT" : true,
-  "FLAG_2006_NEW_VIEW_EDIT_BUTTON_IN_INSTANTIATION_STATUS" : true
+  "FLAG_2006_NEW_VIEW_EDIT_BUTTON_IN_INSTANTIATION_STATUS" : true,
+  "FLAG_2006_PAUSE_VFMODULE_INSTANTIATION_CREATION" : true
 }
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/reduxModelOneVnfAndTwoVfmodulesInstanceOneVnf.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/reduxModelOneVnfAndTwoVfmodulesInstanceOneVnf.json
new file mode 100644 (file)
index 0000000..0dba319
--- /dev/null
@@ -0,0 +1,235 @@
+{
+  "global": {
+    "name": null,
+    "drawingBoardStatus": "CREATE",
+    "genericModalCriteria": {
+      "roles": []
+    },
+    "genericModalHelper": {},
+    "type": "UPDATE_DRAWING_BOARD_STATUS"
+  },
+  "service": {
+    "serviceHierarchy": {
+      "f3862254-8df2-4a0a-8137-0a9fe985860c": {
+        "service": {
+          "uuid": "f3862254-8df2-4a0a-8137-0a9fe985860c",
+          "invariantUuid": "d1068db8-b933-4919-8972-8bc1aed366c8",
+          "name": "vOCG_1804_SVC",
+          "version": "4.0",
+          "toscaModelURL": null,
+          "category": "Mobility",
+          "serviceType": "",
+          "serviceRole": "",
+          "description": "updated HEAT",
+          "serviceEcompNaming": "true",
+          "instantiationType": "ClientConfig",
+          "inputs": {},
+          "vidNotions": {
+            "instantiationUI": "anyAlacarteWhichNotExcluded",
+            "modelCategory": "other",
+            "viewEditUI": "legacy",
+            "instantiationType": "ALaCarte"
+          }
+        },
+        "vnfs": {
+          "vOCG_1804_VF 0": {
+            "uuid": "aca3f7b1-15f9-45a5-b182-b8b5aca84a76",
+            "invariantUuid": "db23d71a-4cb4-4030-9c9b-e3f886c2b35c",
+            "description": "vOCG redesigned one App VM per module",
+            "name": "vOCG_1804_VF",
+            "version": "4.0",
+            "customizationUuid": "e9ed1da0-c078-426a-8e84-6f4e85eace59",
+            "properties": {
+              "ecomp_generated_naming": "true"
+            },
+            "type": "VF",
+            "modelCustomizationName": "vOCG_1804_VF 0",
+            "vfModules": {
+              "vocg_1804_vf0..Vocg1804Vf..base_ocg..module-0": {
+                "uuid": "815db6e5-bdfd-4cb6-9575-82c36df8747a",
+                "invariantUuid": "e9c795c8-6b98-4db3-bd90-a84b8ca5181b",
+                "customizationUuid": "a7b333d7-7633-4197-b40d-80fcfcadee94",
+                "description": null,
+                "name": "Vocg1804Vf..base_ocg..module-0",
+                "version": "4",
+                "modelCustomizationName": "Vocg1804Vf..base_ocg..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_ocg",
+                  "baseModule": true
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vocg_1804_vf0..Vocg1804Vf..ocgapp_004..module-11": {
+                "uuid": "da10c7fe-cf81-441c-9694-4e9ddf2054d8",
+                "invariantUuid": "d4a5d266-e867-4171-8e2b-8fc99223d938",
+                "customizationUuid": "e4feeba0-1d6f-49e3-ae7c-cba83d479b51",
+                "description": null,
+                "name": "Vocg1804Vf..ocgapp_004..module-11",
+                "version": "2",
+                "modelCustomizationName": "Vocg1804Vf..ocgapp_004..module-11",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ocgapp_004",
+                  "baseModule": false
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            }
+          }
+        },
+        "vfModules": {
+          "vocg_1804_vf0..Vocg1804Vf..base_ocg..module-0": {
+            "uuid": "815db6e5-bdfd-4cb6-9575-82c36df8747a",
+            "invariantUuid": "e9c795c8-6b98-4db3-bd90-a84b8ca5181b",
+            "customizationUuid": "a7b333d7-7633-4197-b40d-80fcfcadee94",
+            "description": null,
+            "name": "Vocg1804Vf..base_ocg..module-0",
+            "version": "4",
+            "modelCustomizationName": "Vocg1804Vf..base_ocg..module-0",
+            "properties": {
+              "minCountInstances": 1,
+              "maxCountInstances": 1,
+              "initialCount": 1,
+              "vfModuleLabel": "base_ocg",
+              "baseModule": true
+            },
+            "inputs": {},
+            "volumeGroupAllowed": false
+          },
+          "vocg_1804_vf0..Vocg1804Vf..ocgapp_004..module-11": {
+            "uuid": "da10c7fe-cf81-441c-9694-4e9ddf2054d8",
+            "invariantUuid": "d4a5d266-e867-4171-8e2b-8fc99223d938",
+            "customizationUuid": "e4feeba0-1d6f-49e3-ae7c-cba83d479b51",
+            "description": null,
+            "name": "Vocg1804Vf..ocgapp_004..module-11",
+            "version": "2",
+            "modelCustomizationName": "Vocg1804Vf..ocgapp_004..module-11",
+            "properties": {
+              "minCountInstances": 0,
+              "maxCountInstances": null,
+              "initialCount": 0,
+              "vfModuleLabel": "ocgapp_004",
+              "baseModule": false
+            },
+            "inputs": {},
+            "volumeGroupAllowed": true
+          }
+        }
+      }
+    },
+    "serviceInstance": {
+      "f3862254-8df2-4a0a-8137-0a9fe985860c": {
+        "action": "Create",
+        "isDirty": true,
+        "vnfs": {
+          "vOCG_1804_VF 0": {
+            "action": "Create",
+            "inMaint": false,
+            "rollbackOnFailure": "true",
+            "originalName": "vOCG_1804_VF 0",
+            "isMissingData": false,
+            "trackById": "v0c2si90m5",
+            "vfModules":{},
+            "vnfStoreKey": "vOCG_1804_VF 0",
+            "upgradedVFMSonsCounter": 0,
+            "uuid": "aca3f7b1-15f9-45a5-b182-b8b5aca84a76",
+            "lcpCloudRegionId": "dpa2a",
+            "tenantId": "99ac518f94b6481faccedc32f86f4115",
+            "lineOfBusiness": "ADI",
+            "platformName": "3rdPartyCloud",
+            "modelInfo": {
+              "modelInvariantId": "db23d71a-4cb4-4030-9c9b-e3f886c2b35c",
+              "modelVersionId": "aca3f7b1-15f9-45a5-b182-b8b5aca84a76",
+              "modelName": "vOCG_1804_VF",
+              "modelVersion": "4.0",
+              "modelCustomizationId": "e9ed1da0-c078-426a-8e84-6f4e85eace59",
+              "modelCustomizationName": "vOCG_1804_VF 0",
+              "uuid": "aca3f7b1-15f9-45a5-b182-b8b5aca84a76",
+              "modelUniqueId": "e9ed1da0-c078-426a-8e84-6f4e85eace59"
+            },
+            "instanceName": "vOCG_1804_SVC-VNF",
+            "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "instanceParams": [
+              {}
+            ]
+          }
+        },
+        "vrfs": {},
+        "instanceParams": [
+          {}
+        ],
+        "validationCounter": 0,
+        "existingNames": {
+          "vocg_1804_svc-instance": "",
+          "vocg_1804_svc-vnf": "",
+          "vocg_1804_svc-vfmodule-base": "",
+          "vocg_1804_svc-vfmodule-1": "",
+          "vocg_1804_svc-vfmodule-1_vol": "",
+          "vocg_1804_svc-vfmodule-2": "",
+          "vocg_1804_svc-vfmodule-2_vol": ""
+        },
+        "existingVNFCounterMap": {
+          "e9ed1da0-c078-426a-8e84-6f4e85eace59": 1
+        },
+        "existingVRFCounterMap": {},
+        "existingVnfGroupCounterMap": {},
+        "existingNetworksCounterMap": {},
+        "optionalGroupMembersMap": {},
+        "networks": {},
+        "vnfGroups": {},
+        "bulkSize": 1,
+        "isUpgraded": false,
+        "upgradedVFMSonsCounter": 0,
+        "instanceName": "vOCG_1804_SVC-instance",
+        "globalSubscriberId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+        "subscriptionServiceType": "Mobility",
+        "owningEntityId": "10c645f5-9924-4b89-bec0-b17cf49d3cad",
+        "projectName": null,
+        "rollbackOnFailure": "true",
+        "aicZoneName": null,
+        "owningEntityName": "MOBILITY-CORE",
+        "testApi": "GR_API",
+        "tenantName": null,
+        "modelInfo": {
+          "modelInvariantId": "d1068db8-b933-4919-8972-8bc1aed366c8",
+          "modelVersionId": "f3862254-8df2-4a0a-8137-0a9fe985860c",
+          "modelName": "vOCG_1804_SVC",
+          "modelVersion": "4.0",
+          "uuid": "f3862254-8df2-4a0a-8137-0a9fe985860c",
+          "modelUniqueId": "f3862254-8df2-4a0a-8137-0a9fe985860c"
+        },
+        "isALaCarte": true,
+        "name": "vOCG_1804_SVC",
+        "version": "4.0",
+        "description": "updated HEAT",
+        "category": "Mobility",
+        "uuid": "f3862254-8df2-4a0a-8137-0a9fe985860c",
+        "invariantUuid": "d1068db8-b933-4919-8972-8bc1aed366c8",
+        "serviceType": "",
+        "serviceRole": "",
+        "vidNotions": {
+          "instantiationUI": "anyAlacarteWhichNotExcluded",
+          "modelCategory": "other",
+          "viewEditUI": "legacy",
+          "instantiationType": "ALaCarte"
+        },
+        "isEcompGeneratedNaming": true,
+        "isMultiStepDesign": false
+      }
+    },
+    "subscribers": [
+      {
+        "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+        "name": "Mobility",
+        "isPermitted": true
+      }
+    ]
+  }
+}
index fdaf3e3..5b3ff02 100755 (executable)
     "jest-sonar-reporter": "2.0.0",
     "ngx-wallaby-jest": "0.0.1",
     "npm-run-all": "^4.1.5",
-    "onap-ui-angular": "5.2.7",
-    "onap-ui-common": "1.0.105",
+    "onap-ui-angular": "5.4.1",
+    "onap-ui-common": "1.0.115",
     "prettier": "1.16.4",
     "pretty-quick": "^1.10.0",
     "redux-observable-es6-compat": "^1.2.1",
index 18c3f72..8374713 100644 (file)
@@ -213,6 +213,11 @@ export class DrawingBoardTreeComponent implements OnInit, AfterViewInit {
     return this.isLabeledAsAction(node, "Delete");
   }
 
+  isPaused(node: ITreeNode): boolean {
+    let isPaused = node.data.pauseInstantiation;
+    return !_.isNil(isPaused);
+  }
+
   private isLabeledAsAction(node: ITreeNode, action) {
     let nodeAction = node.data.action.split('_').pop();
     if (!_.isNil(nodeAction)) {
index 6109862..0ebee90 100644 (file)
         <div class="scaling invalid" *ngIf="node?.data?.errors?.scalingError" [attr.data-tests-id]="'scaling-policy'">
           <span>Limit</span><span>{{node?.data?.limitMembers}}</span>
         </div>
-        <div class="model-actions notShowOnViewMode ">
+        <div class="model-actions notShowOnViewMode" *ngIf="isPaused(node)" style="border-right: none;">
+              <custom-icon
+                [size]="'large'"
+                [name]="'pause-upon-completion'"
+                [testId]="'pause-upon-completion'">
+              </custom-icon>
+        </div>
+        <div class="model-actions notShowOnViewMode">
           <span class="icon-browse"
                 [ngClass]="{'isLinked' : isLinkedInstance(node?.data)}"
                 [attr.data-tests-id]="'node-'+node.data.modelId +'-' +node.data.modelName+'-menu-btn'"
index b774e03..95e7ba9 100644 (file)
@@ -408,7 +408,7 @@ drawing-board-tree {
                   }
                 }
 
-                .model-actions {
+                .model-actions{
                   :hover {
                     background: transparent !important;
                   }
@@ -496,7 +496,7 @@ drawing-board-tree {
 
 .cdk-overlay-pane.ngx-contextmenu {
   ul.dropdown-menu {
-    width: 200px;
+    width: 250px;
     box-shadow: none;
     padding: 0;
     padding-top: 10px;
index e5979f7..90ecb85 100644 (file)
@@ -74,9 +74,10 @@ describe('Drawing board tree Service', () => {
       new TreeNodeContextMenuModel('upgrade', 'context-menu-upgrade', 'Upgrade', 'upgrade'),
       new TreeNodeContextMenuModel('undoDelete', 'context-menu-undoDelete', 'Undo Delete', 'undo-delete'),
       new TreeNodeContextMenuModel('undoUpgrade', 'context-menu-undoUpgrade', 'Undo Upgrade', 'undo-delete'),
-      new TreeNodeContextMenuModel('changeAssociations', 'context-menu-changeAssociations', 'Change Associations', 'edit-file-o')
+      new TreeNodeContextMenuModel('changeAssociations', 'context-menu-changeAssociations', 'Change Associations', 'edit-file-o'),
+      new TreeNodeContextMenuModel('pauseInstantiation', 'context-menu-pause', 'Add pause upon completion', 'pause-upon-completion')
     ];
-    expect(options.length).toEqual(10);
+    expect(options.length).toEqual(11);
     expect(options).toEqual(expected);
   });
 
index dfd89ca..3fc5c53 100644 (file)
@@ -35,6 +35,10 @@ export class  DrawingBoardTreeService {
     return FeatureFlagsService.getFlagState(Features.FLAG_1902_NEW_VIEW_EDIT, this.store);
   }
 
+  isPauseVFMInstantiationCreationFlagTrue() {
+    return FeatureFlagsService.getFlagState(Features.FLAG_2006_PAUSE_VFMODULE_INSTANTIATION_CREATION, this.store);
+  }
+
   /**********************************************
    return all drawing board context menu options
    ***********************************************/
@@ -49,7 +53,8 @@ export class  DrawingBoardTreeService {
       new TreeNodeContextMenuModel('upgrade', 'context-menu-upgrade', 'Upgrade', 'upgrade'),
       new TreeNodeContextMenuModel('undoDelete', 'context-menu-undoDelete', 'Undo Delete', 'undo-delete'),
       new TreeNodeContextMenuModel('undoUpgrade', 'context-menu-undoUpgrade', 'Undo Upgrade', 'undo-delete'),
-      new TreeNodeContextMenuModel('changeAssociations', 'context-menu-changeAssociations', 'Change Associations', 'edit-file-o')
+      new TreeNodeContextMenuModel('changeAssociations', 'context-menu-changeAssociations', 'Change Associations', 'edit-file-o'),
+      new TreeNodeContextMenuModel('pauseInstantiation', 'context-menu-pause', 'Add pause upon completion', 'pause-upon-completion')
     ];
   }
 
index c225687..42ee238 100644 (file)
@@ -20,6 +20,7 @@ import {VfModuleUpgradePopupService} from "../../../../../shared/components/gene
 import {instance, mock, when} from "ts-mockito";
 import each from "jest-each";
 import {VfModule} from "../../../../../shared/models/vfModule";
+import {VfModuleTreeNode} from "../../../../../shared/models/vfModuleTreeNode";
 
 class MockAppStore<T> {
   getState() {
@@ -127,6 +128,26 @@ describe('VFModule Model Info', () => {
     expect(nextLevel).toBeNull();
   });
 
+  each([
+    ['afterCompletion', 'afterCompletion'],
+    ['undefined', undefined]
+  ]).
+  test('createNode should return pauseInstantiation status %s', (description, pauseInstantiationStatus) => {
+    const modelName: string = "vfModuleModelName";
+    const vfModuleInstance =  {
+      "vfModuleInstanceName": {
+        "pauseInstantiation": pauseInstantiationStatus,
+      }
+    };
+    const currentModel = {};
+    const parentModel = {};
+    const serviceModelId = "serviceModelId";
+
+    let actual: VfModuleTreeNode = vfModuleModel.createNode(<any>vfModuleInstance, <any>currentModel, <any>parentModel, modelName, 0, serviceModelId);
+    let expected: string = pauseInstantiationStatus;
+    expect(actual.pauseInstantiation).toEqual(expected);
+  });
+
   test('getModel should return Module model', () => {
     let model = vfModuleModel.getModel({
       "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
index c7c4d3a..607519a 100644 (file)
@@ -22,6 +22,7 @@ import {IframeService} from "../../../../../shared/utils/iframe.service";
 import {
   deleteActionVfModuleInstance,
   deleteVFModuleField,
+  pauseActionVFModuleInstance,
   removeVfModuleInstance,
   undoDeleteVfModuleInstance,
   undoUgradeVFModule,
@@ -97,6 +98,7 @@ export class VFModuleModelInfo implements ILevelNodeInfo {
     newVfModule.menuActions = this.getMenuAction(<any>newVfModule, serviceModelId);
     newVfModule.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
     newVfModule.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
+    newVfModule.pauseInstantiation = instance.pauseInstantiation;
 
     newVfModule = this._sharedTreeService.addingStatusProperty(newVfModule);
     return newVfModule;
@@ -387,6 +389,13 @@ export class VFModuleModelInfo implements ILevelNodeInfo {
           return this._sharedTreeService.shouldShowUndoUpgrade(node);
         }
       },
+      pauseInstantiation: {
+        method: (node, serviceModelId) => {
+          this._store.dispatch(pauseActionVFModuleInstance(node.data.dynamicModelName, node.parent.data.vnfStoreKey, serviceModelId, node.data.modelName));
+        },
+        visible: () => this._sharedTreeService.shouldShowPauseInstantiation(),
+        enable: () => true,
+      }
     };
   }
 
index 249f9ec..98edb41 100644 (file)
@@ -222,6 +222,9 @@ export class SharedTreeService {
     }
   }
 
+  shouldShowPauseInstantiation(): boolean {
+    return (FeatureFlagsService.getFlagState(Features.FLAG_2006_PAUSE_VFMODULE_INSTANTIATION_CREATION, this._store));
+  }
   /****************************************************
    * should return true if customer can upgrade a VFM *
    ****************************************************/
index d25850d..a6c933a 100644 (file)
@@ -2,7 +2,7 @@ import {ChildNodeInstance} from "./nodeInstance";
 import {NodeModel} from "./nodeModel";
 import {ServiceNodeTypes} from "./ServiceNodeTypes";
 import * as _ from 'lodash';
-import {ServiceInstanceActions} from "./serviceInstanceActions";
+import {PauseStatus, ServiceInstanceActions} from "./serviceInstanceActions";
 import {ModelInfo} from "./modelInfo";
 
 export enum TreeLevel {
@@ -34,6 +34,7 @@ export class TreeNodeModel {
   instanceId?: string;
   instanceType?: string;
   instanceName?: string;
+  pauseInstantiation?: PauseStatus;
 
   constructor(instance: ChildNodeInstance, nodeModel: NodeModel){
 
index 0ab1758..50840d1 100644 (file)
@@ -22,7 +22,7 @@ export enum Features {
   FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF = 'FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF',
   FLAG_2006_VNF_LOB_MULTI_SELECT= 'FLAG_2006_VNF_LOB_MULTI_SELECT',
   FLAG_2006_NEW_VIEW_EDIT_BUTTON_IN_INSTANTIATION_STATUS= 'FLAG_2006_NEW_VIEW_EDIT_BUTTON_IN_INSTANTIATION_STATUS',
-  FLAG_2006_PAUSE_VFMODULE_INSTANTIATION_CREATION= 'FLAG_2006_PAUSE_VFMODULE_INSTANTIATION_CREATION',
+  FLAG_2006_PAUSE_VFMODULE_INSTANTIATION_CREATION = 'FLAG_2006_PAUSE_VFMODULE_INSTANTIATION_CREATION',
 }
 
 @Injectable()