UNPKG

gaf-mobile

Version:

GAF mobile Web site

342 lines (274 loc) 10.1 kB
'use strict'; /* global ProjectMock */ /* global UserMock */ describe('JobsDirectoryManager', function() { var $q; var JobsDirectoryManager; beforeEach(module('gafMobileApp')); beforeEach(inject(function(_$q_, _JobsDirectoryManager_) { $q = _$q_; JobsDirectoryManager = _JobsDirectoryManager_; })); describe('Method: getPosition', function() { it('should get the position', function() { expect(JobsDirectoryManager.getPosition().page).toBe(1); expect(JobsDirectoryManager.getPosition().scroll).toBe(0); }); }); describe('Method: setPosition', function() { it('should set the position', function() { JobsDirectoryManager.setPosition({ page: 2, scroll: 1 }); expect(JobsDirectoryManager.getPosition().page).toBe(2); expect(JobsDirectoryManager.getPosition().scroll).toBe(1); }); }); describe('Method: getFilters', function() { it('should get the filters', function() { expect(JobsDirectoryManager.getFilters()).toBeUndefined(); }); }); describe('Method: getQuery', function() { it('should get the query', function() { expect(JobsDirectoryManager.getQuery()).toBeUndefined(); }); }); describe('Method: getUserList', function() { it('should get the user list', function() { expect(JobsDirectoryManager.getUserList()).toEqual({}); }); }); describe('Method: hasMoreProjects', function() { it('should check whether there are more projects', function() { expect(JobsDirectoryManager.hasMoreProjects()).toBeTruthy(); }); }); describe('Method: loadPage', function() { it('should reset the projects if there is an offset', function() { JobsDirectoryManager.loadPage(1, 'theQuery', ['filter1'], true); expect(JobsDirectoryManager.getQuery()).toBe('theQuery'); expect(JobsDirectoryManager.getFilters()).toEqual(['filter1']); }); it('should load the first page if no page is given', function() { JobsDirectoryManager.loadPage(); expect(JobsDirectoryManager.getPosition().page).toBe(1); }); }); }); describe('JobsDirectoryCtrl', function() { var $q, $rootScope, $scope, $location; var JobsDirectoryManagerMock, RouteMock, CategoriesMock, AnchorScrollMock; var JobsMock; var project, user, position, categories; var createCtrl; beforeEach(module('gafMobileApp')); beforeEach(inject(function($controller, _$q_, _$rootScope_, _$location_) { $controller = $controller; $q = _$q_; $location = _$location_; $rootScope = _$rootScope_; $scope = $rootScope.$new(); position = { page: 1, scroll: 0 }; project = ProjectMock(); user = UserMock(); categories = { getList: function() { return [{ name: 'website', id: 1 }]; }, getJobsByCategoryId: function() { return { getList: function() { return [{ active_project_count: 1, id: 1 }]; } }; } }; createCtrl = function() { return $controller('JobsDirectoryCtrl', { $controller: $controller, $route: RouteMock, $scope: $scope, $anchorScroll: AnchorScrollMock, JobsDirectoryManager: JobsDirectoryManagerMock, Jobs: JobsMock, Categories: CategoriesMock, isInVariation: false }); }; })); beforeEach(function() { CategoriesMock = jasmine.createSpyObj('Categories', ['getListWithJobs']); JobsDirectoryManagerMock = jasmine.createSpyObj('JobsDirectoryManager', [ 'getFilters', 'getQuery', 'getUserList', 'getPosition', 'loadPage', 'hasMoreProjects']); JobsMock = jasmine.createSpyObj('JobsMock', ['getList']); JobsDirectoryManagerMock.getFilters.and.returnValue('theFilters'); JobsDirectoryManagerMock.getQuery.and.returnValue('theQuery'); JobsDirectoryManagerMock.getUserList.and.returnValue([user]); JobsDirectoryManagerMock.getPosition.and.returnValue(position); JobsDirectoryManagerMock.hasMoreProjects.and.returnValue(false); JobsDirectoryManagerMock.loadPage.and.returnValue($q.when([])); CategoriesMock.getListWithJobs.and.returnValue($q.when(categories)); JobsMock.getList.and.returnValue($q.when({ getList: function() { return []; } })); AnchorScrollMock = jasmine.createSpy('$anchorScroll'); RouteMock = { current: { locals: { projects: [project], job: { get: function() { return { name: 'theJob' }; } } } } }; }); it('should load categories', function() { var ctrl = createCtrl(); $scope.$digest(); expect(ctrl.loading).toBeFalsy(); expect(ctrl.categories[1].name).toBe('website'); }); it('should store active project counts as 0 by default', function() { categories.getJobsByCategoryId = function() { return { getList: function() { return [{ id: 1 }]; } }; }; var ctrl = createCtrl(); $scope.$digest(); expect(ctrl.categories[1].active_project_count).toBe(0); }); it('should load the initial parameters, projects and job names', function() { var ctrl = createCtrl(); expect(ctrl.filters).toBe('theFilters'); expect(ctrl.jobName).toBe('theJob'); expect(ctrl.projects.length).toBe(1); expect(ctrl.projects[0].id).toBe(project.id); expect(ctrl.query).toBe('theQuery'); }); it('should create job name if query is available', function() { RouteMock.current.locals.job = undefined; var ctrl = createCtrl(); expect(ctrl.jobName).toBe('theQuery'); }); it('should not create a job name if no job or query', function() { JobsDirectoryManagerMock.getQuery.and.returnValue(undefined); RouteMock.current.locals.job = undefined; var ctrl = createCtrl(); expect(ctrl.jobName).toBe(undefined); }); it('should set the first page next url to the second page', function() { var path = $location.path(); var ctrl = createCtrl(); expect(JobsDirectoryManagerMock.getPosition).toHaveBeenCalled(); expect(ctrl.position.page).toBe(1); expect(ctrl.nextPageUrl).toBe(path + '/2'); }); it('should set the next page url', function() { JobsDirectoryManagerMock.getPosition.and.returnValue(position); position.page = 2; var path = $location.path(); var ctrl = createCtrl(); expect(JobsDirectoryManagerMock.getPosition).toHaveBeenCalled(); expect(ctrl.position.page).not.toBe(1); expect(ctrl.nextPageUrl).toBe(path + position.page); }); describe('Method: changeTab', function() { it('should change the tab', function() { var ctrl = createCtrl(); $scope.$digest(); ctrl.changeTab('sometab'); expect($scope.tab.name).toBe('sometab'); }); it('should reload jobs page if recommended tab', function() { $location.hash('somehash'); var ctrl = createCtrl(); $scope.$digest(); ctrl.changeTab('recommended'); expect($location.path()).toBe('/jobs'); }); it('should scroll if the same tab', function() { var ctrl = createCtrl(); $scope.$digest(); ctrl.changeTab('recommended'); ctrl.changeTab('recommended'); expect(AnchorScrollMock).toHaveBeenCalled(); }); }); describe('Method: showCategory', function() { it('should set the category', function() { var ctrl = createCtrl(); $scope.$digest(); ctrl.showCategory(1); expect(ctrl.category.name).toBe('website'); }); it('should redirect to /jobs/localjobs when local is chosen', function() { var ctrl = createCtrl(); $scope.$digest(); ctrl.showCategory(12); expect($location.path()).toBe('/jobs/localjobs'); }); }); describe('Method: changeFilters', function() { it('should reload the filters', function() { var newFilter = 'theNewFilters'; var newQuery = 'theNewQuery'; var ctrl = createCtrl(); ctrl.changeFilters(newFilter, newQuery); expect(ctrl.filters = 'theNewFilters'); expect(JobsDirectoryManagerMock.loadPage).toHaveBeenCalled(); }); it('should reload the projects', function() { var ctrl = createCtrl(); ctrl.changeFilters(); $scope.$digest(); expect(JobsDirectoryManagerMock.loadPage).toHaveBeenCalled(); }); }); describe('Method: loadMoreRecent', function() { it('should load more projects if not already loading', function() { var ctrl = createCtrl(); var pagePosition = ctrl.position.page; ctrl.loadMoreRecent(); $scope.$digest(); expect(ctrl.position.page).toBe(pagePosition - 1); expect(JobsDirectoryManagerMock.loadPage).toHaveBeenCalled(); expect(ctrl.projects.length).toBe(0); }); it('should not load more projects if already loading', function() { var ctrl = createCtrl(); var pagePosition = ctrl.position.page; ctrl.isLoadingMoreRecent = true; ctrl.loadMoreRecent(); expect(ctrl.position.page).toBe(pagePosition); }); }); describe('Method: loadMoreProjects', function() { it('should load more projects if not already loading', function() { var ctrl = createCtrl(); var pagePosition = ctrl.position.page; ctrl.loadMoreProjects(); $scope.$digest(); expect(ctrl.position.page).toBe(pagePosition + 1); expect(JobsDirectoryManagerMock.loadPage).toHaveBeenCalled(); expect(ctrl.projects.length).toBe(0); }); it('should not load more projects if already loading', function() { var ctrl = createCtrl(); var pagePosition = ctrl.position.page; ctrl.isLoadingMore = true; ctrl.loadMoreProjects(); expect(ctrl.position.page).toBe(pagePosition); }); }); describe('Method: startProjectFromJob', function() { it('should redirect to post projects', function() { var ctrl = createCtrl(); ctrl.startProjectFromJob(); $scope.$digest(); expect(JobsMock.getList).toHaveBeenCalled(); expect($location.path()).toBe('/post-project/custom'); }); }); });