[PORTAL-7] Rebase
[portal.git] / ecomp-portal-FE-common / client / app / views / users / new-user-dialogs / new-user.controller.spec.js
1 /*-\r
2  * ================================================================================\r
3  * ECOMP Portal\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ================================================================================\r
19  */\r
20 /**\r
21  * Created by nnaffar on 12/20/15.\r
22  */\r
23 'use strict';\r
24 \r
25 describe('Controller: NewUserModalCtrl ', () => {\r
26     beforeEach(module('testUtils'));\r
27     beforeEach(module('ecompApp'));\r
28 \r
29         let promisesTestUtils;\r
30         //destroy $http default cache before starting to prevent the error 'default cache already exists'\r
31         //_promisesTestUtils_ comes from testUtils for promises resolve/reject\r
32         beforeEach(inject((_CacheFactory_, _promisesTestUtils_)=> {\r
33             _CacheFactory_.destroyAll();\r
34             promisesTestUtils = _promisesTestUtils_;\r
35         }));\r
36 \r
37         let newUser, $controller, $q, $rootScope, $log, $scope;\r
38 \r
39         let applicationsServiceMock, usersServiceMock, confirmBoxServiceMock;\r
40         let deferredAdminApps, deferredUsersAccounts, deferredUsersAppRoles, deferredUsersAppRoleUpdate;\r
41 \r
42         beforeEach(inject((_$controller_, _$q_, _$rootScope_, _$log_)=> {\r
43             $rootScope = _$rootScope_;\r
44             $q = _$q_;\r
45             $controller = _$controller_;\r
46             $log = _$log_;\r
47         }));\r
48 \r
49     beforeEach(()=> {\r
50             [deferredAdminApps, deferredUsersAccounts, deferredUsersAppRoles, deferredUsersAppRoleUpdate] = [$q.defer(),$q.defer(), $q.defer(), $q.defer()];\r
51 \r
52             /*applicationsServiceMock = {\r
53                 getAdminApps: () => {\r
54                     var promise = () => {return deferredAdminApps.promise};\r
55                     var cancel = jasmine.createSpy();\r
56                     return {\r
57                         promise: promise,\r
58                         cancel: cancel\r
59                     }\r
60                 }\r
61             };*/\r
62 \r
63             confirmBoxServiceMock = {\r
64                 deleteItem: () => {\r
65                     var promise = () => {return deferredAdminApps.promise};\r
66                     var cancel = jasmine.createSpy();\r
67                     return {\r
68                         promise: promise,\r
69                         cancel: cancel\r
70                     }\r
71                 }\r
72             };\r
73 \r
74             applicationsServiceMock = jasmine.createSpyObj('applicationsServiceMock', ['getAdminAppsSimpler']);\r
75             applicationsServiceMock.getAdminAppsSimpler.and.returnValue(deferredAdminApps.promise);\r
76 \r
77             usersServiceMock = jasmine.createSpyObj('usersServiceMock', ['getAccountUsers','getUserAppRoles','updateUserAppsRoles']);\r
78 \r
79             //applicationsServiceMock.getAdminApps().promise().and.returnValue(deferredAdminApps.promise);\r
80             usersServiceMock.getAccountUsers.and.returnValue(deferredUsersAccounts.promise);\r
81             usersServiceMock.getUserAppRoles.and.returnValue(deferredUsersAppRoles.promise);\r
82             usersServiceMock.updateUserAppsRoles.and.returnValue(deferredUsersAppRoleUpdate.promise);\r
83 \r
84             $scope = $rootScope.$new();\r
85             newUser = $controller('NewUserModalCtrl', {\r
86                 $scope: $scope,\r
87                 $log: $log,\r
88                 usersService: usersServiceMock,\r
89                 applicationsService: applicationsServiceMock,\r
90                 confirmBoxService: confirmBoxServiceMock\r
91             });\r
92             //$scope.users = users;\r
93         });\r
94 \r
95         /*beforeEach(()=> {\r
96             scope = $rootScope.$new();\r
97             newUser = $controller('NewUserModalCtrl', {\r
98                 $scope: scope,\r
99                 $log: $log,\r
100                 usersService: usersService,\r
101                 applicationsService: applicationsService,\r
102                 confirmBoxService: confirmBoxService\r
103             });\r
104         });*/\r
105 \r
106 \r
107         it('should open modal window without user when no user is selected', ()=> {\r
108             expect(newUser.selectedUser).toBe(null);\r
109         });\r
110 \r
111         it('should open modal window with selectedUser apps roles when user is selected', ()=> {\r
112             let roles = {apps: [{id: 1, appRoles: [{id: 3, isApplied: true}]}]};\r
113             let someUser = {orgUserId: 'asdfjl'};\r
114 \r
115            deferredUsersAppRoles.resolve(roles);\r
116            deferredAdminApps.resolve(roles.apps);\r
117 \r
118             $scope.ngDialogData = {\r
119                 selectedUser: someUser,\r
120                 dialogState: 2\r
121             };\r
122 \r
123             //inject ngDialogData to the scope controller\r
124             newUser = $controller('NewUserModalCtrl', {\r
125                 $scope: $scope,\r
126                 $log: $log,\r
127                 usersService: usersServiceMock,\r
128                 applicationsService: applicationsServiceMock,\r
129                 confirmBoxService: confirmBoxServiceMock\r
130             });\r
131 \r
132             newUser.getUserAppsRoles();\r
133             $scope.$apply();\r
134 \r
135             expect(newUser.selectedUser).toBe(someUser);\r
136             expect(newUser.adminApps).toEqual(roles.apps);\r
137         });\r
138 \r
139         it('should push to apps order list only apps that has applied roles when initializing', () => {\r
140             let roles = {apps: [{appId: 13, appRoles: [{id: 3, isApplied: true}]},{appId: 20, appRoles: [{id: 3, isApplied: false}]}]};\r
141             let someUser = {orgUserId: 'asdfjl'};\r
142 \r
143             deferredUsersAppRoles.resolve(roles);\r
144             //deferredAdminApps.resolve(roles.apps);\r
145 \r
146             $scope.ngDialogData = {\r
147                 selectedUser: someUser,\r
148                 dialogState: 2\r
149             };\r
150 \r
151             //inject ngDialogData to the scope controller\r
152             newUser = $controller('NewUserModalCtrl', {\r
153                 $scope: $scope,\r
154                 $log: $log,\r
155                 usersService: usersServiceMock,\r
156                 applicationsService: applicationsServiceMock,\r
157                 confirmBoxService: confirmBoxServiceMock\r
158             });\r
159 \r
160             $scope.$apply();\r
161 \r
162            // expect(newUser.appsOrder).toEqual([13]);\r
163         });\r
164 \r
165         it('should push app to apps order list when applying at least one role to user from app', () => {\r
166             let roles = {apps: [{appId: 13, appRoles: [{id: 3, isApplied: true}]},{appId: 20, appRoles: [{id: 3, isApplied: false}]}]};\r
167             let someUser = {orgUserId: 'asdfjl'};\r
168 \r
169             // promisesTestUtils.resolvePromise(usersService, 'getUserAppsRoles', roles);\r
170             deferredUsersAppRoles.resolve(roles);\r
171 \r
172             $scope.ngDialogData = {\r
173                 selectedUser: someUser,\r
174                 dialogState: 2\r
175             };\r
176 \r
177             //inject ngDialogData to the scope controller\r
178             newUser = $controller('NewUserModalCtrl', {\r
179                 $scope: $scope,\r
180                 $log: $log,\r
181                 usersService: usersServiceMock,\r
182                 applicationsService: applicationsServiceMock,\r
183                 confirmBoxService: confirmBoxServiceMock\r
184             });\r
185 \r
186             //$scope.$apply();\r
187             //newUser.updateAppsOrder({appId: 39, appRoles: [{id: 13, isApplied: true}]});\r
188             $scope.$apply();\r
189 \r
190           //  expect(newUser.appsOrder).toEqual([13, 39]);\r
191         });\r
192 \r
193 \r
194         it('should remove app from list when removing all user roles in it', () => {\r
195             let roles = {apps: [{appName: 'aaa', appId: 13, appRoles: [{id: 3, isApplied: true}]},{appName: 'vvv', appId: 20, appRoles: [{id: 3, isApplied: true}]}]};\r
196             let someUser = {orgUserId: 'asdfjl'};\r
197 \r
198            // promisesTestUtils.resolvePromise(usersService, 'getUserAppsRoles', roles);\r
199             promisesTestUtils.resolvePromise(confirmBoxServiceMock, 'deleteItem', true);\r
200 \r
201             deferredUsersAppRoles.resolve(roles);\r
202 \r
203             $scope.ngDialogData = {\r
204                 selectedUser: someUser,\r
205                 dialogState: 2\r
206             };\r
207 \r
208             //inject ngDialogData to the scope controller\r
209             newUser = $controller('NewUserModalCtrl', {\r
210                 $scope: $scope,\r
211                 $log: $log,\r
212                 usersService: usersServiceMock,\r
213                 applicationsService: applicationsServiceMock,\r
214                 confirmBoxService: confirmBoxServiceMock\r
215             });\r
216 \r
217             $scope.$apply();\r
218             newUser.deleteApp(roles.apps[0]);\r
219             $scope.$apply();\r
220 \r
221            // expect(newUser.appsOrder).toEqual([20]);\r
222         });\r
223 \r
224         it('should close the modal when update changes succeeded', () => {\r
225             let roles = {apps: [{appName: 'aaa', appId: 13, appRoles: [{id: 3, isApplied: true}]},{appName: 'vvv', appId: 20, appRoles: [{id: 3, isApplied: true}]}]};\r
226             let someUser = {orgUserId: 'asdfjl'};\r
227             //promisesTestUtils.resolvePromise(usersServiceMock, 'getUserAppsRoles', roles);\r
228             //promisesTestUtils.resolvePromise(usersServiceMock, 'updateUserAppsRoles');\r
229             deferredUsersAppRoles.resolve(roles);\r
230             deferredUsersAppRoleUpdate.resolve();\r
231             deferredAdminApps.resolve(roles.apps);\r
232 \r
233             $scope.ngDialogData = {\r
234                 selectedUser: someUser,\r
235                 dialogState: 2\r
236             };\r
237 \r
238             //inject ngDialogData to the scope controller\r
239             newUser = $controller('NewUserModalCtrl', {\r
240                 $scope: $scope,\r
241                 $log: $log,\r
242                 usersService: usersServiceMock,\r
243                 applicationsService: applicationsServiceMock,\r
244                 confirmBoxService: confirmBoxServiceMock\r
245             });\r
246             $scope.closeThisDialog = function(){};\r
247             spyOn($scope, 'closeThisDialog');\r
248 \r
249             newUser.getUserAppsRoles();\r
250             $scope.$apply();\r
251             newUser.updateUserAppsRoles();\r
252             $scope.$apply();\r
253             expect($scope.closeThisDialog).toHaveBeenCalledWith(true);\r
254         });\r
255     });\r