gaf-mobile
Version:
GAF mobile Web site
149 lines (127 loc) • 4.59 kB
JavaScript
'use strict';
describe('Controller: HirePageCtrl', function() {
// Vars
var $scope, $q, $httpBackend, createCtrl;
// Mocks
var RouteMock, ProjectsMock, LocationMock;
var skillsData = {};
var query = 'mobile';
var locationData;
// Load the controller's module
beforeEach(module('gafMobileApp'));
// Initialize the controller
beforeEach(inject(function($controller, _$rootScope_, _$q_, _$httpBackend_) {
$scope = _$rootScope_.$new();
$q = _$q_;
$httpBackend = _$httpBackend_;
// Controller constructer to enable to tweak the
// mock ups before instantiate it
createCtrl = function() {
return $controller('HirePageCtrl', {
$scope: $scope,
$location: LocationMock,
$route: RouteMock,
Projects: ProjectsMock
});
};
}));
// Create the mock ups
beforeEach(function() {
ProjectsMock = jasmine.createSpyObj('ProjectsMock', ['getCurrent']);
ProjectsMock.getCurrent.and.returnValue({
set: jasmine.createSpy('set'),
reset: jasmine.createSpy('reset')
});
RouteMock = { current: { locals: { job: 'Graphic-Design'} } };
LocationMock = {
url: function(url) {
if(url) { locationData = url; }
else { return locationData; }
},
path: function(path) {
if(path) { locationData = path; }
else { return locationData; }
}
};
$httpBackend.when('GET', '/views/main.html').respond({});
});
it('should set job when job is available and valid ',
function() {
createCtrl();
$scope.$digest();
expect($scope.job).toEqual(RouteMock.current.locals.job);
});
it('should set job title when either job is invalid or h1 param is specified',
function() {
RouteMock = { current: { locals: { h1: 'Website'} } };
createCtrl();
$scope.$digest();
expect($scope.h1).toEqual(RouteMock.current.locals.h1);
});
it('should set blank title or job when no param is specified',
function() {
RouteMock = { current: { locals: {} } };
createCtrl();
$scope.$digest();
expect($scope.h1).toEqual('');
expect($scope.job).toEqual('');
});
it('should start new project based on jobs',
function() {
createCtrl();
$scope.startProjectFromJob(RouteMock.current.locals.job);
$scope.$digest();
expect(ProjectsMock.getCurrent().set).toHaveBeenCalledWith({
jobs: [RouteMock.current.locals.job]
});
expect(LocationMock.url()).toBe('/post-project');
});
// [TEMP] Skill select service code. To be rewritten when the skill select
// service leaves the prototype stage
it('should post project with title based on query',
function() {
$httpBackend.expect('GET',
'https://m.freelancer.com/suggest-skill?q=' + query).respond(skillsData);
createCtrl();
$scope.startWithQuery(query);
$httpBackend.flush(1);
expect(ProjectsMock.getCurrent().reset).toHaveBeenCalled();
expect(LocationMock.url()).toBe('post-project/?title=' +
query.charAt(0).toUpperCase() + query.slice(1));
});
it('should post project with title even when suggest-skill resp is empty',
function() {
$httpBackend.expect('GET',
'https://m.freelancer.com/suggest-skill?q=' + query).respond();
createCtrl();
$scope.startWithQuery(query);
$httpBackend.flush(1);
expect(ProjectsMock.getCurrent().reset).toHaveBeenCalled();
expect(LocationMock.url()).toBe('post-project/?title=' +
query.charAt(0).toUpperCase() + query.slice(1));
});
it('should post project with suggested skills based on query',
function() {
skillsData.skills = ['Mobile', 'HTML'];
$httpBackend.expect('GET',
'https://m.freelancer.com/suggest-skill?q=' + query).respond(skillsData);
createCtrl();
$scope.startWithQuery(query);
$httpBackend.flush(1);
expect(ProjectsMock.getCurrent().reset).toHaveBeenCalled();
expect(LocationMock.url()).toBe('post-project/mobile/?title=' +
query.charAt(0).toUpperCase() + query.slice(1) + '&jobs=Mobile,HTML');
});
it('should post project using templates based on query',
function() {
skillsData.template = 0;
$httpBackend.expect('GET',
'https://m.freelancer.com/suggest-skill?q=' + query).respond(skillsData);
createCtrl();
$scope.startWithQuery(query);
$httpBackend.flush(1);
expect(ProjectsMock.getCurrent().reset).toHaveBeenCalled();
expect(LocationMock.url()).toBe('post-project/Web-development/?title=' +
query.charAt(0).toUpperCase() + query.slice(1));
});
});