[PORTAL-16 PORTAL-18] Widget ms; staging
[portal.git] / ecomp-portal-FE-common / client / app / views / admins / add-admin-dialogs / new-admin.controller.spec.js
1 /*-
2  * ================================================================================
3  * ECOMP Portal
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property
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  * ================================================================================
19  */
20 /**
21  * Created by nnaffar on 12/8/15.
22  */
23 'use strict';
24
25 describe('Controller: NewAdminCtrl ', () => {
26     beforeEach(module('ecompApp'));
27
28     //destroy $http default cache before starting to prevent the error 'default cache already exists'
29     beforeEach(inject((_CacheFactory_)=> {
30         _CacheFactory_.destroyAll();
31     }));
32
33
34     let newCtrl, $controller, $q, $rootScope, $log;
35
36     beforeEach(inject((_$controller_, _$q_, _$rootScope_, _$log_)=> {
37         [$controller, $q, $rootScope, $log] = [_$controller_, _$q_, _$rootScope_, _$log_];
38     }));
39
40     let deferredAdminAppsRoles, deferredUpdateRolesRes;
41     let adminsServiceMock;
42     beforeEach(()=> {
43         [deferredAdminAppsRoles, deferredUpdateRolesRes] = [$q.defer(), $q.defer()];
44
45         adminsServiceMock = jasmine.createSpyObj('adminsServiceMock', ['getAdminAppsRoles', 'updateAdminAppsRoles']);
46
47         adminsServiceMock.getAdminAppsRoles.and.returnValue(deferredAdminAppsRoles.promise);
48         adminsServiceMock.updateAdminAppsRoles.and.returnValue(deferredUpdateRolesRes.promise);
49
50         newCtrl = $controller('NewAdminModalCtrl', {
51             $log: $log,
52             adminsService: adminsServiceMock,
53             $scope: $rootScope
54         });
55     });
56
57     it('should init default values when loading the controller', ()=> {
58         expect(newCtrl.dialogState).toBe(1);
59         expect(newCtrl.selectedUser).toBe(null);
60     });
61
62     it('should populate admin apps roles and move to the next screen when adminsService.getAdminAppsRoles succeeded', ()=> {
63         let userApps = {appsRoles: [{id: 1, isAdmin: false}, {id: 2, isAdmin: true}]};
64         deferredAdminAppsRoles.resolve(userApps);
65
66         newCtrl.selectedUser = {orgUserId: 'orgUserId'};
67
68         newCtrl.getAdminAppsRoles();
69         $rootScope.$apply();
70
71         expect(adminsServiceMock.getAdminAppsRoles).toHaveBeenCalledWith(newCtrl.selectedUser.orgUserId);
72         expect(newCtrl.adminAppsRoles).toEqual(userApps.appsRoles);
73         expect(newCtrl.dialogState).toBe(2);
74     });
75
76     it('should  log the error when adminsService.getAdminAppsRoles fails', ()=> {
77         spyOn($log, 'error');
78         deferredAdminAppsRoles.reject('some error');
79
80         newCtrl.searchUsersInProgress = false;
81         newCtrl.selectedUser = {orgUserId: 'orgUserId'};
82
83         newCtrl.getAdminAppsRoles();
84         $rootScope.$apply();
85
86         expect($log.error).toHaveBeenCalled();
87     });
88     it('should  log the error when trying to getAdminAppsRoles without selecting user ', ()=> {
89         spyOn($log, 'error');
90
91         newCtrl.searchUsersInProgress = false;
92         newCtrl.selectedUser = null;
93
94         newCtrl.getAdminAppsRoles();
95         $rootScope.$apply();
96
97         expect($log.error).toHaveBeenCalled();
98     });
99
100     it('should set isAdmin as true when adding app via the dropdown menu', ()=> {
101         newCtrl.adminAppsRoles = [{id: 1, isAdmin: false},{id: 2, isAdmin: true}];
102         //simulate UI change
103         $rootScope.$apply('newAdmin.selectedNewApp = null');
104         $rootScope.$apply('newAdmin.selectedNewApp = {id: 1, isAdmin: true}');
105
106         expect(newCtrl.adminAppsRoles[0].isAdmin).toBe(true);
107         expect(newCtrl.selectedNewApp).toBe(null);
108     });
109
110     it('should close the modal when updating apps roles succeeded', ()=> {
111         $rootScope.closeThisDialog = () => {};
112         spyOn($rootScope,'closeThisDialog');
113
114         newCtrl.selectedUser = {orgUserId: 'orgUserId'};
115         newCtrl.adminAppsRoles = [{id: 1}];
116
117         deferredUpdateRolesRes.resolve();
118         newCtrl.updateAdminAppsRoles();
119         $rootScope.$apply();
120
121         expect(adminsServiceMock.updateAdminAppsRoles).toHaveBeenCalledWith({orgUserId: newCtrl.selectedUser.orgUserId, appsRoles: newCtrl.adminAppsRoles});
122         expect($rootScope.closeThisDialog).toHaveBeenCalled();
123     });
124     it('should log the error when updating apps roles fails', ()=> {
125         newCtrl.selectedUser = {orgUserId: 'orgUserId'};
126         newCtrl.adminAppsRoles = [{id: 1}];
127
128         spyOn($log,'error');
129         deferredUpdateRolesRes.reject();
130         newCtrl.updateAdminAppsRoles();
131         $rootScope.$apply();
132         expect($log.error).toHaveBeenCalled();
133     });
134 });