ng-cordova
Version:
[ngCordova](http://ngcordova.com/) ==========
450 lines (324 loc) • 12.4 kB
JavaScript
describe('Service: $cordovaGoogleAnalytics', function() {
var $cordovaGoogleAnalytics, $rootScope, $window;
beforeEach(module('ngCordova.plugins.googleAnalytics'));
beforeEach(inject(function (_$cordovaGoogleAnalytics_, _$window_, _$rootScope_) {
$cordovaGoogleAnalytics = _$cordovaGoogleAnalytics_;
$window = _$window_;
$rootScope = _$rootScope_;
$window.analytics = {
startTrackerWithId: angular.noop,
setUserId: angular.noop,
debugMode: angular.noop,
trackView: angular.noop,
addCustomDimension: angular.noop,
trackEvent: angular.noop,
trackException: angular.noop,
trackTiming: angular.noop,
addTransaction: angular.noop,
addTransactionItem: angular.noop,
};
}));
it('should call $window\'s analytics.startTrackerWithId method', function() {
var result;
spyOn($window.analytics, 'startTrackerWithId')
.and.callFake(function (id, successCb, errorCb) {
successCb('tracker started');
});
$cordovaGoogleAnalytics
.startTrackerWithId('UA-000000-01')
.then(function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('tracker started');
expect($window.analytics.startTrackerWithId.calls.argsFor(0)[0]).toBe('UA-000000-01');
});
it('should call errorCb when in $window\'s analytics.startTrackerWithId a error orccurs', function() {
var result;
spyOn($window.analytics, 'startTrackerWithId')
.and.callFake(function (id, successCb, errorCb) {
errorCb('tracker id is not valid');
});
$cordovaGoogleAnalytics.startTrackerWithId()
.then(angular.noop, function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('tracker id is not valid');
});
it('should call $window\'s analytics.setUserId method', function() {
var result;
spyOn($window.analytics, 'setUserId')
.and.callFake(function (id, successCb, errorCb) {
successCb('Set user id: ' + id);
});
$cordovaGoogleAnalytics
.setUserId('USER_ID')
.then(function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Set user id: USER_ID');
expect($window.analytics.setUserId.calls.argsFor(0)[0]).toBe('USER_ID');
});
it('should call errorCb when in $window\'s analytics.setUserId a error orccurs', function() {
var result;
spyOn($window.analytics, 'setUserId')
.and.callFake(function (id, successCb, errorCb) {
errorCb('Tracker not started');
});
$cordovaGoogleAnalytics.setUserId()
.then(angular.noop, function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Tracker not started');
});
it('should call $window\'s analytics.debugMode method', function() {
var result;
spyOn($window.analytics, 'debugMode')
.and.callFake(function (successCb, errorCb) {
successCb('debugMode enabled');
});
$cordovaGoogleAnalytics
.debugMode()
.then(function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('debugMode enabled');
});
it('should call errorCb when in $window\'s analytics.debugMode a error orccurs', function() {
var result;
spyOn($window.analytics, 'debugMode')
.and.callFake(function (successCb, errorCb) {
errorCb();
});
$cordovaGoogleAnalytics.debugMode()
.then(angular.noop, function (response) {
result = 'error orccurs';
});
$rootScope.$digest();
expect(result).toBe('error orccurs');
});
it('should call $window\'s analytics.trackView method', function() {
var result;
spyOn($window.analytics, 'trackView')
.and.callFake(function (screenName, successCb, errorCb) {
successCb('Track Screen: ' + screenName);
});
$cordovaGoogleAnalytics
.trackView('Home Screen')
.then(function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Track Screen: Home Screen');
expect($window.analytics.trackView.calls.argsFor(0)[0]).toBe('Home Screen');
});
it('should call errorCb when in $window\'s analytics.trackView a error orccurs', function() {
var result;
spyOn($window.analytics, 'trackView')
.and.callFake(function (screenName, successCb, errorCb) {
errorCb('Expected one non-empty string argument');
});
$cordovaGoogleAnalytics.trackView()
.then(angular.noop, function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Expected one non-empty string argument');
});
it('should call $window\'s analytics.addCustomDimension method', function() {
var result;
spyOn($window.analytics, 'addCustomDimension')
.and.callFake(function (key, value, successCb, errorCb) {
successCb();
});
$cordovaGoogleAnalytics
.addCustomDimension(1, 'Level 1')
.then(function (response) {
result = 'success';
});
$rootScope.$digest();
expect(result).toBe('success');
expect($window.analytics.addCustomDimension.calls.argsFor(0)[0]).toBe(1);
expect($window.analytics.addCustomDimension.calls.argsFor(0)[1]).toBe('Level 1');
});
it('should call errorCb when in $window\'s analytics.addCustomDimension a error orccurs', function() {
var result;
spyOn($window.analytics, 'addCustomDimension')
.and.callFake(function (key, value, successCb, errorCb) {
errorCb('Parameter "key" must be an integer.');
});
$cordovaGoogleAnalytics.addCustomDimension()
.then(angular.noop, function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Parameter "key" must be an integer.');
});
it('should call $window\'s analytics.trackEvent method', function() {
var result;
spyOn($window.analytics, 'trackEvent')
.and.callFake(function (category, action, label, value, successCb, errorCb) {
successCb('Track Event: ' + category);
});
$cordovaGoogleAnalytics
.trackEvent('Videos', 'Video Load Time', 'Gone With the Wind', 100)
.then(function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Track Event: Videos');
expect($window.analytics.trackEvent).toHaveBeenCalledWith(
'Videos', 'Video Load Time', 'Gone With the Wind', 100,
jasmine.any(Function),
jasmine.any(Function)
);
});
it('should call errorCb when in $window\'s analytics.trackEvent a error orccurs', function() {
var result;
spyOn($window.analytics, 'trackEvent')
.and.callFake(function (category, action, label, value, successCb, errorCb) {
errorCb('Tracker not started');
});
$cordovaGoogleAnalytics
.trackEvent()
.then(angular.noop, function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Tracker not started');
});
it('should call $window\'s analytics.trackException method', function() {
var result;
spyOn($window.analytics, 'trackException')
.and.callFake(function (description, fatal, successCb, errorCb) {
successCb('Track Exception: ' + description);
});
$cordovaGoogleAnalytics
.trackException('Video player exception', false)
.then(function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Track Exception: Video player exception');
expect($window.analytics.trackException).toHaveBeenCalledWith(
'Video player exception', false,
jasmine.any(Function),
jasmine.any(Function)
);
});
it('should call errorCb when in $window\'s analytics.trackException a error orccurs', function() {
var result;
spyOn($window.analytics, 'trackException')
.and.callFake(function (description, fatal, successCb, errorCb) {
errorCb('Tracker not started');
});
$cordovaGoogleAnalytics
.trackException()
.then(angular.noop, function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Tracker not started');
});
it('should call $window\'s analytics.trackTiming method', function() {
var result;
spyOn($window.analytics, 'trackTiming')
.and.callFake(function (category, milliseconds, variable, label, successCb, errorCb) {
successCb('Track Timing: ' + category);
});
$cordovaGoogleAnalytics
.trackTiming('Videos', 100, 'Video Load Time', 'Gone With the Wind')
.then(function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Track Timing: Videos');
expect($window.analytics.trackTiming).toHaveBeenCalledWith(
'Videos', 100, 'Video Load Time', 'Gone With the Wind',
jasmine.any(Function),
jasmine.any(Function)
);
});
it('should call errorCb when in $window\'s analytics.trackTiming a error orccurs', function() {
var result;
spyOn($window.analytics, 'trackTiming')
.and.callFake(function (category, milliseconds, variable, label, successCb, errorCb) {
errorCb('Tracker not started');
});
$cordovaGoogleAnalytics
.trackTiming()
.then(angular.noop, function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Tracker not started');
});
it('should call $window\'s analytics.addTransaction method', function() {
var result;
spyOn($window.analytics, 'addTransaction')
.and.callFake(function (transactionId, affiliation, revenue, tax, shipping, currencyCode, successCb, errorCb) {
successCb('Add Transaction: ' + transactionId);
});
$cordovaGoogleAnalytics
.addTransaction('1234', 'Acme Clothing', '11.99', '5', '1.29', 'EUR')
.then(function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Add Transaction: 1234');
expect($window.analytics.addTransaction).toHaveBeenCalledWith(
'1234', 'Acme Clothing', '11.99', '5', '1.29', 'EUR',
jasmine.any(Function),
jasmine.any(Function)
);
});
it('should call errorCb when in $window\'s analytics.addTransaction a error orccurs', function() {
var result;
spyOn($window.analytics, 'addTransaction')
.and.callFake(function (transactionId, affiliation, revenue, tax, shipping, currencyCode, successCb, errorCb) {
errorCb('Tracker not started');
});
$cordovaGoogleAnalytics.addTransaction()
.then(angular.noop, function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Tracker not started');
});
it('should call $window\'s analytics.addTransactionItem method', function() {
var result;
spyOn($window.analytics, 'addTransactionItem')
.and.callFake(function (transactionId, name ,sku, category, price, quantity, currencyCode, successCb, errorCb) {
successCb('Add Transaction Item: ' + transactionId);
});
$cordovaGoogleAnalytics
.addTransactionItem('1234', 'Fluffy Pink Bunnies', 'DD23444', 'Party Toys', '11.99', '1', 'GBP')
.then(function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Add Transaction Item: 1234');
expect($window.analytics.addTransactionItem).toHaveBeenCalledWith(
'1234', 'Fluffy Pink Bunnies', 'DD23444', 'Party Toys', '11.99', '1', 'GBP',
jasmine.any(Function),
jasmine.any(Function)
);
});
it('should call errorCb when in $window\'s analytics.addTransactionItem a error orccurs', function() {
var result;
spyOn($window.analytics, 'addTransactionItem')
.and.callFake(function (transactionId, name ,sku, category, price, quantity, currencyCode, successCb, errorCb) {
errorCb('Tracker not started');
});
$cordovaGoogleAnalytics.addTransactionItem()
.then(angular.noop, function (response) {
result = response;
});
$rootScope.$digest();
expect(result).toBe('Tracker not started');
});
});