public function PiwikBasicTest::testPiwikTrackingCode in Piwik Web Analytics 8
Tests if tracking code is properly added to the page.
File
- src/
Tests/ PiwikBasicTest.php, line 146
Class
- PiwikBasicTest
- Test basic functionality of Piwik module.
Namespace
Drupal\piwik\TestsCode
public function testPiwikTrackingCode() {
$site_id = '2';
$this
->config('piwik.settings')
->set('site_id', $site_id)
->save();
$this
->config('piwik.settings')
->set('url_http', 'http://www.example.com/piwik/')
->save();
$this
->config('piwik.settings')
->set('url_https', 'https://www.example.com/piwik/')
->save();
// Show tracking code on every page except the listed pages.
$this
->config('piwik.settings')
->set('visibility.request_path_mode', 0)
->save();
// Enable tracking code for all user roles.
$this
->config('piwik.settings')
->set('visibility.user_role_roles', [])
->save();
/* Sample JS code as added to page:
<script type="text/javascript">
var _paq = _paq || [];
(function(){
var u=(("https:" == document.location.protocol) ? "https://{$PIWIK_URL}" : "http://{$PIWIK_URL}");
_paq.push(['setSiteId', {$IDSITE}]);
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['trackPageView']);
var d=document,
g=d.createElement('script'),
s=d.getElementsByTagName('script')[0];
g.type='text/javascript';
g.defer=true;
g.async=true;
g.src=u+'piwik.js';
s.parentNode.insertBefore(g,s);
})();
</script>
*/
// Test whether tracking code uses latest JS.
$this
->config('piwik.settings')
->set('cache', 0)
->save();
$this
->drupalGet('');
$this
->assertRaw('u+"piwik.php"', '[testPiwikTrackingCode]: Latest tracking code used.');
// Test if tracking of User ID is enabled.
$this
->config('piwik.settings')
->set('track.userid', 1)
->save();
$this
->drupalGet('');
$this
->assertRaw('_paq.push(["setUserId", ', '[testPiwikTrackingCode]: Tracking code for User ID is enabled.');
// Test if tracking of User ID is disabled.
$this
->config('piwik.settings')
->set('track.userid', 0)
->save();
$this
->drupalGet('');
$this
->assertNoRaw('_paq.push(["setUserId", ', '[testPiwikTrackingCode]: Tracking code for User ID is disabled.');
// Test whether single domain tracking is active.
$this
->drupalGet('');
$this
->assertNoRaw('_paq.push(["setCookieDomain"', '[testPiwikTrackingCode]: Single domain tracking is active.');
// Enable "One domain with multiple subdomains".
$this
->config('piwik.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('_paq.push(["setCookieDomain"', '[testPiwikTrackingCode]: One domain with multiple subdomains is active on real host.');
}
else {
// Special cases, Localhost and IP addresses don't show 'setCookieDomain'.
$this
->assertNoRaw('_paq.push(["setCookieDomain"', '[testPiwikTrackingCode]: One domain with multiple subdomains may be active on localhost (test result is not reliable).');
}
// Test whether the BEFORE and AFTER code is added to the tracker.
$this
->config('piwik.settings')
->set('codesnippet.before', '_paq.push(["setLinkTrackingTimer", 250]);')
->save();
$this
->config('piwik.settings')
->set('codesnippet.after', '_paq.push(["t2.setSiteId", 2]);if(1 == 1 && 2 < 3 && 2 > 1){console.log("Piwik: Custom condition works.");}_gaq.push(["t2.trackPageView"]);')
->save();
$this
->drupalGet('');
$this
->assertRaw('setLinkTrackingTimer', '[testPiwikTrackingCode]: Before codesnippet has been found with "setLinkTrackingTimer" set.');
$this
->assertRaw('t2.trackPageView', '[testPiwikTrackingCode]: After codesnippet with "t2" tracker has been found.');
$this
->assertRaw('if(1 == 1 && 2 < 3 && 2 > 1){console.log("Piwik: Custom condition works.");}', '[testPiwikTrackingCode]: JavaScript code is not HTML escaped.');
}