X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fspecialpage%2FAbstractChangesListSpecialPageTestCase.php;h=04b12e6378e9509741bc171490cfbad60988dca8;hb=9a6f63cd8c68cfab3ca7f34b096eef5652900072;hp=03e341afeb282cd29d0e6a3764f504291b349146;hpb=e0b6258185e05cfc20c7b084bb8e9af650196cda;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/specialpage/AbstractChangesListSpecialPageTestCase.php b/tests/phpunit/includes/specialpage/AbstractChangesListSpecialPageTestCase.php index 03e341afeb..04b12e6378 100644 --- a/tests/phpunit/includes/specialpage/AbstractChangesListSpecialPageTestCase.php +++ b/tests/phpunit/includes/specialpage/AbstractChangesListSpecialPageTestCase.php @@ -19,7 +19,10 @@ abstract class AbstractChangesListSpecialPageTestCase extends MediaWikiTestCase global $wgGroupPermissions; parent::setUp(); - $this->setMwGlobals( 'wgRCWatchCategoryMembership', true ); + $this->setMwGlobals( [ + 'wgRCWatchCategoryMembership' => true, + 'wgUseRCPatrol' => true, + ] ); if ( isset( $wgGroupPermissions['patrollers'] ) ) { $this->oldPatrollersGroup = $wgGroupPermissions['patrollers']; @@ -28,6 +31,20 @@ abstract class AbstractChangesListSpecialPageTestCase extends MediaWikiTestCase $wgGroupPermissions['patrollers'] = [ 'patrol' => true, ]; + + // Deprecated + $this->setTemporaryHook( + 'ChangesListSpecialPageFilters', + null + ); + + # setup the ChangesListSpecialPage (or subclass) object + $this->changesListSpecialPage = $this->getPage(); + $context = $this->changesListSpecialPage->getContext(); + $context = new DerivativeContext( $context ); + $context->setUser( $this->getTestUser( [ 'patrollers' ] )->getUser() ); + $this->changesListSpecialPage->setContext( $context ); + $this->changesListSpecialPage->registerFilters(); } protected function tearDown() { @@ -44,13 +61,6 @@ abstract class AbstractChangesListSpecialPageTestCase extends MediaWikiTestCase * @dataProvider provideParseParameters */ public function testParseParameters( $params, $expected ) { - $context = $this->changesListSpecialPage->getContext(); - $context = new DerivativeContext( $context ); - $context->setUser( $this->getTestUser( [ 'patrollers' ] )->getUser() ); - $this->changesListSpecialPage->setContext( $context ); - - $this->changesListSpecialPage->registerFilters(); - $opts = new FormOptions(); foreach ( $expected as $key => $value ) { // Register it as null so sets aren't rejected. @@ -73,4 +83,65 @@ abstract class AbstractChangesListSpecialPageTestCase extends MediaWikiTestCase /** named= */ true ); } + + /** + * @dataProvider validateOptionsProvider + */ + public function testValidateOptions( $optionsToSet, $expectedRedirect, $expectedRedirectOptions ) { + $redirectQuery = []; + $redirected = false; + $output = $this->getMockBuilder( OutputPage::class ) + ->disableProxyingToOriginalMethods() + ->disableOriginalConstructor() + ->getMock(); + $output->method( 'redirect' )->willReturnCallback( + function ( $url ) use ( &$redirectQuery, &$redirected ) { + $urlParts = wfParseUrl( $url ); + $query = isset( $urlParts[ 'query' ] ) ? $urlParts[ 'query' ] : ''; + parse_str( $query, $redirectQuery ); + $redirected = true; + } + ); + $ctx = new RequestContext(); + + // Give users patrol permissions so we can test that. + $user = $this->getTestSysop()->getUser(); + $ctx->setUser( $user ); + + // Disable this hook or it could break changeType + // depending on which other extensions are running. + $this->setTemporaryHook( + 'ChangesListSpecialPageStructuredFilters', + null + ); + + $ctx->setOutput( $output ); + $clsp = $this->changesListSpecialPage; + $clsp->setContext( $ctx ); + $opts = $clsp->getDefaultOptions(); + + foreach ( $optionsToSet as $option => $value ) { + $opts->setValue( $option, $value ); + } + + $clsp->validateOptions( $opts ); + + $this->assertEquals( $expectedRedirect, $redirected, 'redirection' ); + + if ( $expectedRedirect ) { + if ( count( $expectedRedirectOptions ) > 0 ) { + $expectedRedirectOptions += [ + 'title' => $clsp->getPageTitle()->getPrefixedText(), + ]; + } + + $this->assertArrayEquals( + $expectedRedirectOptions, + $redirectQuery, + /* $ordered= */ false, + /* $named= */ true, + 'redirection query' + ); + } + } }