gaf-mobile
Version:
GAF mobile Web site
194 lines (153 loc) • 5.28 kB
JavaScript
'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');
});
});
});