2024-03-27 23:49:39 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace MediaWiki\Skins\Vector\Tests\Integration;
|
|
|
|
|
2024-06-10 20:28:24 +00:00
|
|
|
use MediaWiki\Context\RequestContext;
|
2024-05-16 04:23:41 +00:00
|
|
|
use MediaWiki\Request\FauxRequest;
|
2024-03-27 23:49:39 +00:00
|
|
|
use MediaWiki\Skins\Vector\ConfigHelper;
|
2024-06-10 20:28:24 +00:00
|
|
|
use MediaWiki\Title\Title;
|
2024-03-27 23:49:39 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @coversDefaultClass \MediaWiki\Skins\Vector\ConfigHelper
|
|
|
|
*/
|
|
|
|
class ConfigHelperTest extends \MediaWikiIntegrationTestCase {
|
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable when config is empty
|
|
|
|
*/
|
|
|
|
public function testShouldDisableEmpty() {
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
|
|
|
|
$this->assertFalse( ConfigHelper::shouldDisable( [], $request ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function provideShouldDisableMainPage() {
|
|
|
|
return [
|
|
|
|
[ true ], [ false ]
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider provideShouldDisableMainPage
|
|
|
|
* @covers ::shouldDisable for the main page
|
|
|
|
*/
|
|
|
|
public function testShouldDisableMainPage( $disable ) {
|
|
|
|
$config = [ 'exclude' => [ 'mainpage' => $disable ] ];
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$title = Title::makeTitle( NS_MAIN, 'Main Page' );
|
|
|
|
|
|
|
|
$this->assertSame( ConfigHelper::shouldDisable( $config, $request, $title ), $disable );
|
|
|
|
}
|
|
|
|
|
2024-05-16 04:23:41 +00:00
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable for the main page
|
|
|
|
*/
|
|
|
|
public function testShouldDisableMainPageWithQueryString() {
|
|
|
|
$config = [
|
|
|
|
'exclude' => [
|
|
|
|
'mainpage' => false,
|
|
|
|
'querystring' => [
|
|
|
|
'diff' => '*',
|
|
|
|
]
|
|
|
|
],
|
|
|
|
];
|
|
|
|
$request = new FauxRequest( [
|
|
|
|
'title' => 'Main_Page',
|
|
|
|
'diff' => '1223300368',
|
|
|
|
'oldid' => '1212457119',
|
|
|
|
] );
|
|
|
|
$title = Title::makeTitle( NS_MAIN, 'Main_Page' );
|
|
|
|
|
|
|
|
$this->assertSame( true, ConfigHelper::shouldDisable( $config, $request, $title ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable page title exclusion
|
|
|
|
*/
|
|
|
|
public function testShouldDisablePageTitlesRespectCase() {
|
|
|
|
$config = [ 'exclude' => [ 'pagetitles' => [ 'Special:AbuseLog' ] ] ];
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$title = Title::makeTitle( NS_MAIN, 'Special:AbuseLog' );
|
|
|
|
|
|
|
|
$this->assertTrue( ConfigHelper::shouldDisable( $config, $request, $title ), true );
|
|
|
|
}
|
|
|
|
|
2024-03-27 23:49:39 +00:00
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable for the main page when mainpage is not present in the config
|
|
|
|
*/
|
|
|
|
public function testShouldDisableMainPageImplicit() {
|
|
|
|
$config = [ 'exclude' => [ 'pagetitles' => [ 'Main Page' ] ] ];
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$title = Title::makeTitle( NS_MAIN, 'Main Page' );
|
|
|
|
|
|
|
|
$this->assertFalse( ConfigHelper::shouldDisable( $config, $request, $title ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable inclusion
|
|
|
|
*/
|
|
|
|
public function testShouldDisableInclude() {
|
|
|
|
$config = [ 'exclude' => [ 'pagetitles' => [ 'test' ] ], 'include' => [ 'test' ] ];
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$title = Title::makeTitle( NS_MAIN, 'test' );
|
|
|
|
|
|
|
|
$this->assertFalse( ConfigHelper::shouldDisable( $config, $request, $title ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable page title exclusion
|
|
|
|
*/
|
|
|
|
public function testShouldDisablePageTitles() {
|
|
|
|
$config = [ 'exclude' => [ 'pagetitles' => [ 'test' ] ] ];
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$title = Title::makeTitle( NS_MAIN, 'test' );
|
|
|
|
|
|
|
|
$this->assertTrue( ConfigHelper::shouldDisable( $config, $request, $title ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable namespace exclusion
|
|
|
|
*/
|
|
|
|
public function testShouldDisableNamespaces() {
|
|
|
|
$config = [ 'exclude' => [ 'namespaces' => [ NS_SPECIAL ] ] ];
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$title = Title::makeTitle( NS_SPECIAL, 'test' );
|
|
|
|
|
|
|
|
$this->assertTrue( ConfigHelper::shouldDisable( $config, $request, $title ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable query string exclusion
|
|
|
|
*/
|
|
|
|
public function testShouldDisableQueryString() {
|
|
|
|
$config = [ 'exclude' => [ 'querystring' => [ 'action' => 'test' ] ] ];
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$title = Title::makeTitle( NS_MAIN, 'test' );
|
|
|
|
|
|
|
|
$request->setVal( 'action', 'aaatestaaa' );
|
|
|
|
|
|
|
|
$this->assertTrue( ConfigHelper::shouldDisable( $config, $request, $title ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable query string exclusion using regex
|
|
|
|
*/
|
|
|
|
public function testShouldDisableQueryStringRegex() {
|
|
|
|
$config = [ 'exclude' => [ 'querystring' => [ 'action' => 'a+b.c' ] ] ];
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$title = Title::makeTitle( NS_MAIN, 'test' );
|
|
|
|
|
|
|
|
$request->setVal( 'action', 'aaaabbc' );
|
|
|
|
|
|
|
|
$this->assertTrue( ConfigHelper::shouldDisable( $config, $request, $title ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers ::shouldDisable query string exclusion using wildcard
|
|
|
|
*/
|
|
|
|
public function testShouldDisableQueryStringWildcard() {
|
|
|
|
$config = [ 'exclude' => [ 'querystring' => [ 'action' => '*' ] ] ];
|
|
|
|
$request = RequestContext::getMain()->getRequest();
|
|
|
|
$title = Title::makeTitle( NS_MAIN, 'test' );
|
|
|
|
|
|
|
|
$request->setVal( 'action', 'test' );
|
|
|
|
|
|
|
|
$this->assertTrue( ConfigHelper::shouldDisable( $config, $request, $title ) );
|
|
|
|
}
|
|
|
|
}
|