Merge "Drop cache interwiki"
[mediawiki.git] / tests / phpunit / includes / specials / redirects / SpecialTalkPageTest.php
blob94dfa5f834a75f77705bac343dc59052a43a264c
1 <?php
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;
12 /**
13 * @covers \MediaWiki\Specials\Redirects\SpecialTalkPage
15 * @license GPL-2.0-or-later
17 class SpecialTalkPageTest extends MediaWikiIntegrationTestCase {
19 private function executeSpecialPageAndGetOutput(
20 string $subpage = '',
21 ?string $target = null
22 ): OutputPage {
23 $services = $this->getServiceContainer();
24 $context = new RequestContext();
25 if ( $target !== null ) {
26 $request = new FauxRequest( [ 'target' => $target ], true );
27 } else {
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(
69 $expectedHtml,
70 $output->getHTML(),
71 'should contain HTML'
74 $this->assertStringContainsString(
75 '<form',
76 $output->getHTML(),
77 'should contain form'
81 public function provideNoRedirects() {
82 yield [ '', null ];
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='&lt;&gt;'" ];