2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 require('./new-change-management.controller');
22 const jestMock = require('jest-mock');
24 describe('Testing workFlows from SO', () => {
27 let $changeManagementService;
31 angular.mock.module('app')
34 beforeEach(inject(function (_$controller_) {
35 $notNeeded = jestMock.fn();
37 // mock ChangeManagementService
38 $changeManagementService = jestMock.fn();
39 $changeManagementService.getAllSDCServices = jestMock.fn(() => Promise.resolve([]));
43 $defer = jestMock.fn();
44 $flags = jestMock.fn();
45 $flags.FEATURE_FLAGS = {FLAG_HANDLE_SO_WORKFLOWS: ''};
46 $featureFlags = jestMock.fn();
47 $featureFlags.isOn = jestMock.fn(() => true);
48 $q.defer = jestMock.fn(() => $defer);
49 $defer.promise = Promise.resolve({});
51 $aaiService = jestMock.fn();
52 $aaiService.getLoggedInUserID = jestMock.fn();
53 $aaiService.getSubscribers = jestMock.fn();
54 $controller = _$controller_('newChangeManagementModalController', {
55 $uibModalInstance: $notNeeded,
56 $uibModal: $notNeeded,
58 AaiService: $aaiService,
59 changeManagementService: $changeManagementService,
64 VIDCONFIGURATION: $notNeeded,
65 DataService: $notNeeded,
66 featureFlags: $featureFlags,
71 test('Verify load workflows from SO will call getSOWorkflow and return only names of workflows', () => {
73 $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
74 let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 1"}, {"id": "2", "name": "workflow 2"}]});
75 $changeManagementService.getSOWorkflows = () => getSOWorkflowsPromiseStub;
76 $controller.workflows = [];
78 return $controller.loadRemoteWorkFlows()
80 remoteWorkflows = $controller.remoteWorkflows.map(item => item.name);
81 expect(remoteWorkflows).toContain('workflow 1');
82 expect(remoteWorkflows).toContain('workflow 2');
87 test('Verify load workflows wont load parameters from local service', () => {
89 let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
90 let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
91 "parameterDefinitions": [
94 "name": "Configuration Parameters",
98 "msgOnPatternError": null,
99 "msgOnContentError": null,
100 "acceptableFileType": null
104 let getSOWorkflowsPromiseStub = Promise.resolve({"data":[{
106 "id": "ab6478e4-ea33-3346-ac12-ab121484a333",
107 "workflowName": "inPlaceSoftwareUpdate",
108 "name": "inPlaceSoftwareUpdate",
110 "workflowInputParameters": [
112 "label": "New Software Version",
115 "soFieldName": "new_software_version",
116 "soPayloadLocation": "userParams",
123 $controller.changeManagement.vnfNames = [{modelVersionId: 'test1', name:'test'}];
124 $changeManagementService.getWorkflows = () => getWorkflowsStub;
125 $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
126 $changeManagementService.getSOWorkflows = () => getSOWorkflowsPromiseStub;
128 return $controller.loadWorkFlows().then(() => {
129 expect($controller.workflows).toContain('inPlaceSoftwareUpdate');
130 expect($controller.localWorkflowsParameters).toEqual(new Map());
134 test('Verify load workflows will set workflows and parameters', () => {
136 let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
137 let getLocalWorkflowsParametersStub = Promise.resolve({"data": {}});
138 let getSOWorkflowsPromiseStub = Promise.resolve({"data":[{
140 "id": "ab6478e4-ea33-3346-ac12-ab121484a333",
141 "workflowName": "inPlaceSoftwareUpdate",
142 "name": "inPlaceSoftwareUpdate",
144 "workflowInputParameters": [
146 "label": "New Software Version",
149 "soFieldName": "new_software_version",
150 "soPayloadLocation": "userParams",
156 $controller.changeManagement.vnfNames = [{modelVersionId: 'test1', name:'test'}];
157 $changeManagementService.getWorkflows = () => getWorkflowsStub;
158 $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
159 $changeManagementService.getSOWorkflows = () => getSOWorkflowsPromiseStub;
160 $changeManagementService.getSOWorkflowParameter = () => getSOWorkflowsParametersPromiseStub;
162 return $controller.loadWorkFlows()
164 expect($controller.workflows).toEqual(["inPlaceSoftwareUpdate"]);
165 expect($controller.remoteWorkflowsParameters).toEqual(new Map([["inPlaceSoftwareUpdate",
167 "name": "New Software Version",
169 "id": "new_software_version",
170 "soFieldName": "new_software_version",
179 test('Verify load workflows wont load workflows parameters from SO if feature flag is disabled', () => {
181 $featureFlags.isOn = jestMock.fn(() => false);
182 let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
183 let getLocalWorkflowsParametersStub = Promise.resolve({"data": {}});
184 let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 0"}]});
185 let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{"parameterDefinitions": [
186 {"id": 1, "name": "parameter 1", "required": true, "type": "text", "pattern": "[0-9]*"},
187 {"id": 2, "name": "parameter 2", "required": true, "type": "text", "pattern": ".*"},
188 {"id": 3, "name": "parameter 3", "required": false, "type": "text", "pattern": "[0-9]*"}]}});
190 $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
191 $changeManagementService.getWorkflows = () => getWorkflowsStub;
192 $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
193 $changeManagementService.getSOWorkflows = () => getSOWorkflowsPromiseStub;
194 $changeManagementService.getSOWorkflowParameter = () => getSOWorkflowsParametersPromiseStub;
196 return $controller.loadWorkFlows()
198 expect($controller.workflows).toEqual(["workflow 0"]);
199 expect($controller.remoteWorkflowsParameters).toEqual(new Map());
203 test('Verify load workflows will call load workflows parameters from local service', () => {
205 $featureFlags.isOn = jestMock.fn(() => false);
206 let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
207 let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
208 "parameterDefinitions": [
211 "name": "Configuration Parameters",
215 "msgOnPatternError": null,
216 "msgOnContentError": null,
217 "acceptableFileType": null
222 $controller.changeManagement.vnfNames = [{name: 'test1'}];
223 $changeManagementService.getWorkflows = () => getWorkflowsStub;
224 $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
227 let result = new Map();
228 const scaleOutResult = [
230 "acceptableFileType": null,
232 "msgOnContentError": null,
233 "msgOnPatternError": null,
234 "name": "Configuration Parameters",
240 result.set("VNF Scale Out", scaleOutResult);
242 return $controller.loadWorkFlows()
244 expect($controller.localWorkflowsParameters).toEqual(result);
248 test('Verify broken SO workflows will return empty list of workflows', () => {
250 let getSOWorkflowsPromiseStub = Promise.reject(new Error("Broken SO workflows service."));
252 $controller.changeManagement.vnfNames = [{name:"any"}];
253 $changeManagementService.getSOWorkflows = () => getSOWorkflowsPromiseStub;
255 $controller.loadWorkFlows()
257 expect($controller.workflows).toEqual([]);
261 test('Verify get internal workflow parameters should return an empty list if not such workflow exist', () => {
263 $featureFlags.isOn = jestMock.fn(() => false);
264 let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
265 let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
266 "parameterDefinitions": [
269 "name": "Configuration Parameters",
273 "msgOnPatternError": null,
274 "msgOnContentError": null,
275 "acceptableFileType": null
280 $controller.changeManagement.vnfNames = [{name: 'test1'}];
281 $changeManagementService.getWorkflows = () => getWorkflowsStub;
282 $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
284 return $controller.loadWorkFlows()
286 let internalWorkFlowParameters = $controller.getInternalWorkFlowParameters("NON-EXISTENT WF", "text");
287 expect(internalWorkFlowParameters).toEqual([]);
291 test('Verify get internal workflow parameters should return an empty list if not such type exist', () => {
293 $featureFlags.isOn = jestMock.fn(() => false);
294 let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
295 let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
296 "parameterDefinitions": [
299 "name": "Configuration Parameters",
303 "msgOnPatternError": null,
304 "msgOnContentError": null,
305 "acceptableFileType": null
310 $controller.changeManagement.vnfNames = [{name: 'test1'}];
311 $changeManagementService.getWorkflows = () => getWorkflowsStub;
312 $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
314 return $controller.loadWorkFlows()
316 let internalWorkFlowParameters = $controller.getInternalWorkFlowParameters("VNF Scale Out", "FILE");
317 expect(internalWorkFlowParameters).toEqual([]);
321 test('Verify get internal workflow parameters should return a list if such workflow and type exist', () => {
323 $featureFlags.isOn = jestMock.fn(() => false);
324 let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
325 let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
326 "parameterDefinitions": [
329 "name": "Configuration Parameters",
333 "msgOnPatternError": null,
334 "msgOnContentError": null,
335 "acceptableFileType": null
339 $controller.changeManagement.vnfNames = [{name: 'test1'}];
340 $changeManagementService.getWorkflows = () => getWorkflowsStub;
341 $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
344 "acceptableFileType": null,
346 "msgOnContentError": null,
347 "msgOnPatternError": null,
348 "name": "Configuration Parameters",
354 return $controller.loadWorkFlows()
356 let internalWorkFlowParameters = $controller.getInternalWorkFlowParameters("VNF Scale Out", "text");
357 expect(internalWorkFlowParameters).toEqual(result);
361 test('Verify get remote workflow should call internal service for params when workflow is native', () =>{
362 let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}})
363 let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
364 "parameterDefinitions": [
367 "name": "Configuration Parameters",
371 "msgOnPatternError": null,
372 "msgOnContentError": null,
373 "acceptableFileType": null
377 let getSOWorkflowsPromiseStub = Promise.resolve({"data":[{
379 "id": "ab6478e4-ea33-3346-ac12-ab121484a333",
380 "workflowName": "inPlaceSoftwareUpdate",
381 "name": "inPlaceSoftwareUpdate",
383 "workflowInputParameters": [
388 $controller.changeManagement.vnfNames = [{modelVersionId: 'test1', name:'test'}];
389 $changeManagementService.getWorkflows = () => getWorkflowsStub;
390 $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
391 $changeManagementService.getSOWorkflows = () => getSOWorkflowsPromiseStub;
393 return $controller.loadWorkFlows().then(() => {
394 expect($controller.workflows).toContain('inPlaceSoftwareUpdate');
395 expect($controller.localWorkflowsParameters.get('inPlaceSoftwareUpdate')).toEqual([{
397 "name": "Configuration Parameters",
401 "msgOnPatternError": null,
402 "msgOnContentError": null,
403 "acceptableFileType": null