UNPKG

gaf-mobile

Version:

GAF mobile Web site

191 lines (158 loc) 5.59 kB
'use strict'; /* global ProjectMock */ /* global UserMock */ describe('Controller: MyProjectsCtrl', function() { var $location, $rootScope, $scope, $q, $anchorScrollMock; var BidsMock, ProjectsMock, PagerMock, CookieStoreMock; var MilestoneRequestsMock; var project, user, pager, orderOpenProjectsMock; var createCtrl; beforeEach(module('gafMobileApp')); beforeEach(inject(function($controller, _$rootScope_, _$location_, _$q_) { $q = _$q_; $controller = $controller; $rootScope = _$rootScope_; $scope = $rootScope.$new(); $location = _$location_; project = ProjectMock(); user = UserMock(); pager = { projects: [project], setOffset: function() { return 0; }, hasNext: function() { return $q.when(false); }, nextPage: function() { return $q.when({ getProjects: function() { return [{ get: function() { return project; } }] }, getSelectedBidsList: function() { return [project]; }, getUsers: function() { return { getMap: function() { var map = {}; map[user.id] = user; return map; } }; } }); } }; createCtrl = function() { return $controller('MyProjectsCtrl', { $scope: $scope, $rootScope: $rootScope, $location: $location, $anchorScroll: $anchorScrollMock, Bids: BidsMock, Pager: PagerMock, Projects: ProjectsMock, CookieStore: CookieStoreMock, MilestoneRequests: MilestoneRequestsMock, $route: {current: {}}, orderOpenProjects: orderOpenProjectsMock }); }; })); beforeEach(function() { $anchorScrollMock = jasmine.createSpy('$anchorScroll'); PagerMock = jasmine.createSpy('Pager'); BidsMock = jasmine.createSpyObj('Bids', ['getBidderProjectsByStatus']); CookieStoreMock = jasmine.createSpyObj('CookieStore', ['put', 'get']); ProjectsMock = jasmine.createSpyObj('Projects', ['getUserProjectsByStatus']); MilestoneRequestsMock = jasmine.createSpyObj('MilestoneRequests', ['getMilestoneRequestsForProject']); orderOpenProjectsMock = jasmine.createSpy('orderOpenProjects'); BidsMock.getBidderProjectsByStatus.and.returnValue($q.when([project])); PagerMock.and.returnValue(pager); ProjectsMock.getUserProjectsByStatus.and.returnValue($q.when([project])); MilestoneRequestsMock.getMilestoneRequestsForProject.and .returnValue($q.when({ get: function() { return []; } })) }); it('should show the specified view', function() { $location.hash('someView'); createCtrl(); expect($scope.tab.name).toBe('someView'); }); it('should show the employer or freelancer view depending', function() { $location.hash(undefined); CookieStoreMock.get.and.returnValue('Employer'); createCtrl(); expect($scope.tab.name).toBe('employer'); CookieStoreMock.get.and.returnValue('Worker'); createCtrl(); expect($scope.tab.name).toBe('freelancer'); }); describe('Method: changeTab', function() { it('should change the tab and update location', function() { var ctrl = createCtrl(); ctrl.changeTab('diffTab'); expect($scope.tab.name).toBe('diffTab'); expect($location.hash()).toBe('diffTab'); }); it('should scroll to the top of view if tab is unchanged', function() { var ctrl = createCtrl(); ctrl.changeTab('employer'); expect($anchorScrollMock).toHaveBeenCalled(); }); }); describe('Method: loadProjects', function() { var ctrl; beforeEach(function() { ctrl = createCtrl(); // loadProjects() is run on init $scope.$digest(); }); it('should load users', function() { expect(ctrl.users[user.id].id).toBe(user.id); expect(ctrl.users[user.id].username).toBe(user.username); }); it('should load selected bids', function() { expect(ctrl.selectedBids[0].id).toBe(project.id); }); }); describe('Method: getDeadline', function() { var ctrl, projectFactory; beforeEach(function() { projectFactory = { get: function() { return project; } }; ctrl = createCtrl(); }); it('should get time until deadline', function() { project.time_awarded = 10; project.period = 5; ctrl.selectedBids[project.id] = [project]; expect(ctrl.getDeadline(projectFactory).secondsLeft).toBeDefined(); }); it('should get time after deadline', function() { project.time_awarded = 10; project.period = 100000; ctrl.selectedBids[project.id] = [project]; expect(ctrl.getDeadline(projectFactory).secondsMore).toBeDefined(); }); it('should be undefined if no project not in selected bids', function() { expect(ctrl.getDeadline(projectFactory)).toBeUndefined(); }); }); describe('Method: shouldShowAwardBidButton', function() { it('should return true for project not awarded', function() { var project = { bid_stats: { bid_count: 1 }, status: 'active' }; var ctrl = createCtrl(); expect(ctrl.shouldShowAwardBidButton(project)).toBeTruthy(); }); it('should return true for project with pending award', function() { var project = { bid_stats: { bid_count: 1 }, status: 'frozen', sub_stats: 'frozen_awarded' }; var ctrl = createCtrl(); expect(ctrl.shouldShowAwardBidButton(project)).toBeTruthy(); }); }); });