View source
<?php
namespace Drupal\Tests\google_analytics\Functional;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Tests\BrowserTestBase;
class GoogleAnalyticsBasicTest extends BrowserTestBase {
use StringTranslationTrait;
protected $noSnippetUser;
protected $adminUser;
public static $modules = [
'block',
'google_analytics',
'help',
];
protected $defaultTheme = 'stark';
protected function setUp() {
parent::setUp();
$permissions = [
'access administration pages',
'administer google analytics',
'administer modules',
'administer site configuration',
];
$this->noSnippetUser = $this
->drupalCreateUser($permissions);
$permissions[] = 'add JS snippets for google analytics';
$this->adminUser = $this
->drupalCreateUser($permissions);
$this
->drupalLogin($this->adminUser);
$this
->drupalPlaceBlock('help_block', [
'region' => 'help',
]);
}
public function testGoogleAnalyticsConfiguration() {
$this
->drupalGet('admin/modules');
$this
->assertRaw('admin/config/system/google-analytics');
$this
->drupalGet('admin/reports/status');
$this
->assertRaw('admin/config/system/google-analytics');
$this
->drupalGet('admin/config/system/google-analytics');
$this
->assertRaw($this
->t('Web Property ID'));
$edit['google_analytics_account'] = $this
->randomMachineName(2);
$this
->drupalPostForm('admin/config/system/google-analytics', $edit, $this
->t('Save configuration'));
$this
->assertRaw($this
->t('A valid Google Analytics Web Property ID is case sensitive and formatted like UA-xxxxxxx-yy.'));
$this
->assertFieldByName('google_analytics_codesnippet_create');
$this
->assertFieldByName('google_analytics_codesnippet_before');
$this
->assertFieldByName('google_analytics_codesnippet_after');
$this
->assertNoFieldByXPath("//textarea[@name='google_analytics_codesnippet_create' and @disabled='disabled']", NULL, '"Parameters" field is enabled.');
$this
->assertNoFieldByXPath("//textarea[@name='google_analytics_codesnippet_before' and @disabled='disabled']", NULL, '"Code snippet (before)" is enabled.');
$this
->assertNoFieldByXPath("//textarea[@name='google_analytics_codesnippet_after' and @disabled='disabled']", NULL, '"Code snippet (after)" is enabled.');
$this
->drupalLogin($this->noSnippetUser);
$this
->drupalGet('admin/config/system/google-analytics');
$this
->assertFieldByName('google_analytics_codesnippet_create');
$this
->assertFieldByName('google_analytics_codesnippet_before');
$this
->assertFieldByName('google_analytics_codesnippet_after');
$this
->assertNoFieldByXPath("//textarea[@name='google_analytics_codesnippet_create' and @disabled='disabled']", NULL, '"Parameters" field is enabled.');
$this
->assertFieldByXPath("//textarea[@name='google_analytics_codesnippet_before' and @disabled='disabled']", NULL, '"Code snippet (before)" is disabled.');
$this
->assertFieldByXPath("//textarea[@name='google_analytics_codesnippet_after' and @disabled='disabled']", NULL, '"Code snippet (after)" is disabled.');
}
public function testGoogleAnalyticsHelp() {
$this
->drupalGet('admin/config/system/google-analytics');
$this
->assertText('Google Analytics is a free (registration required) website traffic and marketing effectiveness service.');
$this
->drupalGet('admin/help/google_analytics');
$this
->assertText('Google Analytics adds a web statistics tracking system to your website.');
}
public function testGoogleAnalyticsPageVisibility() {
$this
->drupalGet('');
$this
->assertNoRaw('https://www.googletagmanager.com/gtag/js?id=');
$ua_code = 'UA-123456-1';
$this
->config('google_analytics.settings')
->set('account', $ua_code)
->save();
$this
->config('google_analytics.settings')
->set('visibility.request_path_mode', 0)
->save();
$this
->config('google_analytics.settings')
->set('visibility.request_path_pages', "/admin\n/admin/*")
->save();
$this
->config('google_analytics.settings')
->set('visibility.user_role_roles', [
AccountInterface::AUTHENTICATED_ROLE => AccountInterface::AUTHENTICATED_ROLE,
])
->save();
$this
->drupalGet('');
$this
->assertRaw('gtag("config", "' . $ua_code . '"');
$this
->drupalGet('admin');
$this
->assertNoRaw($ua_code);
$this
->drupalGet('admin/config/system/google-analytics');
$this
->assertNoRaw('https://www.googletagmanager.com/gtag/js?id=');
$this
->config('google_analytics.settings')
->set('visibility.request_path_mode', 1)
->save();
$this
->drupalGet('admin');
$this
->assertRaw($ua_code);
$this
->drupalGet('admin/config/system/google-analytics');
$this
->assertRaw('https://www.googletagmanager.com/gtag/js?id=');
$this
->drupalGet('');
$this
->assertNoRaw($ua_code);
$this
->drupalLogout();
$this
->drupalGet('');
$this
->assertNoRaw($ua_code);
$this
->config('google_analytics.settings')
->set('visibility.request_path_mode', 0)
->save();
$this
->config('google_analytics.settings')
->set('visibility.user_role_roles', [])
->save();
}
public function testGoogleAnalyticsTrackingCode() {
$ua_code = 'UA-123456-2';
$this
->config('google_analytics.settings')
->set('account', $ua_code)
->save();
$this
->config('google_analytics.settings')
->set('visibility.request_path_mode', 0)
->save();
$this
->config('google_analytics.settings')
->set('visibility.user_role_roles', [])
->save();
$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 . '"');
$this
->config('google_analytics.settings')
->set('privacy.anonymizeip', 1)
->save();
$this
->drupalGet('');
$this
->assertRaw('"anonymize_ip":true');
$this
->config('google_analytics.settings')
->set('privacy.anonymizeip', 0)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"anonymize_ip":true');
$this
->config('google_analytics.settings')
->set('track.linkid', 1)
->save();
$this
->drupalGet('');
$this
->assertRaw('"link_attribution":true');
$this
->config('google_analytics.settings')
->set('track.linkid', 0)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"link_attribution":true');
$this
->config('google_analytics.settings')
->set('track.userid', 1)
->save();
$this
->drupalGet('');
$this
->assertRaw('"user_id":"');
$this
->config('google_analytics.settings')
->set('track.userid', 0)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"user_id":"');
$this
->config('google_analytics.settings')
->set('track.displayfeatures', 0)
->save();
$this
->drupalGet('');
$this
->assertRaw('"allow_ad_personalization_signals":false');
$this
->config('google_analytics.settings')
->set('track.displayfeatures', 1)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"allow_ad_personalization_signals":false');
$this
->config('google_analytics.settings')
->set('track.urlfragments', 1)
->save();
$this
->drupalGet('');
$this
->assertRaw('"page_path":location.pathname + location.search + location.hash});');
$this
->config('google_analytics.settings')
->set('track.urlfragments', 0)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('"page_path":location.pathname + location.search + location.hash});');
$this
->drupalGet('');
$this
->assertRaw('{"groups":"default"}');
$this
->config('google_analytics.settings')
->set('domain_mode', 1)
->save();
$this
->drupalGet('');
global $cookie_domain;
if (count(explode('.', $cookie_domain)) > 2 && !is_numeric(str_replace('.', '', $cookie_domain))) {
$this
->assertRaw('"cookie_domain":"' . $cookie_domain . '"');
}
else {
$this
->assertNoRaw('"cookie_domain":"' . $cookie_domain . '"');
}
$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();
$this
->config('google_analytics.settings')
->set('debug', 1)
->save();
$this
->drupalGet('');
$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(),
]));
$this
->config('google_analytics.settings')
->set('debug', 0)
->save();
$this
->drupalGet('');
$this
->assertRaw('https://www.googletagmanager.com/gtag/js?id=');
$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.");}');
}
}