/* global afterEach, before, beforeEach, describe, document, expect, inject, it, module, spyOn */
'use strict';

describe('disable analytics / user opt-out', function () {
  beforeEach(module('angular-google-analytics'));
  beforeEach(module(function (AnalyticsProvider) {
    AnalyticsProvider
      .setAccount('UA-XXXXXX-xx')
      .logAllCalls(true)
      .enterTestMode();
  }));

  afterEach(inject(function (Analytics) {
    Analytics.log.length = 0; // clear log
  }));

  describe('with universal analytics', function () {
    beforeEach(module(function (AnalyticsProvider) {
      AnalyticsProvider.useAnalytics(true);
    }));

    it('should be enabled by default', function () {
      inject(function (Analytics) {
        expect(Analytics.configuration.disableAnalytics).toBe(false);
      });
    });

    describe('when disabled', function () {
      beforeEach(module(function (AnalyticsProvider) {
        AnalyticsProvider.disableAnalytics(true);
      }));

      it('should be disabled', function () {
        inject(function (Analytics) {
          expect(Analytics.configuration.disableAnalytics).toBe(true);
        });
      });

      it('should log an info message about the account being disabled', function () {
        inject(function (Analytics, $window) {
          expect(Analytics.log[0]).toEqual([ 'info', 'Analytics disabled: UA-XXXXXX-xx' ]);
          expect($window['ga-disable-UA-XXXXXX-xx']).toBe(true);
        });
      });
    });
  });

  describe('with classic analytics', function () {
    beforeEach(module(function (AnalyticsProvider) {
      AnalyticsProvider.useAnalytics(false);
    }));

    it('should be enabled by default', function () {
      inject(function (Analytics) {
        expect(Analytics.configuration.disableAnalytics).toBe(false);
      });
    });

    describe('when disabled', function () {
      beforeEach(module(function (AnalyticsProvider) {
        AnalyticsProvider.disableAnalytics(true);
      }));

      it('should be disabled', function () {
        inject(function (Analytics) {
          expect(Analytics.configuration.disableAnalytics).toBe(true);
        });
      });

      it('should log an info message about the account being disabled', function () {
        inject(function (Analytics, $window) {
          expect(Analytics.log[0]).toEqual([ 'info', 'Analytics disabled: UA-XXXXXX-xx' ]);
          expect($window['ga-disable-UA-XXXXXX-xx']).toBe(true);
        });
      });
    });
  });
});