Merge "Merge simulator from ECOMP's repository"
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / modals / new-change-management / new-change-management.controller.test.js
1 /*-
2  * ============LICENSE_START=======================================================
3  * VID
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 require('./new-change-management.controller');
22 const jestMock = require('jest-mock');
23
24 describe('Testing workFlows from SO', () => {
25   let $notNeeded;
26   let $controller;
27   let $changeManagementService;
28   let $featureFlags;
29
30   beforeEach(
31       angular.mock.module('app')
32   );
33
34   beforeEach(inject(function (_$controller_) {
35     $notNeeded = jestMock.fn();
36     // mock ChangeManagementService
37     $changeManagementService = jestMock.fn();
38     $changeManagementService.getAllSDCServices = jestMock.fn(() => Promise.resolve([]));
39
40     // mock q
41     $q = jestMock.fn();
42     $defer = jestMock.fn();
43     $flags = jestMock.fn();
44     $flags.FEATURE_FLAGS = {FLAG_HANDLE_SO_WORKFLOWS: ''};
45     $featureFlags = jestMock.fn();
46     $featureFlags.isOn = jestMock.fn(() => true);
47     $q.defer = jestMock.fn(() => $defer);
48     $defer.promise = Promise.resolve({});
49     // mock AaiService
50     $aaiService = jestMock.fn();
51     $aaiService.getLoggedInUserID = jestMock.fn();
52     $aaiService.getSubscribers = jestMock.fn();
53     $controller = _$controller_('newChangeManagementModalController', {
54       $uibModalInstance: $notNeeded,
55       $uibModal: $notNeeded,
56       $q: $q,
57       AaiService: $aaiService,
58       changeManagementService: $changeManagementService,
59       Upload: $notNeeded,
60       $log: $notNeeded,
61       _: $notNeeded,
62       COMPONENT: $flags,
63       VIDCONFIGURATION: $notNeeded,
64       DataService: $notNeeded,
65       featureFlags: $featureFlags,
66       $scope: $notNeeded,
67     });
68   }));
69
70   test('Verify load workflows from SO will call getSOWorkflow and return only names of workflows', () => {
71     // given
72     $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
73     let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 1"}, {"id": "2", "name": "workflow 2"}]});
74     $changeManagementService.getSOWorkflows = () => getSOWorkflowsPromiseStub;
75     $controller.workflows = [];
76     // when
77     return $controller.loadRemoteWorkFlows()
78     .then(() => {
79            remoteWorkflows = $controller.remoteWorkflows.map(item => item.name);
80            expect(remoteWorkflows).toContain('workflow 1');
81            expect(remoteWorkflows).toContain('workflow 2');
82         }
83      );
84   });
85
86   test('Verify load workflows wont load parameters from local service', () => {
87     // given
88     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
89     let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
90         "parameterDefinitions": [
91           {
92             "id": 1,
93             "name": "Configuration Parameters",
94             "required": true,
95             "type": "STRING",
96             "pattern": ".*",
97             "msgOnPatternError": null,
98             "msgOnContentError": null,
99             "acceptableFileType": null
100           }
101         ],
102       }});
103     let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 1"}, {"id": "2", "name": "workflow 2"}]});
104     let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{"parameterDefinitions": []}});
105
106     $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
107     $changeManagementService.getWorkflows = () => getWorkflowsStub;
108     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
109     $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
110     $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
111     // when
112     return $controller.loadWorkFlows().then(() => {
113       expect($controller.workflows).toContain('workflow 1');
114       expect($controller.workflows).toContain('workflow 2');
115     });
116   });
117
118   test('Verify load workflows will call load workflows parameters from SO', () => {
119     // given
120     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
121     let getLocalWorkflowsParametersStub = Promise.resolve({"data": {}});
122     let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 0"}]});
123     let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{"parameterDefinitions": [
124           {"id": 1, "name": "parameter 1", "required": true, "type": "STRING", "pattern": "[0-9]*"},
125           {"id": 2, "name": "parameter 2", "required": true, "type": "STRING", "pattern": ".*"},
126           {"id": 3, "name": "parameter 3", "required": false, "type": "STRING", "pattern": "[0-9]*"}]}});
127
128     $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
129     $changeManagementService.getWorkflows = () => getWorkflowsStub;
130     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
131     $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
132     $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
133     // when
134     return $controller.loadWorkFlows()
135     .then(() => {
136       expect($controller.remoteWorkflowsParameters).toEqual(new Map([["workflow 0",
137         [{"id": 1, "name": "parameter 1", "pattern": "[0-9]*", "required": true, "type": "STRING"},
138          {"id": 2, "name": "parameter 2", "pattern": ".*", "required": true, "type": "STRING"},
139          {"id": 3, "name": "parameter 3", "pattern": "[0-9]*", "required": false, "type": "STRING"}]]]));
140     });
141   });
142
143   test('Verify load workflows wont load workflows parameters from SO if feature flag is disabled', () => {
144     // given
145     $featureFlags.isOn = jestMock.fn(() => false);
146     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
147     let getLocalWorkflowsParametersStub = Promise.resolve({"data": {}});
148     let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 0"}]});
149     let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{"parameterDefinitions": [
150           {"id": 1, "name": "parameter 1", "required": true, "type": "STRING", "pattern": "[0-9]*"},
151           {"id": 2, "name": "parameter 2", "required": true, "type": "STRING", "pattern": ".*"},
152           {"id": 3, "name": "parameter 3", "required": false, "type": "STRING", "pattern": "[0-9]*"}]}});
153
154     $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
155     $changeManagementService.getWorkflows = () => getWorkflowsStub;
156     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
157     $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
158     $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
159     // when
160     return $controller.loadWorkFlows()
161     .then(() => {
162       expect($controller.workflows).toEqual(["workflow 0"]);
163       expect($controller.remoteWorkflowsParameters).toEqual(undefined);
164     });
165   });
166
167   test('Verify load workflows will call load workflows parameters from local service', () => {
168     // given
169     $featureFlags.isOn = jestMock.fn(() => false);
170     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
171     let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
172         "parameterDefinitions": [
173           {
174             "id": 1,
175             "name": "Configuration Parameters",
176             "required": true,
177             "type": "STRING",
178             "pattern": ".*",
179             "msgOnPatternError": null,
180             "msgOnContentError": null,
181             "acceptableFileType": null
182           }
183         ],
184       }});
185
186     $controller.changeManagement.vnfNames = [{name: 'test1'}];
187     $changeManagementService.getWorkflows = () => getWorkflowsStub;
188     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
189     // when
190
191     let result = new Map();
192     const scaleOutResult = new Map();
193     scaleOutResult.set("FILE", []);
194     scaleOutResult.set("STRING", [
195       {
196         "acceptableFileType": null,
197         "id": 1,
198         "msgOnContentError": null,
199         "msgOnPatternError": null,
200         "name": "Configuration Parameters",
201         "pattern": ".*",
202         "required": true,
203         "type": "STRING",
204       }
205     ]);
206     result.set("VNF Scale Out", scaleOutResult);
207
208     return $controller.loadWorkFlows()
209     .then(() => {
210       expect($controller.localWorkflowsParameters).toEqual(result);
211     });
212   });
213
214   test('Verify broken SO workflows will return empty list of workflows', () => {
215     // given
216     let getSOWorkflowsPromiseStub = Promise.reject(new Error("Broken SO workflows service."));
217
218     $controller.changeManagement.vnfNames = [{name:"any"}];
219     $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
220     // when
221     $controller.loadWorkFlows()
222     .then(() => {
223       expect($controller.workflows).toEqual([]);
224     });
225   });
226
227   test('Verify get internal workflow parameters should return an empty list if not such workflow exist', () => {
228   // given
229     $featureFlags.isOn = jestMock.fn(() => false);
230     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
231     let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
232         "parameterDefinitions": [
233           {
234             "id": 1,
235             "name": "Configuration Parameters",
236             "required": true,
237             "type": "STRING",
238             "pattern": ".*",
239             "msgOnPatternError": null,
240             "msgOnContentError": null,
241             "acceptableFileType": null
242           }
243         ],
244       }});
245
246     $controller.changeManagement.vnfNames = [{name: 'test1'}];
247     $changeManagementService.getWorkflows = () => getWorkflowsStub;
248     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
249     // when
250     return $controller.loadWorkFlows()
251     .then(() => {
252       let internalWorkFlowParameters = $controller.getInternalWorkFlowParameters("NON-EXISTENT WF", "STRING");
253       expect(internalWorkFlowParameters).toEqual([]);
254     });
255   });
256
257   test('Verify get internal workflow parameters should return an empty list if not such type exist', () => {
258     // given
259     $featureFlags.isOn = jestMock.fn(() => false);
260     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
261     let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
262         "parameterDefinitions": [
263           {
264             "id": 1,
265             "name": "Configuration Parameters",
266             "required": true,
267             "type": "STRING",
268             "pattern": ".*",
269             "msgOnPatternError": null,
270             "msgOnContentError": null,
271             "acceptableFileType": null
272           }
273         ],
274       }});
275
276     $controller.changeManagement.vnfNames = [{name: 'test1'}];
277     $changeManagementService.getWorkflows = () => getWorkflowsStub;
278     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
279     // when
280     return $controller.loadWorkFlows()
281     .then(() => {
282       let internalWorkFlowParameters = $controller.getInternalWorkFlowParameters("VNF Scale Out", "FILE");
283       expect(internalWorkFlowParameters).toEqual([]);
284     });
285   });
286
287   test('Verify get internal workflow parameters should return a list if such workflow and type exist', () => {
288     // given
289     $featureFlags.isOn = jestMock.fn(() => false);
290     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["VNF Scale Out"]}});
291     let getLocalWorkflowsParametersStub = Promise.resolve({"data":{
292         "parameterDefinitions": [
293           {
294             "id": 1,
295             "name": "Configuration Parameters",
296             "required": true,
297             "type": "STRING",
298             "pattern": ".*",
299             "msgOnPatternError": null,
300             "msgOnContentError": null,
301             "acceptableFileType": null
302           }
303         ],
304       }});
305     $controller.changeManagement.vnfNames = [{name: 'test1'}];
306     $changeManagementService.getWorkflows = () => getWorkflowsStub;
307     $changeManagementService.getLocalWorkflowParameter = () => getLocalWorkflowsParametersStub;
308
309     let result = [{
310         "acceptableFileType": null,
311         "id": 1,
312         "msgOnContentError": null,
313         "msgOnPatternError": null,
314         "name": "Configuration Parameters",
315         "pattern": ".*",
316         "required": true,
317         "type": "STRING",
318         }];
319     // when
320     return $controller.loadWorkFlows()
321     .then(() => {
322       let internalWorkFlowParameters = $controller.getInternalWorkFlowParameters("VNF Scale Out", "STRING");
323       expect(internalWorkFlowParameters).toEqual(result);
324     });
325   });
326 });