3 namespace MediaWiki\Tests\Integration\Specials\Redirects
;
5 use MediaWiki\Context\RequestContext
;
6 use MediaWiki\Output\OutputPage
;
7 use MediaWiki\Request\FauxRequest
;
8 use MediaWiki\Specials\Redirects\SpecialTalkPage
;
9 use MediaWiki\Title\Title
;
10 use MediaWikiIntegrationTestCase
;
13 * @covers \MediaWiki\Specials\Redirects\SpecialTalkPage
15 * @license GPL-2.0-or-later
17 class SpecialTalkPageTest
extends MediaWikiIntegrationTestCase
{
19 private function executeSpecialPageAndGetOutput(
21 ?
string $target = null
23 $services = $this->getServiceContainer();
24 $context = new RequestContext();
25 if ( $target !== null ) {
26 $request = new FauxRequest( [ 'target' => $target ], true );
28 $request = new FauxRequest();
30 $context->setRequest( $request );
31 $context->setTitle( Title
::newFromText( 'Special:TalkPage' ) );
32 $context->setLanguage( $services->getLanguageFactory()->getLanguage( 'qqx' ) );
33 $page = new SpecialTalkPage( $services->getMainConfig(), $services->getTitleParser() );
34 $page->setContext( $context );
36 $page->execute( $subpage );
38 return $page->getOutput();
41 /** @dataProvider provideRedirects */
42 public function testRedirect( $subpage, $target, $expectedUrl, $expectedRedirect ) {
43 $output = $this->executeSpecialPageAndGetOutput( $subpage, $target );
45 $this->assertSame( $expectedUrl, $output->getRedirect(), 'should redirect to URL' );
47 $this->assertHTMLEquals( $expectedRedirect, $output->getHTML(), 'redirect should contain appropriate HTML' );
50 public function provideRedirects() {
51 $subjectTitleText = 'MediaWiki:ok';
52 $subjectTitle = Title
::newFromText( $subjectTitleText );
53 $talkTitle = $subjectTitle->getTalkPageIfDefined();
54 $talkUrl = $talkTitle->getFullUrlForRedirect();
56 $standardRedirectHTML = "<div class=\"mw-specialpage-summary\">\n<p>(talkpage-summary)\n</p>\n</div>";
58 yield
[ $subjectTitleText, null, $talkUrl, $standardRedirectHTML ];
59 yield
[ '', $subjectTitleText, $talkUrl, $standardRedirectHTML ];
62 /** @dataProvider provideNoRedirects */
63 public function testNoRedirect( $subpage, $target, ...$expectedHtmls ) {
64 $output = $this->executeSpecialPageAndGetOutput( $subpage, $target );
66 $this->assertSame( '', $output->getRedirect(), 'should not redirect' );
67 foreach ( $expectedHtmls as $expectedHtml ) {
68 $this->assertStringContainsString(
74 $this->assertStringContainsString(
81 public function provideNoRedirects() {
83 yield
[ 'Special:TalkPage', null, 'title-invalid-talk-namespace', "value='Special:TalkPage'" ];
84 yield
[ '', 'Special:TalkPage', 'title-invalid-talk-namespace', "value='Special:TalkPage'" ];
85 yield
[ '', '<>', 'title-invalid-characters', "value='<>'" ];