mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/Vector.git
synced 2024-11-23 23:33:54 +00:00
Correct behaviour of ConfigHelper, add tests
- Cherry-picked for back-port purposes Bug: T365084 Change-Id: I220990554d0a07642dd03a0c7bd53f9bd7ff55ec
This commit is contained in:
parent
9995bcdf12
commit
fb73253c85
|
@ -38,6 +38,18 @@ class ConfigHelper {
|
||||||
$exclusions = $options[ 'exclude' ] ?? [];
|
$exclusions = $options[ 'exclude' ] ?? [];
|
||||||
$inclusions = $options['include'] ?? [];
|
$inclusions = $options['include'] ?? [];
|
||||||
|
|
||||||
|
$excludeQueryString = $exclusions[ 'querystring' ] ?? [];
|
||||||
|
foreach ( $excludeQueryString as $param => $excludedParamPattern ) {
|
||||||
|
$paramValue = $request->getRawVal( $param );
|
||||||
|
if ( $paramValue !== null ) {
|
||||||
|
if ( $excludedParamPattern === '*' ) {
|
||||||
|
// Backwards compatibility for the '*' wildcard.
|
||||||
|
$excludedParamPattern = '.+';
|
||||||
|
}
|
||||||
|
return (bool)preg_match( "/$excludedParamPattern/", $paramValue );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( $title != null && $title->isMainPage() ) {
|
if ( $title != null && $title->isMainPage() ) {
|
||||||
// only one check to make
|
// only one check to make
|
||||||
return $exclusions[ 'mainpage' ] ?? false;
|
return $exclusions[ 'mainpage' ] ?? false;
|
||||||
|
@ -70,7 +82,6 @@ class ConfigHelper {
|
||||||
foreach ( $pageTitles as $titleText ) {
|
foreach ( $pageTitles as $titleText ) {
|
||||||
// use strtolower to make sure the config passed for special pages
|
// use strtolower to make sure the config passed for special pages
|
||||||
// is case insensitive, so it does not generate a wrong special page title
|
// is case insensitive, so it does not generate a wrong special page title
|
||||||
$titleText = $canonicalTitle->isSpecialPage() ? strtolower( $titleText ) : $titleText;
|
|
||||||
$excludedTitle = Title::newFromText( $titleText );
|
$excludedTitle = Title::newFromText( $titleText );
|
||||||
|
|
||||||
if ( $canonicalTitle != null && $canonicalTitle->equals( $excludedTitle ) ) {
|
if ( $canonicalTitle != null && $canonicalTitle->equals( $excludedTitle ) ) {
|
||||||
|
@ -87,18 +98,6 @@ class ConfigHelper {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$excludeQueryString = $exclusions[ 'querystring' ] ?? [];
|
|
||||||
foreach ( $excludeQueryString as $param => $excludedParamPattern ) {
|
|
||||||
$paramValue = $request->getRawVal( $param );
|
|
||||||
if ( $paramValue !== null ) {
|
|
||||||
if ( $excludedParamPattern === '*' ) {
|
|
||||||
// Backwards compatibility for the '*' wildcard.
|
|
||||||
$excludedParamPattern = '.+';
|
|
||||||
}
|
|
||||||
return (bool)preg_match( "/$excludedParamPattern/", $paramValue );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace MediaWiki\Skins\Vector\Tests\Integration;
|
namespace MediaWiki\Skins\Vector\Tests\Integration;
|
||||||
|
|
||||||
|
use MediaWiki\Request\FauxRequest;
|
||||||
use MediaWiki\Skins\Vector\ConfigHelper;
|
use MediaWiki\Skins\Vector\ConfigHelper;
|
||||||
use RequestContext;
|
use RequestContext;
|
||||||
use Title;
|
use Title;
|
||||||
|
@ -37,6 +38,39 @@ class ConfigHelperTest extends \MediaWikiIntegrationTestCase {
|
||||||
$this->assertSame( ConfigHelper::shouldDisable( $config, $request, $title ), $disable );
|
$this->assertSame( ConfigHelper::shouldDisable( $config, $request, $title ), $disable );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers ::shouldDisable for the main page when mainpage is not present in the config
|
* @covers ::shouldDisable for the main page when mainpage is not present in the config
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -283,7 +283,7 @@ class VectorHooksTest extends MediaWikiIntegrationTestCase {
|
||||||
),
|
),
|
||||||
Title::makeTitle( NS_SPECIAL, 'Specialpages' ),
|
Title::makeTitle( NS_SPECIAL, 'Specialpages' ),
|
||||||
[ 'action' => 'history' ],
|
[ 'action' => 'history' ],
|
||||||
false
|
true
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'Max width can be disabled on talk pages',
|
'Max width can be disabled on talk pages',
|
||||||
|
|
Loading…
Reference in a new issue