UNPKG

gaf-mobile

Version:

GAF mobile Web site

194 lines (153 loc) 5.28 kB
'use strict'; /* global UserMock */ describe('Controller: skillSelect', function() { var $location, $q, $rootScope, $scope; var JobsMock, UsersMock; var createCtrl, user; beforeEach(module('gafMobileApp')); beforeEach(inject(function($controller, _$rootScope_, _$location_, _$q_) { $controller = $controller; $rootScope = _$rootScope_; $scope = $rootScope.$new(); $location = _$location_; $q = _$q_; createCtrl = function() { return $controller('SkillSelectCtrl', { $scope: $scope, $rootScope: $rootScope, $location: $location, Jobs: JobsMock, Users: UsersMock, }); }; })); beforeEach(function() { user = UserMock(); JobsMock = jasmine.createSpyObj('Jobs', ['getList']); UsersMock = jasmine.createSpyObj('Users', ['getLoggedInUser', 'setJobs', 'removeJobs']); JobsMock.getList.and.returnValue($q.when({ getList: function() { return [{ id: 1, name: 'PHP' }, { id: 3, name: 'Nodejs' }]; } })); UsersMock.getLoggedInUser.and.returnValue($q.when({ get: function() { return user; } })); }); describe('upon init', function() { it('should set loading to true if initial queues are not resolved yet', function() { var ctrl = createCtrl(); expect(ctrl.loading).toBeTruthy(); }); it('should load user jobs and all available jobs', function() { var ctrl = createCtrl(); $scope.$digest(); expect(ctrl.jobs.length).toBe(2); expect(ctrl.user).toBe(user); expect(ctrl.loading).toBeFalsy(); expect(ctrl.jobLimit).toBe(user.membership_package.job_limit); expect(ctrl.selectedCount).toBe(user.jobs.length); }); it('should set job attr to selected if existing as user job', function() { var ctrl = createCtrl(); $scope.$digest(); expect(ctrl.jobs[0].selected).toBeTruthy(); }); }); describe('job params is provided', function() { it('should select the job when user does not have it yet', function() { $location.search('jobs', '3,4'); var ctrl = createCtrl(); $scope.$digest(); expect(ctrl.jobs[1].selected).toBeTruthy(); }); }); describe('method: addJob()', function() { it('should set job new and selected parameters and inc selectedCount', function() { var ctrl = createCtrl(); $scope.$digest(); ctrl.jobLimit = 2; ctrl.selectedCount = 1; ctrl.jobs.push({id: 2, name: 'Java'}); ctrl.addJob(ctrl.jobs[1]); expect(ctrl.jobs[1].selected).toBeTruthy(); expect(ctrl.jobs[1].new).toBeTruthy(); expect(ctrl.jobs[1].delete).toBeFalsy(); expect(ctrl.selectedCount).toBe(2); }); }); describe('method: removeJob()', function() { it('should set job new and selected params to false and dec selectedCount', function() { var ctrl = createCtrl(); $scope.$digest(); ctrl.removeJob(ctrl.jobs[0]); expect(ctrl.jobs[0].selected).toBeFalsy(); expect(ctrl.jobs[0].new).toBeFalsy(); expect(ctrl.jobs[0].delete).toBeTruthy(); expect(ctrl.selectedCount).toBe(0); }); }); describe('method: clearSearchField()', function() { it('should clear search query', function() { var ctrl = createCtrl(); ctrl.searchQuery = 'searchquery'; ctrl.clearSearchField(); expect(ctrl.searchQuery).toBe(''); }); }); describe('method: saveSkills()', function() { it('should call Users.setJobs API if there are jobs to save', function() { UsersMock.setJobs.and.returnValue($q.when({})); var ctrl = createCtrl(); $scope.$digest(); ctrl.jobs.push({id: 2, name: 'Java'}); ctrl.addJob(ctrl.jobs[1]); ctrl.saveSkills(); expect(UsersMock.setJobs).toHaveBeenCalledWith([3]); }); it('should call Users.removeJobs API if there are jobs to remove', function() { UsersMock.removeJobs.and.returnValue($q.when({})); var ctrl = createCtrl(); $scope.$digest(); ctrl.removeJob(ctrl.jobs[0]); ctrl.saveSkills(); $scope.$digest(); expect(UsersMock.removeJobs).toHaveBeenCalledWith([1]); }); it('should direct to dashboard when successful', function() { UsersMock.setJobs.and.returnValue($q.when({})); var ctrl = createCtrl(); ctrl.saveSkills(); $scope.$digest(); expect($location.url()).toBe('/dashboard'); }); it('should direct to return url (if existing) when successful', function() { $location.search({return: '/projects/123'}); UsersMock.setJobs.and.returnValue($q.when({})); var ctrl = createCtrl(); ctrl.saveSkills(); $scope.$digest(); expect($location.url()).toBe('/projects/123#placebid'); }); it('should return error code when call failed', function() { UsersMock.setJobs.and.returnValue($q.reject({ code: 'MOCK_ERROR' })); var ctrl = createCtrl(); $scope.$digest(); ctrl.addJob(ctrl.jobs[1]); ctrl.saveSkills(); $scope.$digest(); expect(ctrl.error.internalError).toBe('MOCK_ERROR'); }); }); });