describe('ngCordovaMocks', function() {
  beforeEach(function() {
    module('ngCordovaMocks');
  });

  describe('cordovaGoogleAnalytics', function () {
    var $timeout = null;
    var $cordovaGoogleAnalytics = null;

    beforeEach(inject(function (_$cordovaGoogleAnalytics_, _$timeout_) {
      $cordovaGoogleAnalytics = _$cordovaGoogleAnalytics_;
      $timeout = _$timeout_;
    }));

    var testPromises = function testPromises(funcName) {
      $cordovaGoogleAnalytics[funcName](1)
        .then(
          function() { expect(true).toBe(true); },
          function() { expect(false).toBe(true); }
        );

      $timeout.flush();

      $cordovaGoogleAnalytics.throwsError = true;
      $cordovaGoogleAnalytics[funcName](1)
        .then(
          function() { expect(false).toBe(true); },
          function() { expect(true).toBe(true); }
        );

      $timeout.flush();
    };

    it('should start tracker', function () {
      testPromises('startTrackerWithId');
    });

    it('should set User Id.', function() {
      testPromises('setUserId');
    });

    it('should set debug mode.', function() {
      testPromises('debugMode');
    });

    it('should track view.', function() {
      testPromises('trackView');
    });

    it('should add customer dimensions.', function() {
      testPromises('addCustomDimension');
    });

    it('should track event.', function() {
      testPromises('trackEvent');
    });

    it('should track exception.', function() {
      testPromises('trackException');
    });

    it('should track timing.', function() {
      testPromises('trackTiming');
    });

    it('should add transaction.', function() {
      testPromises('addTransaction');
    });

    it('should add add a transaction item.', function() {
      testPromises('addTransactionItem');
    });
  });
})