Skip to content
googleanalytics_basic.test 4.33 KiB
Newer Older
/**
 * @file
 * Test file for Google Analytics module.
 */

class GoogleAnalyticsBasicTest extends DrupalTestCase {
  protected $web_user;

  function get_info() {
    return array('name' => t('Google Analytics basic tests'), 'desc' => t('Test basic Google Analytics module functionality.'), 'group' => 'Google Analytics');
  }

  function setUp() {
    // User to set up google_analytics.
    $this->web_user = $this->drupalCreateUserRolePerm(array('administer google analytics'));

    $this->drupalGet('logout');
    $this->drupalLoginUser($this->web_user);

    parent::setUp();
  }
Alexander Hass's avatar
Alexander Hass committed

  function testGoogleAnalytics() {
    // Check for setting page's presence.
    $this->drupalGet('admin/settings/googleanalytics');
    $this->assertWantedRaw(t('Google Analytics account number'), "[testGoogleAnalytics]: Settings page displayed");

    // Check for account code validation.
    $edit['googleanalytics_account'] = $this->randomName(2);
    $this->drupalPost('admin/settings/googleanalytics', $edit, 'Save configuration');
    $this->assertWantedRaw(t('A valid Google Analytics account number is case sensitive and formated like UA-xxxxxx-x.'), "[testGoogleAnalytics]: Account number validated");
  }
Alexander Hass's avatar
Alexander Hass committed

  function testGoogleAnalyticsTracking() {
    // Set visibility to hide tracking code on admin page only,
    // track authenticated users.
    $this->drupalVariableSet('googleanalytics_visibility', 0);
    $this->drupalVariableSet('googleanalytics_pages', "admin*");
    $this->drupalVariableSet('googleanalytics_roles', array(DRUPAL_AUTHENTICATED_RID => DRUPAL_AUTHENTICATED_RID));
    $ua_code = 'UA-123456-7';
    $this->drupalVariableSet('googleanalytics_account', $ua_code);

    // Check tracking code visibility.
    $this->drupalGet('');
    $this->assertWantedRaw($ua_code, '[testGoogleAnalyticsTracking]: Tracking code is displayed for authenticated');

    /* Sample JS code as added to page:
    <script type="text/javascript" src="/sites/all/modules/google_analytics/googleanalytics.js?w"></script>
    <script type="text/javascript">var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script>
    <script type="text/javascript">var pageTracker = _gat._getTracker("UA-123456-7");pageTracker._initData();pageTracker._trackPageview();</script>
    */

    // Test whether tracking code uses latest JS.
    $this->drupalVariableSet('googleanalytics_legacy_version', 0);
    $this->drupalGet('');
    $this->assertWantedRaw('google-analytics.com/ga.js', '[testGoogleAnalyticsTracking]: Latest tracking code used');

    // Test whether tracking code uses legacy JS.
    $this->drupalVariableSet('googleanalytics_legacy_version', 1);
    $this->drupalGet('');
    $this->assertWantedRaw('google-analytics.com/urchin.js', '[testGoogleAnalyticsTracking]: Legacy tracking code used');
Alexander Hass's avatar
Alexander Hass committed

    // Test whether tracking code is not included on pages to omit.
    $this->drupalGet('admin');
    $this->assertNoUnWantedRaw($ua_code, '[testGoogleAnalyticsTracking]: Tracking code is not displayed on admin page');
    $this->drupalGet('admin/settings/googleanalytics');
    // Checking for tracking code URI here, as $ua_code is displayed in the form.
    $this->assertNoUnWantedRaw('google-analytics.com/urchin.js', '[testGoogleAnalyticsTracking]: Tracking code is not displayed on admin subpage');

    // Test whether tracking code display is properly flipped.
    $this->drupalVariableSet('googleanalytics_visibility', 1);
    $this->drupalGet('admin');
    $this->assertWantedRaw($ua_code, '[testGoogleAnalyticsTracking]: Tracking code is displayed on admin page');
    $this->drupalGet('admin/settings/googleanalytics');
    // Checking for tracking code URI here, as $ua_code is displayed in the form.
    $this->assertWantedRaw('google-analytics.com/urchin.js', '[testGoogleAnalyticsTracking]: Tracking code is displayed on admin subpage');
    $this->drupalGet('');
    $this->assertNoUnWantedRaw($ua_code, '[testGoogleAnalyticsTracking]: Tracking code is not displayed on front page');
Alexander Hass's avatar
Alexander Hass committed

    // Test whether tracking code is not display for anonymous.
    $this->drupalGet('logout');
    $this->drupalGet('');
    $this->assertNoUnWantedRaw($ua_code, '[testGoogleAnalyticsTracking]: Tracking code is not displayed for anonymous');
  }

}