gaf-mobile
Version:
GAF mobile Web site
155 lines (128 loc) • 3.92 kB
JavaScript
/* global LocationMock */
describe('Controller: jobsLocaljobs', function() {
var $rootScope, $scope, $q;
var RouteMock, UsersMock, AuthMock, ProjectsMock;
var ProjectLocationMock, mockLocation;
var createCtrl;
beforeEach(module('gafMobileApp'));
beforeEach(inject(function($controller, _$rootScope_, _$q_) {
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
$q = _$q_;
createCtrl = function() {
return $controller('JobsLocalJobsCtrl', {
$scope: $scope,
$route: RouteMock,
Users: UsersMock,
Auth: AuthMock,
Projects: ProjectsMock,
ProjectLocation: ProjectLocationMock
});
};
}));
beforeEach(function() {
mockLocation = LocationMock();
UsersMock = {
get: function() {
return {
true_location: mockLocation,
is_local: true
};
}
};
AuthMock = {
isAuthenticated: function() {
return true;
}
};
RouteMock = {
current: {
locals: {
userLocation: UsersMock
}
}
};
ProjectsMock = jasmine.createSpyObj('Users', ['searchActive']);
ProjectsMock.searchActive.and.returnValue($q.when({
getList: function() {
return [1, 2, 3, 4];
},
getSearchTotal: function() {
return 4;
}
}));
ProjectLocationMock = jasmine.createSpyObj('ProjectLocation',
['getLocation', 'isValidPlace', 'denormaliseLatLng']);
ProjectLocationMock.getLocation.and.returnValue($q.when(mockLocation));
});
describe('upon init', function() {
it('should set address, count and projects if it has results',
function() {
var ctrl = createCtrl();
$scope.$digest();
expect(ctrl.address).toBe('Sydney, Australia');
expect(ctrl.count).toEqual(4);
expect(ctrl.state).toBe('withResults');
});
it('should set state to "noResults" if it doesn\'t have results',
function() {
ProjectsMock.searchActive.and.returnValue($q.when({
getList: function() {
return [];
},
getSearchTotal: function() {
return 0;
}
}));
var ctrl = createCtrl();
$scope.$digest();
expect(ctrl.address).toBe('Sydney, Australia');
expect(ctrl.count).toEqual(0);
expect(ctrl.state).toBe('noResults');
});
it('should set ctrl.state to "noLocation" when logged' +
'in user doesn\'t have lat and lon',
function() {
mockLocation.latitude = false;
mockLocation.longitude = false;
var ctrl = createCtrl();
$scope.$digest();
expect(ctrl.state).toBe('noLocation');
});
it('should get current location when userlocation is not defined',
function() {
RouteMock = {
current: {
locals: {
userLocation: null
}
}
};
var ctrl = createCtrl();
$scope.$digest();
expect(ctrl.search).toEqual(mockLocation);
});
});
describe('On user location input', function() {
it('should set "ctrl.isLocationValid" to true when' +
'location is valid and will set ctrl.address',
function() {
ProjectLocationMock.isValidPlace.and.returnValue(true);
ProjectLocationMock.denormaliseLatLng.and.returnValue(mockLocation);
var ctrl = createCtrl();
$scope.$digest();
ctrl.handleLocation();
expect(ctrl.isLocationValid).toBeTruthy();
});
it('should set "ctrl.isLocationValid" to' +
'false when location is invalid',
function() {
ProjectLocationMock.isValidPlace.and.returnValue(false);
var ctrl = createCtrl();
$scope.$digest();
ctrl.handleLocation();
expect(ctrl.isLocationValid).toBeFalsy();
});
});
});
;