public function GoogleAnalyticsBasicTest::testGoogleAnalyticsTrackingCode in Google Analytics 4.x
Same name and namespace in other branches
- 8.3 tests/src/Functional/GoogleAnalyticsBasicTest.php \Drupal\Tests\google_analytics\Functional\GoogleAnalyticsBasicTest::testGoogleAnalyticsTrackingCode()
- 8.2 tests/src/Functional/GoogleAnalyticsBasicTest.php \Drupal\Tests\google_analytics\Functional\GoogleAnalyticsBasicTest::testGoogleAnalyticsTrackingCode()
Tests if tracking code is properly added to the page.
File
- tests/
src/ Functional/ GoogleAnalyticsBasicTest.php, line 186
Class
- GoogleAnalyticsBasicTest
- Test basic functionality of Google Analytics module.
Namespace
Drupal\Tests\google_analytics\FunctionalCode
public function testGoogleAnalyticsTrackingCode() {
$ua_code = 'UA-123456-2';
$this
->config('google_analytics.settings')
->set('account', $ua_code)
->save();
// Show tracking code on every page except the listed pages.
$this
->config('google_analytics.settings')
->set('visibility.request_path_mode', 0)
->save();
// Enable tracking code for all user roles.
$this
->config('google_analytics.settings')
->set('visibility.user_role_roles', [])
->save();
/* Sample JS code as added to page:
<script type="text/javascript" src="/sites/all/modules/google_analytics/google_analytics.js?w"></script>
<!-- Global Site Tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-123456-7"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'UA-123456-7');
</script>
*/
// Test whether tracking code uses latest JS.
$this
->config('google_analytics.settings')
->set('cache', 0)
->save();
$this
->drupalGet('');
$this
->assertRaw('<script async src="https://www.googletagmanager.com/gtag/js?id=' . $ua_code . '"></script>');
$this
->assertRaw('window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments)};gtag("js", new Date());');
$this
->assertRaw('"google_analytics":{"account":"' . $ua_code . '"');
// Enable anonymizing of IP addresses.
$this
->config('google_analytics.settings')
->set('privacy.anonymizeip', 1)
->save();
$this
->drupalGet('');
$this
->assertRaw('"anonymize_ip":true');
// Test whether anonymize visitors IP address feature has been enabled.
$this
->config('google_analytics.settings')
->set('privacy.anonymizeip', 0)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"anonymize_ip":true');
// Test if track Enhanced Link Attribution is enabled.
$this
->config('google_analytics.settings')
->set('track.linkid', 1)
->save();
$this
->drupalGet('');
$this
->assertRaw('"link_attribution":true');
// Test if track Enhanced Link Attribution is disabled.
$this
->config('google_analytics.settings')
->set('track.linkid', 0)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"link_attribution":true');
// Test if tracking of User ID is enabled.
$this
->config('google_analytics.settings')
->set('track.userid', 1)
->save();
$this
->drupalGet('');
$this
->assertRaw('"user_id":"');
// Test if tracking of User ID is disabled.
$this
->config('google_analytics.settings')
->set('track.userid', 0)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"user_id":"');
// Test if track display features is disabled.
$this
->config('google_analytics.settings')
->set('track.displayfeatures', 0)
->save();
$this
->drupalGet('');
$this
->assertRaw('"allow_ad_personalization_signals":false');
// Test if track display features is enabled.
$this
->config('google_analytics.settings')
->set('track.displayfeatures', 1)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"allow_ad_personalization_signals":false');
// Test if tracking of url fragments is enabled.
$this
->config('google_analytics.settings')
->set('track.urlfragments', 1)
->save();
$this
->drupalGet('');
$this
->assertRaw('"page_path":location.pathname + location.search + location.hash});');
// Test if tracking of url fragments is disabled.
$this
->config('google_analytics.settings')
->set('track.urlfragments', 0)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"page_path":location.pathname + location.search + location.hash});');
// Test whether single domain tracking is active.
$this
->drupalGet('');
$this
->assertRaw('{"groups":"default"}');
// Enable "One domain with multiple subdomains".
$this
->config('google_analytics.settings')
->set('domain_mode', 1)
->save();
$this
->drupalGet('');
// Test may run on localhost, an ipaddress or real domain name.
// TODO: Workaround to run tests successfully. This feature cannot tested
// reliable.
global $cookie_domain;
if (count(explode('.', $cookie_domain)) > 2 && !is_numeric(str_replace('.', '', $cookie_domain))) {
$this
->assertRaw('"cookie_domain":"' . $cookie_domain . '"');
}
else {
// Special cases, Localhost and IP addresses don't show 'cookieDomain'.
$this
->assertNoRaw('"cookie_domain":"' . $cookie_domain . '"');
}
// Enable "Multiple top-level domains" tracking.
$this
->config('google_analytics.settings')
->set('domain_mode', 2)
->set('cross_domains', "www.example.com\nwww.example.net")
->save();
$this
->drupalGet('');
$this
->assertRaw('gtag("config", "' . $ua_code . '", {"groups":"default","linker":');
$this
->assertRaw('gtag("config", "' . $ua_code . '", {"groups":"default","linker":{"domains":["www.example.com","www.example.net"]}});');
$this
->assertRaw('"trackDomainMode":2,');
$this
->assertRaw('"trackCrossDomains":["www.example.com","www.example.net"]');
$this
->config('google_analytics.settings')
->set('domain_mode', 0)
->save();
// Test whether debugging script has been enabled.
$this
->config('google_analytics.settings')
->set('debug', 1)
->save();
$this
->drupalGet('');
// @FIXME
//$this->assertRaw('https://www.google-analytics.com/analytics_debug.js');
// Check if text and link is shown on 'Status Reports' page.
// Requires 'administer site configuration' permission.
$this
->drupalGet('admin/reports/status');
$this
->assertRaw($this
->t('Google Analytics module has debugging enabled. Please disable debugging setting in production sites from the <a href=":url">Google Analytics settings page</a>.', [
':url' => Url::fromRoute('google_analytics.admin_settings_form')
->toString(),
]));
// Test whether debugging script has been disabled.
$this
->config('google_analytics.settings')
->set('debug', 0)
->save();
$this
->drupalGet('');
$this
->assertRaw('https://www.googletagmanager.com/gtag/js?id=');
// Test whether the CREATE and BEFORE and AFTER code is added to the
// tracking code.
$codesnippet_parameters = [
'cookie_domain' => 'foo.example.com',
'cookie_name' => 'myNewName',
'cookie_expires' => 20000,
'sample_rate' => 4.3,
];
$this
->config('google_analytics.settings')
->set('codesnippet.create', $codesnippet_parameters)
->set('codesnippet.before', 'gtag("set", {"currency":"USD"});')
->set('codesnippet.after', 'gtag("config", "UA-123456-3", {"groups":"default"});if(1 == 1 && 2 < 3 && 2 > 1){console.log("Google Analytics: Custom condition works.");}')
->save();
$this
->drupalGet('');
$this
->assertRaw('gtag("config", "' . $ua_code . '", {"groups":"default","cookie_domain":"foo.example.com","cookie_name":"myNewName","cookie_expires":20000,"sample_rate":4.3});');
$this
->assertRaw('gtag("set", {"currency":"USD"});');
$this
->assertRaw('gtag("config", "UA-123456-3", {"groups":"default"});');
$this
->assertRaw('if(1 == 1 && 2 < 3 && 2 > 1){console.log("Google Analytics: Custom condition works.");}');
}