gaf-mobile
Version:
GAF mobile Web site
105 lines (86 loc) • 2.75 kB
JavaScript
'use strict';
describe('Controller: HomePageCtrl', function () {
// Vars
var $scope, $q, $httpBackend, createCtrl, GAF_BASE_URL;
// Mocks
var ProjectsMock, CookieStoreMock, WindowMock, LocationMock;
var projectData = {
category: 'chuck',
bundle: 'norris'
};
var locationData;
// load the controller's module
beforeEach(module('gafMobileApp'));
// Initialize the controller and a mock scope
beforeEach(inject(function($controller, $rootScope, _$q_, _$httpBackend_,
_GAF_BASE_URL_) {
$q = _$q_;
$scope = $rootScope.$new();
$httpBackend = _$httpBackend_;
GAF_BASE_URL = _GAF_BASE_URL_;
// Controller constructer to enable to tweak the
// mock ups before instantiate it
createCtrl = function() {
return $controller('HomePageCtrl', {
$scope: $scope,
$location: LocationMock,
$window: WindowMock,
Projects: ProjectsMock,
CookieStore: CookieStoreMock,
});
};
}));
// Create the mock ups
beforeEach(function() {
ProjectsMock = jasmine.createSpyObj('ProjectsMock', ['getCurrent']);
ProjectsMock.getCurrent.and.returnValue({
reset: jasmine.createSpy('reset')
});
CookieStoreMock = jasmine.createSpyObj('CookieStore', ['put', 'get']);
LocationMock = {
url: function(url) {
if(url) { locationData = url; }
else { return locationData; }
}
};
WindowMock = { navigator: { userAgent: 'iPhone' } };
$httpBackend.when('GET', GAF_BASE_URL +
'/api/projects/0.1/categories/?compact=true&job_details=true').respond();
});
it('should reset a previous project', function() {
createCtrl();
$scope.start(projectData);
expect(ProjectsMock.getCurrent().reset).toHaveBeenCalled();
});
it('should redirect to /post-project after project creation', function() {
createCtrl();
$scope.start(projectData);
expect(LocationMock.url()).toBe('post-project/templates');
});
it('should hide app banner if hideAppBanner cookie is set', function() {
CookieStoreMock.get.and.returnValue(true);
createCtrl();
expect($scope.hideAppBanner).toBe(true);
});
it('should hide app banner if banner is closed', function() {
createCtrl();
$scope.closeBanner();
expect($scope.hideAppBanner).toBe(true);
expect(CookieStoreMock.put).toHaveBeenCalled();
});
it('should detect iOS devices and set corresponding var',
function() {
createCtrl();
expect($scope.isiOS).toBe(true);
});
it('should detect android devices and set corresponding var',
function() {
WindowMock = {
navigator: {
userAgent: 'Android'
}
};
createCtrl();
expect($scope.isAndroid).toBe(true);
});
});