Introduced feature toggle for workflows API 49/81849/2
authorgolabek <tomasz.golabek@nokia.com>
Fri, 8 Mar 2019 12:05:24 +0000 (13:05 +0100)
committergolabek <tomasz.golabek@nokia.com>
Mon, 11 Mar 2019 10:37:33 +0000 (11:37 +0100)
FLAG_HANDLE_SO_WORKFLOWS was added to list of flags and used in js

Change-Id: I720cd01b001fd1be75ec49628d7bb4b04f883384
Issue-ID: VID-398
Signed-off-by: Tomasz Golabek <tomasz.golabek@nokia.com>
vid-app-common/src/main/java/org/onap/vid/properties/Features.java
vid-app-common/src/main/webapp/WEB-INF/conf/dev.features.properties
vid-app-common/src/main/webapp/WEB-INF/conf/features.properties
vid-app-common/src/main/webapp/app/vid/scripts/constants/componentConstants.js
vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.test.js
vid-app-common/src/main/webapp/app/vid/scripts/services/change-management.service.js
vid-automation/src/test/resources/features.properties

index dfe3185..1c68e82 100644 (file)
@@ -62,6 +62,7 @@ public enum Features implements Feature {
     FLAG_1902_NEW_VIEW_EDIT,
     FLAG_EXP_USE_DEFAULT_HOST_NAME_VERIFIER,
     FLAG_1902_VNF_GROUPING,
+    FLAG_HANDLE_SO_WORKFLOWS
     ;
 
     public boolean isActive() {
index d82b043..8ba1484 100644 (file)
@@ -8,6 +8,7 @@ FLAG_COLLECTION_RESOURCE_SUPPORT = true
 FLAG_NETWORK_TO_ASYNC_INSTANTIATION = false
 FLAG_SERVICE_MODEL_CACHE = true
 FLAG_SHOW_ASSIGNMENTS = true
+FLAG_HANDLE_SO_WORKFLOWS = true
 
 FLAG_SHOW_VERIFY_SERVICE = true
 FLAG_DUPLICATE_VNF = true
index 36f607f..4cf42f2 100644 (file)
@@ -20,11 +20,12 @@ FLAG_SHOW_ASSIGNMENTS = true
 FLAG_SHOW_VERIFY_SERVICE = false
 FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS = true
 FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS = true
-FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST=true
-FLAG_1810_CR_LET_SELECTING_COLLECTOR_TYPE_UNCONDITIONALLY=true
+FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST = true
+FLAG_1810_CR_LET_SELECTING_COLLECTOR_TYPE_UNCONDITIONALLY = true
 FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE = true
 FLAG_1810_AAI_LOCAL_CACHE = true
 FLAG_EXP_USE_DEFAULT_HOST_NAME_VERIFIER = false
+FLAG_HANDLE_SO_WORKFLOWS = false
 
 # Modern UI (Drawing-Board; View/Edit)
 # - - - - - - - - - - - - - - - - - -
index dbf6588..fc3d8f7 100755 (executable)
@@ -257,7 +257,8 @@ appDS2
       FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS: "FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS",
       FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST: "FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST",
       FLAG_1810_CR_LET_SELECTING_COLLECTOR_TYPE_UNCONDITIONALLY: "FLAG_1810_CR_LET_SELECTING_COLLECTOR_TYPE_UNCONDITIONALLY",
-      FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE: "FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE"
+      FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE: "FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE",
+      FLAG_HANDLE_SO_WORKFLOWS: "FLAG_HANDLE_SO_WORKFLOWS"
     }
 
   };
index 8a7d59a..88caef2 100644 (file)
         };
 
         vm.loadWorkFlows = function () {
-          // Should be corrected when VID-397 will be closed. At the moment there is a need
-          // to merge local and remote workflows not to broke current functionality.
-          return vm.loadLocalWorkFlows()
-          .then(vm.loadLocalWorkFlowsParameters)
-          .then(vm.loadRemoteWorkFlows)
-          .then(function () {
-            vm.workflows = vm.localWorkflows.concat(vm.remoteWorkflows.map(item => item.name));
-          }).then(function () {
-            vm.loadRemoteWorkFlowsParameters();
-          });
+          if (featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_HANDLE_SO_WORKFLOWS)) {
+            return vm.loadRemoteWorkFlows()
+            .then(function () {
+              vm.workflows = vm.remoteWorkflows.map(item => item.name);
+            }).then(function () {
+              vm.loadRemoteWorkFlowsParameters();
+            });
+          }else{
+            return vm.loadLocalWorkFlows()
+            .then(vm.loadLocalWorkFlowsParameters)
+            .then(function () {
+              vm.workflows = vm.localWorkflows;
+            })
+          }
         };
 
         vm.loadLocalWorkFlows = function () {
index 5f36691..9810c00 100644 (file)
@@ -25,6 +25,8 @@ describe('Testing workFlows from SO', () => {
   let $notNeeded;
   let $controller;
   let $changeManagementService;
+  let $featureFlags;
+
   beforeEach(
       angular.mock.module('app')
   );
@@ -38,6 +40,10 @@ describe('Testing workFlows from SO', () => {
     // mock q
     $q = jestMock.fn();
     $defer = jestMock.fn();
+    $flags = jestMock.fn();
+    $flags.FEATURE_FLAGS = {FLAG_HANDLE_SO_WORKFLOWS: ''};
+    $featureFlags = jestMock.fn();
+    $featureFlags.isOn = jestMock.fn(() => true);
     $q.defer = jestMock.fn(() => $defer);
     $defer.promise = Promise.resolve({});
     // mock AaiService
@@ -53,10 +59,10 @@ describe('Testing workFlows from SO', () => {
       Upload: $notNeeded,
       $log: $notNeeded,
       _: $notNeeded,
-      COMPONENT: $notNeeded,
+      COMPONENT: $flags,
       VIDCONFIGURATION: $notNeeded,
       DataService: $notNeeded,
-      featureFlags: $notNeeded,
+      featureFlags: $featureFlags,
       $scope: $notNeeded,
     });
   }));
@@ -77,10 +83,23 @@ describe('Testing workFlows from SO', () => {
      );
   });
 
-  test('Verify load workflows will call load from SO and join workflow lists', () => {
+  test('Verify load workflows wont load parameters from local service', () => {
     // given
     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
-    let getLocalWorkflowsParametersStub = Promise.resolve({"data": {}});
+    let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
+        "parameterDefinitions": [
+          {
+            "id": 1,
+            "name": "Configuration Parameters",
+            "required": true,
+            "type": "STRING",
+            "pattern": ".*",
+            "msgOnPatternError": null,
+            "msgOnContentError": null,
+            "acceptableFileType": null
+          }
+        ],
+      }});
     let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 1"}, {"id": "2", "name": "workflow 2"}]});
     let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{"parameterDefinitions": []}});
 
@@ -91,7 +110,6 @@ describe('Testing workFlows from SO', () => {
     $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
     // when
     return $controller.loadWorkFlows().then(() => {
-      expect($controller.workflows).toContain('workflow 0');
       expect($controller.workflows).toContain('workflow 1');
       expect($controller.workflows).toContain('workflow 2');
     });
@@ -122,8 +140,33 @@ describe('Testing workFlows from SO', () => {
     });
   });
 
+  test('Verify load workflows wont load workflows parameters from SO if feature flag is disabled', () => {
+    // given
+    $featureFlags.isOn = jestMock.fn(() => false);
+    let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
+    let getLocalWorkflowsParametersStub = Promise.resolve({"data": {}});
+    let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 0"}]});
+    let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{"parameterDefinitions": [
+          {"id": 1, "name": "parameter 1", "required": true, "type": "STRING", "pattern": "[0-9]*"},
+          {"id": 2, "name": "parameter 2", "required": true, "type": "STRING", "pattern": ".*"},
+          {"id": 3, "name": "parameter 3", "required": false, "type": "STRING", "pattern": "[0-9]*"}]}});
+
+    $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
+    $changeManagementService.getWorkflows = () => getWorkflowsStub;
+    $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
+    $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
+    $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
+    // when
+    return $controller.loadWorkFlows()
+    .then(() => {
+      expect($controller.workflows).toEqual(["workflow 0"]);
+      expect($controller.remoteWorkflowsParameters).toEqual(undefined);
+    });
+  });
+
   test('Verify load workflows will call load workflows parameters from local service', () => {
     // given
+    $featureFlags.isOn = jestMock.fn(() => false);
     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
     let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
         "parameterDefinitions": [
@@ -139,14 +182,10 @@ describe('Testing workFlows from SO', () => {
           }
         ],
       }});
-    let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{}]});
-    let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{}});
 
     $controller.changeManagement.vnfNames = [{name: 'test1'}];
     $changeManagementService.getWorkflows = () => getWorkflowsStub;
     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
-    $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
-    $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
     // when
 
     let result = new Map();
@@ -172,23 +211,22 @@ describe('Testing workFlows from SO', () => {
     });
   });
 
-  test('Verify broken SO workflows wont change content of local workflows', () => {
+  test('Verify broken SO workflows will return empty list of workflows', () => {
     // given
-    let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
     let getSOWorkflowsPromiseStub = Promise.reject(new Error("Broken SO workflows service."));
 
-    $controller.changeManagement.vnfNames = "any";
-    $changeManagementService.getWorkflows = () => getWorkflowsStub;
+    $controller.changeManagement.vnfNames = [{name:"any"}];
     $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
     // when
     $controller.loadWorkFlows()
     .then(() => {
-      expect($controller.workflows).toEqual(['workflow 0']);
+      expect($controller.workflows).toEqual([]);
     });
   });
 
   test('Verify get internal workflow parameters should return an empty list if not such workflow exist', () => {
   // given
+    $featureFlags.isOn = jestMock.fn(() => false);
     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
     let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
         "parameterDefinitions": [
@@ -204,14 +242,10 @@ describe('Testing workFlows from SO', () => {
           }
         ],
       }});
-    let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{}]});
-    let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{}});
 
     $controller.changeManagement.vnfNames = [{name: 'test1'}];
     $changeManagementService.getWorkflows = () => getWorkflowsStub;
     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
-    $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
-    $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
     // when
     return $controller.loadWorkFlows()
     .then(() => {
@@ -222,6 +256,7 @@ describe('Testing workFlows from SO', () => {
 
   test('Verify get internal workflow parameters should return an empty list if not such type exist', () => {
     // given
+    $featureFlags.isOn = jestMock.fn(() => false);
     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
     let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
         "parameterDefinitions": [
@@ -237,14 +272,10 @@ describe('Testing workFlows from SO', () => {
           }
         ],
       }});
-    let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{}]});
-    let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{}});
 
     $controller.changeManagement.vnfNames = [{name: 'test1'}];
     $changeManagementService.getWorkflows = () => getWorkflowsStub;
     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
-    $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
-    $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
     // when
     return $controller.loadWorkFlows()
     .then(() => {
@@ -255,6 +286,7 @@ describe('Testing workFlows from SO', () => {
 
   test('Verify get internal workflow parameters should return a list if such workflow and type exist', () => {
     // given
+    $featureFlags.isOn = jestMock.fn(() => false);
     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
     let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
         "parameterDefinitions": [
@@ -270,14 +302,9 @@ describe('Testing workFlows from SO', () => {
           }
         ],
       }});
-    let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{}]});
-    let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{}});
-
     $controller.changeManagement.vnfNames = [{name: 'test1'}];
     $changeManagementService.getWorkflows = () => getWorkflowsStub;
     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
-    $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
-    $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
 
     let result = [{
         "acceptableFileType": null,
index 45aedd1..2a06e75 100644 (file)
@@ -45,7 +45,8 @@
             return $http.get(COMPONENT.GET_SO_WORKFLOWS, {params: {vnfName: vnfNames}})
             .success(function (response) {
                 return {data: response};
-            }).catch(function () {
+            }).catch(function (ex) {
+                console.error("Problem when getting workflows from SO API occurred.", ex.stack);
                 return {data: []};
             });
         };
index 8ff0db2..6f4f4ef 100644 (file)
@@ -10,5 +10,6 @@ FLAG_COLLECTION_RESOURCE_SUPPORT = true
 FLAG_NETWORK_TO_ASYNC_INSTANTIATION = true
 FLAG_SERVICE_MODEL_CACHE = true
 FLAG_SHOW_ASSIGNMENTS = true
-FLAG_SHOW_VERIFY_SERVICE=false
+FLAG_SHOW_VERIFY_SERVICE = false
 FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD = false
+FLAG_HANDLE_SO_WORKFLOWS = false
\ No newline at end of file