diff options
author | st782s <statta@research.att.com> | 2017-05-04 07:48:42 -0400 |
---|---|---|
committer | st782s <statta@research.att.com> | 2017-05-04 12:28:17 -0400 |
commit | b54df0ddd0c6a0372327c5aa3668e5a6458fcd64 (patch) | |
tree | e69cfa9b314a801bd187cf0145d1d4306436229c /ecomp-portal-FE-common/client/app/directives/search-users | |
parent | 39d1e62c84041831bfc52cca73b5ed5efaf57d27 (diff) |
[PORTAL-7] Rebase
This rebasing includes common libraries and common overlays projects
abstraction of components
Change-Id: I9a24a338665c7cd058978e8636bc412d9e2fdce8
Signed-off-by: st782s <statta@research.att.com>
Diffstat (limited to 'ecomp-portal-FE-common/client/app/directives/search-users')
3 files changed, 302 insertions, 0 deletions
diff --git a/ecomp-portal-FE-common/client/app/directives/search-users/search-users.controller.js b/ecomp-portal-FE-common/client/app/directives/search-users/search-users.controller.js new file mode 100644 index 00000000..6fd402c6 --- /dev/null +++ b/ecomp-portal-FE-common/client/app/directives/search-users/search-users.controller.js @@ -0,0 +1,92 @@ +/*- + * ================================================================================ + * eCOMP Portal + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ================================================================================ + */ +'use strict'; +(function () { + class SearchUsersCtrl { + constructor($log, usersService, $scope) { + $scope.UserSearchsIsNull=false; + this.scrollApi = {};//scrollTop directive + $scope.txtResults = 'result'; + /** + * Handle all active HTTP requests + * activeRequests @type {Array[requests with cancel option]} + */ + let activeRequests = []; + let clearReq = (req) => { + activeRequests.splice(activeRequests.indexOf(req), 1); + }; + + /** + * this function retrieves users info + */ + this.searchUsers = () => { + this.isLoading = true; + if(this.searchUsersInProgress){ + return; + } + this.selectedUser = null; + this.searchUsersInProgress = true; + this.searchUsersResults = null; + + let searchUsersReq = usersService.searchUsers(this.searchUserString); + activeRequests.push(searchUsersReq); + searchUsersReq.promise().then(usersList => { + $log.debug('searchUsers found the following users: ', JSON.stringify(usersList)); + this.searchUsersResults = usersList; + $log.debug('searchUsersResults length: ', usersList.length); + if (usersList.length != 1) { + $scope.txtResults = 'results' + } else { + $scope.txtResults = 'result' + } + $scope.UserSearchsIsNull=false; + }).catch(err => { + $log.error('SearchUsersCtrl.searchUsers: ' + err); + $scope.UserSearchsIsNull=true; + }).finally(() => { + this.scrollApi.scrollTop(); + this.searchUsersInProgress = false; + clearReq(searchUsersReq); + this.isLoading = false; + }); + }; + + let init = () => { + this.isLoading = false; + this.searchUsersInProgress = false; + }; + + this.setSelectedUser = user => { + this.selectedUser = user; + }; + + init(); + + $scope.$on('$destroy', () => { + //cancel all active requests when closing the modal + activeRequests.forEach(req => { + req.cancel(); + }); + }); + } + } + SearchUsersCtrl.$inject = ['$log', 'usersService', '$scope']; + angular.module('ecompApp').controller('SearchUsersCtrl', SearchUsersCtrl); +})(); diff --git a/ecomp-portal-FE-common/client/app/directives/search-users/search-users.controller.spec.js b/ecomp-portal-FE-common/client/app/directives/search-users/search-users.controller.spec.js new file mode 100644 index 00000000..e3c9711c --- /dev/null +++ b/ecomp-portal-FE-common/client/app/directives/search-users/search-users.controller.spec.js @@ -0,0 +1,176 @@ +/*- + * ================================================================================ + * eCOMP Portal + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ================================================================================ + */ + +//'use strict'; +// +//describe('Controller: NewAdminCtrl ', () => { +// beforeEach(module('ecompApp')); +// +// //destroy $http default cache before starting to prevent the error 'default cache already exists' +// beforeEach(inject((_CacheFactory_)=> { +// _CacheFactory_.destroyAll(); +// })); +// +// +// let newCtrl, $controller, $q, $rootScope, $log; +// +// beforeEach(inject((_$controller_, _$q_, _$rootScope_, _$log_)=> { +// [$controller, $q, $rootScope, $log] = [_$controller_, _$q_, _$rootScope_, _$log_]; +// })); +// +// let deferredUsersList, deferredAdminAppsRoles, deferredUpdateRolesRes; +// let usersServiceMock, adminsServiceMock; +// beforeEach(()=> { +// [deferredUsersList, deferredAdminAppsRoles, deferredUpdateRolesRes] = [$q.defer(), $q.defer(), $q.defer()]; +// +// //usersServiceMock = jasmine.createSpyObj('usersServiceMock', ['searchUsers']); +// usersServiceMock = { +// searchUsers: () => { +// var promise = () => {return deferredUsersList.promise}; +// var cancel = jasmine.createSpy(); +// return { +// promise: promise, +// cancel: cancel +// } +// } +// }; +// +// adminsServiceMock = jasmine.createSpyObj('adminsServiceMock', ['getAdminAppsRoles', 'updateAdminAppsRoles']); +// +// //usersServiceMock.searchUsers.and.returnValue(deferredUsersList.promise); +// adminsServiceMock.getAdminAppsRoles.and.returnValue(deferredAdminAppsRoles.promise); +// adminsServiceMock.updateAdminAppsRoles.and.returnValue(deferredUpdateRolesRes.promise); +// +// newCtrl = $controller('NewAdminModalCtrl', { +// $log: $log, +// usersService: usersServiceMock, +// adminsService: adminsServiceMock, +// $scope: $rootScope +// }); +// }); +// +// it('should init default values when loading the controller', ()=> { +// //expect(newCtrl.searchUsersInProgress).toBe(false); +// expect(newCtrl.dialogState).toBe(1); +// expect(newCtrl.selectedUser).toBe(null); +// }); +// +// it('should populate retrieved users when search users service returns a list ', ()=> { +// //spyOn(usersServiceMock, 'searchUsers'); +// let usersListRes = [{user: 1}, {user: 2}]; +// newCtrl.searchUserString = 'some att user name'; +// deferredUsersList.resolve(usersListRes); +// newCtrl.searchUsers(); +// $rootScope.$apply(); +// +// //expect(usersServiceMock.searchUsers).toHaveBeenCalledWith(newCtrl.searchUserString); +// expect(newCtrl.searchUsersResults).toEqual(usersListRes); +// expect(newCtrl.searchUsersInProgress).toBe(false); +// }); +// +// it('should log the error when search users fails', ()=> { +// spyOn($log, 'error'); +// deferredUsersList.reject('oh snap!'); +// newCtrl.searchUsers(); +// $rootScope.$apply(); +// expect($log.error).toHaveBeenCalled(); +// }); +// +// it('should populate admin apps roles and move to the next screen when adminsService.getAdminAppsRoles succeeded', ()=> { +// let userApps = {appsRoles: [{id: 1, isAdmin: false}, {id: 2, isAdmin: true}]}; +// deferredAdminAppsRoles.resolve(userApps); +// +// newCtrl.searchUsersInProgress = false; +// newCtrl.selectedUser = {orgUserId: 'orgUserId'}; +// +// newCtrl.getAdminAppsRoles(); +// $rootScope.$apply(); +// +// expect(adminsServiceMock.getAdminAppsRoles).toHaveBeenCalledWith(newCtrl.selectedUser.orgUserId); +// expect(newCtrl.adminAppsRoles).toEqual(userApps.appsRoles); +// expect(newCtrl.dialogState).toBe(2); +// }); +// +// it('should log the error when adminsService.getAdminAppsRoles fails', ()=> { +// spyOn($log, 'error'); +// deferredAdminAppsRoles.reject('some error'); +// +// newCtrl.searchUsersInProgress = false; +// newCtrl.selectedUser = {orgUserId: 'orgUserId'}; +// +// newCtrl.getAdminAppsRoles(); +// $rootScope.$apply(); +// +// expect($log.error).toHaveBeenCalled(); +// }); +// it('should log the error when trying to getAdminAppsRoles without selecting user ', ()=> { +// spyOn($log, 'error'); +// +// newCtrl.searchUsersInProgress = false; +// newCtrl.selectedUser = null; +// +// newCtrl.getAdminAppsRoles(); +// $rootScope.$apply(); +// +// expect($log.error).toHaveBeenCalled(); +// }); +// //it('should setSelectedUser when choosing user', ()=> { +// // +// //}); +// //it('should set isAdmin as false when removing app from the administrated apps list', ()=> { +// //}); +// it('should set isAdmin as true when adding app via the dropdown menu', ()=> { +// newCtrl.adminAppsRoles = [{id: 1, isAdmin: false},{id: 2, isAdmin: true}]; +// //simulate UI change +// $rootScope.$apply('newAdmin.selectedNewApp = null'); +// $rootScope.$apply('newAdmin.selectedNewApp = {id: 1, isAdmin: true}'); +// +// expect(newCtrl.adminAppsRoles[0].isAdmin).toBe(true); +// expect(newCtrl.selectedNewApp).toBe(null); +// }); +// +// it('should close the modal when updating apps roles succeeded', ()=> { +// $rootScope.closeThisDialog = () => {}; +// spyOn($rootScope,'closeThisDialog'); +// +// newCtrl.selectedUser = {orgUserId: 'orgUserId'}; +// newCtrl.adminAppsRoles = [{id: 1}]; +// +// deferredUpdateRolesRes.resolve(); +// newCtrl.updateAdminAppsRoles(); +// $rootScope.$apply(); +// +// expect(adminsServiceMock.updateAdminAppsRoles).toHaveBeenCalledWith({orgUserId: newCtrl.selectedUser.orgUserId, appsRoles: newCtrl.adminAppsRoles}); +// expect($rootScope.closeThisDialog).toHaveBeenCalled(); +// }); +// it('should log the error when updating apps roles fails', ()=> { +// newCtrl.selectedUser = {orgUserId: 'orgUserId'}; +// newCtrl.adminAppsRoles = [{id: 1}]; +// +// spyOn($log,'error'); +// deferredUpdateRolesRes.reject(); +// newCtrl.updateAdminAppsRoles(); +// $rootScope.$apply(); +// expect($log.error).toHaveBeenCalled(); +// }); +// //it('should display the add admin dropdown when clicking the add button', ()=> { +// //}); +// +//}); diff --git a/ecomp-portal-FE-common/client/app/directives/search-users/search-users.directive.js b/ecomp-portal-FE-common/client/app/directives/search-users/search-users.directive.js new file mode 100644 index 00000000..e297c7f6 --- /dev/null +++ b/ecomp-portal-FE-common/client/app/directives/search-users/search-users.directive.js @@ -0,0 +1,34 @@ +/*- + * ================================================================================ + * eCOMP Portal + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ================================================================================ + */ + +angular.module('ecompApp') + .directive('searchUsers', function () { + return { + restrict: 'E', + templateUrl: 'app/directives/search-users/search-users.tpl.html', + controller: 'SearchUsersCtrl', + controllerAs: 'searchUsers', + bindToController: true, + scope: { + selectedUser: '=', + searchTitle: '@' + } + }; + });
\ No newline at end of file |