Introduced dynamic workflow properties in VID FE
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / modals / new-change-management / new-change-management.controller.test.js
1 require('./new-change-management.controller');
2 const jestMock = require('jest-mock');
3
4 describe('Testing workFlows from SO', () => {
5   let $notNeeded;
6   let $controller;
7   let $changeManagementService;
8   beforeEach(
9       angular.mock.module('app')
10   );
11
12   beforeEach(inject(function (_$controller_) {
13     $notNeeded = jestMock.fn();
14     // mock ChangeManagementService
15     $changeManagementService = jestMock.fn();
16     $changeManagementService.getAllSDCServices = jestMock.fn(() => Promise.resolve([]));
17
18     // mock q
19     $q = jestMock.fn();
20     $defer = jestMock.fn();
21     $q.defer = jestMock.fn(() => $defer);
22     $defer.promise = Promise.resolve({});
23     // mock AaiService
24     $aaiService = jestMock.fn();
25     $aaiService.getLoggedInUserID = jestMock.fn();
26     $aaiService.getSubscribers = jestMock.fn();
27     $controller = _$controller_('newChangeManagementModalController', {
28       $uibModalInstance: $notNeeded,
29       $uibModal: $notNeeded,
30       $q: $q,
31       AaiService: $aaiService,
32       changeManagementService: $changeManagementService,
33       Upload: $notNeeded,
34       $log: $notNeeded,
35       _: $notNeeded,
36       COMPONENT: $notNeeded,
37       VIDCONFIGURATION: $notNeeded,
38       DataService: $notNeeded,
39       featureFlags: $notNeeded,
40       $scope: $notNeeded,
41     });
42   }));
43
44   test('Verify load workflows from SO will call getSOWorkflow and return only names of workflows', () => {
45     // given
46     $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
47     let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 1"}, {"id": "2", "name": "workflow 2"}]});
48     $changeManagementService.getSOWorkflows = () => getSOWorkflowsPromiseStub;
49     $controller.workflows = [];
50     // when
51     return $controller.loadRemoteWorkFlows()
52     .then(() => {
53            remoteWorkflows = $controller.remoteWorkflows.map(item => item.name);
54            expect(remoteWorkflows).toContain('workflow 1');
55            expect(remoteWorkflows).toContain('workflow 2');
56         }
57      );
58   });
59
60   test('Verify load workflows will call load from SO and join workflow lists', () => {
61     // given
62     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
63     let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 1"}, {"id": "2", "name": "workflow 2"}]});
64     let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{"parameterDefinitions": []}});
65
66     $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
67     $changeManagementService.getWorkflows = () => getWorkflowsStub;
68     $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
69     $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
70     // when
71     return $controller.loadWorkFlows().then(() => {
72       expect($controller.workflows).toContain('workflow 0');
73       expect($controller.workflows).toContain('workflow 1');
74       expect($controller.workflows).toContain('workflow 2');
75     });
76   });
77
78   test('Verify load workflows will call load workflows parameters from SO', () => {
79     // given
80     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
81     let getSOWorkflowsPromiseStub = Promise.resolve({"data": [{"id": "1", "name": "workflow 0"}]});
82     let getSOWorkflowsParametersPromiseStub = Promise.resolve({"data":{"parameterDefinitions": [
83           {"id": 1, "name": "parameter 1", "required": true, "type": "STRING", "pattern": "[0-9]*"},
84           {"id": 2, "name": "parameter 2", "required": true, "type": "STRING", "pattern": ".*"},
85           {"id": 3, "name": "parameter 3", "required": false, "type": "STRING", "pattern": "[0-9]*"}]}});
86
87     $controller.changeManagement.vnfNames = [{name: 'test1'}, {name: "test2"}];
88     $changeManagementService.getWorkflows = () => getWorkflowsStub;
89     $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
90     $changeManagementService.getSOWorkflowParameter = () =>  getSOWorkflowsParametersPromiseStub;
91     // when
92     return $controller.loadWorkFlows()
93     .then(() => {
94       expect($controller.remoteWorkflowsParameters).toEqual(new Map([["workflow 0",
95         [{"id": 1, "name": "parameter 1", "pattern": "[0-9]*", "required": true, "type": "STRING"},
96          {"id": 2, "name": "parameter 2", "pattern": ".*", "required": true, "type": "STRING"},
97          {"id": 3, "name": "parameter 3", "pattern": "[0-9]*", "required": false, "type": "STRING"}]]]));
98     });
99   });
100
101   test('Verify broken SO workflows wont change content of local workflows', () => {
102     // given
103     let getWorkflowsStub = Promise.resolve({"data": {"workflows": ["workflow 0"]}});
104     let getSOWorkflowsPromiseStub = Promise.reject(new Error("Broken SO workflows service."));
105
106     $controller.changeManagement.vnfNames = "any";
107     $changeManagementService.getWorkflows = () => getWorkflowsStub;
108     $changeManagementService.getSOWorkflows = () =>  getSOWorkflowsPromiseStub;
109     // when
110     $controller.loadWorkFlows()
111     .then(() => {
112       expect($controller.workflows).toEqual(['workflow 0']);
113     });
114   });
115 });
116