gaf-mobile
Version:
GAF mobile Web site
191 lines (158 loc) • 5.59 kB
JavaScript
/* 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();
});
});
});
;