%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/extensions/googleAnalytics/tests/ |
| Current File : //www/varak.net/wiki.varak.net/extensions/googleAnalytics/tests/GoogleAnalyticsHooksTest.php |
<?php
/**
* @covers GoogleAnalyticsHooks
*/
class GoogleAnalyticsHooksTest extends MediaWikiLangTestCase {
public function setUp() {
parent::setUp();
$this->setMwGlobals( 'wgGoogleAnalyticsAccount', '' );
}
/**
* @param $allowed
* @return Skin
*/
private function mockSkin( $allowed, $title = 'Main Page' ) {
$skin = $this->getMockBuilder( 'SkinFallback' )
->disableOriginalConstructor()
->setMethods( array( 'getUser', 'getTitle' ) )
->getMock();
$user = $this->getMockBuilder( 'User' )
->disableOriginalConstructor()
->setMethods( array( 'isAllowed' ) )
->getMock();
$user->expects( $this->any() )
->method( 'isAllowed' )
->will( $this->returnValue( $allowed ) );
$skin
->expects( $this->any() )
->method( 'getUser' )
->will( $this->returnValue( $user ) );
$skin->expects( $this->any() )
->method( 'getTitle' )
->will( $this->returnValue( Title::newFromText( $title ) ) );
return $skin;
}
/**
* @dataProvider provideUserPermissions
*/
public function testUserPermissions( $allowed, $expected ) {
$text = '';
GoogleAnalyticsHooks::onSkinAfterBottomScripts( $this->mockSkin( $allowed ), $text );
$this->assertContains( $expected, $text );
}
public static function provideUserPermissions() {
return array(
array( false, 'No web analytics configured' ),
array( true, 'Web analytics code inclusion is disabled for this user' ),
);
}
public function testAccountIdSet() {
$this->setMwGlobals( 'wgGoogleAnalyticsAccount', 'foobarbaz' );
$text = '';
GoogleAnalyticsHooks::onSkinAfterBottomScripts( $this->mockSkin( false ), $text );
$this->assertContains( 'www.google-analytics.com/analytics.js', $text );
$this->assertContains( 'foobarbaz', $text );
$this->setMwGlobals( 'wgGoogleAnalyticsAccount', '' );
GoogleAnalyticsHooks::onSkinAfterBottomScripts( $this->mockSkin( false ), $text );
$this->assertContains( 'No web analytics configured', $text );
$this->setMwGlobals( 'wgGoogleAnalyticsOtherCode', 'analytics.example.com/foo.js' );
GoogleAnalyticsHooks::onSkinAfterBottomScripts( $this->mockSkin( false ), $text );
$this->assertContains( 'analytics.example.com/foo.js', $text );
}
public function testAnonymizeIp() {
$this->setMwGlobals( 'wgGoogleAnalyticsAccount', 'foobarbaz' );
$text = '';
GoogleAnalyticsHooks::onSkinAfterBottomScripts( $this->mockSkin( false ), $text );
$this->assertContains( 'anonymizeIp', $text );
$this->setMwGlobals( 'wgGoogleAnalyticsAnonymizeIP', false );
$text = '';
GoogleAnalyticsHooks::onSkinAfterBottomScripts( $this->mockSkin( false ), $text );
$this->assertNotContains( 'anonymizeIp', $text );
}
/**
* @dataProvider provideExcludedPages
*/
public function testExcludedPages( $type, $conf, $title, $include ) {
$this->setMwGlobals( $type, array( $conf ) );
$text = '';
GoogleAnalyticsHooks::onSkinAfterBottomScripts( $this->mockSkin( false, $title ), $text );
if ( $include ) {
$this->assertContains( 'No web analytics configured', $text );
} else {
$this->assertContains( 'Web analytics code inclusion is disabled for this page', $text );
}
}
public static function provideExcludedPages() {
return array(
array( 'wgGoogleAnalyticsIgnoreSpecials', 'Preferences', 'Special:Preferences', false ),
array( 'wgGoogleAnalyticsIgnoreSpecials', 'Userlogout', 'Special:Preferences', true ),
array( 'wgGoogleAnalyticsIgnoreNsIDs', NS_HELP, 'Help:FooBar', false ),
array( 'wgGoogleAnalyticsIgnoreNsIDs', NS_MAIN, 'Help:FooBar', true ),
array( 'wgGoogleAnalyticsIgnorePages', 'Help:FooBar', 'Help:FooBar', false ),
array( 'wgGoogleAnalyticsIgnorePages', 'Help:FooBar', 'Help:FooBarBaz', true ),
);
}
}