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