summaryrefslogtreecommitdiffstats
path: root/ecomp-portal-FE-common/client/app/directives/search-users
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-portal-FE-common/client/app/directives/search-users')
-rw-r--r--ecomp-portal-FE-common/client/app/directives/search-users/search-users.controller.js92
-rw-r--r--ecomp-portal-FE-common/client/app/directives/search-users/search-users.controller.spec.js176
-rw-r--r--ecomp-portal-FE-common/client/app/directives/search-users/search-users.directive.js34
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