wiki.techinc.nl/tests/phpunit/includes/specials/SpecialWatchlistTest.php
Umherirrender 6c41df61e9 tests: Use namespaced classes (1)
Changes to the use statements done automatically via script
Addition of missing use statement done manually

Change-Id: Iae45fa269363be8ee05c598ea6926514ce817762
2024-06-14 17:19:36 +00:00

209 lines
5.2 KiB
PHP

<?php
use MediaWiki\Context\DerivativeContext;
use MediaWiki\HookContainer\HookContainer;
use MediaWiki\MainConfigNames;
use MediaWiki\Request\FauxRequest;
use MediaWiki\Specials\SpecialWatchlist;
use Wikimedia\TestingAccessWrapper;
/**
* @author Addshore
*
* @group Database
*
* @covers \MediaWiki\Specials\SpecialWatchlist
*/
class SpecialWatchlistTest extends SpecialPageTestBase {
protected function setUp(): void {
parent::setUp();
$this->setTemporaryHook(
'ChangesListSpecialPageQuery',
HookContainer::NOOP
);
$this->overrideConfigValues( [
MainConfigNames::DefaultUserOptions =>
[
'extendwatchlist' => 1,
'watchlistdays' => 3.0,
'watchlisthideanons' => 0,
'watchlisthidebots' => 0,
'watchlisthideliu' => 0,
'watchlisthideminor' => 0,
'watchlisthideown' => 0,
'watchlisthidepatrolled' => 1,
'watchlisthidecategorization' => 0,
'watchlistreloadautomatically' => 0,
'watchlistunwatchlinks' => 0,
'timecorrection' => '0'
],
MainConfigNames::WatchlistExpiry => true
] );
}
/**
* Returns a new instance of the special page under test.
*
* @return SpecialWatchlist
*/
protected function newSpecialPage() {
$services = $this->getServiceContainer();
return new SpecialWatchlist(
$services->getWatchedItemStore(),
$services->getWatchlistManager(),
$services->getUserOptionsLookup(),
$services->getChangeTagsStore(),
$services->getUserIdentityUtils(),
$services->getTempUserConfig()
);
}
public function testNotLoggedIn_throwsException() {
$this->expectException( UserNotLoggedIn::class );
$this->executeSpecialPage();
}
public function testUserWithNoWatchedItems_displaysNoWatchlistMessage() {
$user = new TestUser( __METHOD__ );
[ $html, ] = $this->executeSpecialPage( '', null, 'qqx', $user->getUser() );
$this->assertStringContainsString( '(nowatchlist)', $html );
}
/**
* @dataProvider provideFetchOptionsFromRequest
*/
public function testFetchOptionsFromRequest(
$expectedValuesDefaults, $expectedValues, $preferences, $inputParams
) {
// $defaults and $allFalse are just to make the expected values below
// shorter by hiding the background.
/** @var SpecialWatchlist $page */
$page = TestingAccessWrapper::newFromObject(
$this->newSpecialPage()
);
$page->registerFilters();
// Does not consider $preferences, just wiki's defaults
$wikiDefaults = $page->getDefaultOptions()->getAllValues();
switch ( $expectedValuesDefaults ) {
case 'allFalse':
$allFalse = $wikiDefaults;
foreach ( $allFalse as $key => $value ) {
if ( $value === true ) {
$allFalse[$key] = false;
}
}
// This is not exposed on the form (only in preferences) so it
// respects the preference.
$allFalse['extended'] = true;
$expectedValues += $allFalse;
break;
case 'wikiDefaults':
$expectedValues += $wikiDefaults;
break;
default:
$this->fail( "Unknown \$expectedValuesDefaults: $expectedValuesDefaults" );
}
$page = TestingAccessWrapper::newFromObject(
$this->newSpecialPage()
);
$context = new DerivativeContext( $page->getContext() );
$fauxRequest = new FauxRequest( $inputParams, /* $wasPosted= */ false );
$user = $this->getTestUser()->getUser();
$userOptionsManager = $this->getServiceContainer()->getUserOptionsManager();
foreach ( $preferences as $key => $value ) {
$userOptionsManager->setOption( $user, $key, $value );
}
$context->setRequest( $fauxRequest );
$context->setUser( $user );
$page->setContext( $context );
$page->registerFilters();
$formOptions = $page->getDefaultOptions();
$page->fetchOptionsFromRequest( $formOptions );
$this->assertArrayEquals(
$expectedValues,
$formOptions->getAllValues(),
/* $ordered= */ false,
/* $named= */ true
);
}
public static function provideFetchOptionsFromRequest() {
return [
'ignores casing' => [
'expectedValuesDefaults' => 'wikiDefaults',
'expectedValues' => [
'hideminor' => true,
],
'preferences' => [],
'inputParams' => [
'hideMinor' => 1,
],
],
'first two same as prefs, second two overridden' => [
'expectedValuesDefaults' => 'wikiDefaults',
'expectedValues' => [
// First two same as prefs
'hideminor' => true,
'hidebots' => false,
// Second two overridden
'hideanons' => false,
'hideliu' => true,
'userExpLevel' => 'registered'
],
'preferences' => [
'watchlisthideminor' => 1,
'watchlisthidebots' => 0,
'watchlisthideanons' => 1,
'watchlisthideliu' => 0,
],
'inputParams' => [
'hideanons' => 0,
'hideliu' => 1,
],
],
'Defaults/preferences for form elements are entirely ignored for '
. 'action=submit and omitted elements become false' => [
'expectedValuesDefaults' => 'allFalse',
'expectedValues' => [
'hideminor' => false,
'hidebots' => true,
'hideanons' => false,
'hideliu' => true,
'userExpLevel' => 'unregistered'
],
'preferences' => [
'watchlisthideminor' => 0,
'watchlisthidebots' => 1,
'watchlisthideanons' => 0,
'watchlisthideliu' => 1,
],
'inputParams' => [
'hidebots' => 1,
'hideliu' => 1,
'action' => 'submit',
],
],
];
}
}