UNPKG

gaf-mobile

Version:

GAF mobile Web site

155 lines (128 loc) 3.92 kB
'use strict'; /* 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(); }); }); });