+
+ public function testSpecialRedirects() {
+ $id1 = self::editPage( 'UTApiPageSet', 'UTApiPageSet in the default language' )
+ ->value['revision']->getTitle()->getArticleID();
+ $id2 = self::editPage( 'UTApiPageSet/de', 'UTApiPageSet in German' )
+ ->value['revision']->getTitle()->getArticleID();
+
+ $user = $this->getTestUser()->getUser();
+ $userName = $user->getName();
+ $userDbkey = str_replace( ' ', '_', $userName );
+ $request = new FauxRequest( [
+ 'titles' => join( '|', [
+ 'Special:MyContributions',
+ 'Special:MyPage',
+ 'Special:MyTalk/subpage',
+ 'Special:MyLanguage/UTApiPageSet',
+ ] ),
+ ] );
+ $context = new RequestContext();
+ $context->setRequest( $request );
+ $context->setUser( $user );
+
+ $main = new ApiMain( $context );
+ $pageSet = new ApiPageSet( $main );
+ $pageSet->execute();
+
+ $this->assertEquals( [
+ ], $pageSet->getRedirectTitlesAsResult() );
+ $this->assertEquals( [
+ [ 'ns' => -1, 'title' => 'Special:MyContributions', 'special' => true ],
+ [ 'ns' => -1, 'title' => 'Special:MyPage', 'special' => true ],
+ [ 'ns' => -1, 'title' => 'Special:MyTalk/subpage', 'special' => true ],
+ [ 'ns' => -1, 'title' => 'Special:MyLanguage/UTApiPageSet', 'special' => true ],
+ ], $pageSet->getInvalidTitlesAndRevisions() );
+ $this->assertEquals( [
+ ], $pageSet->getAllTitlesByNamespace() );
+
+ $request->setVal( 'redirects', 1 );
+ $main = new ApiMain( $context );
+ $pageSet = new ApiPageSet( $main );
+ $pageSet->execute();
+
+ $this->assertEquals( [
+ [ 'from' => 'Special:MyPage', 'to' => "User:$userName" ],
+ [ 'from' => 'Special:MyTalk/subpage', 'to' => "User talk:$userName/subpage" ],
+ [ 'from' => 'Special:MyLanguage/UTApiPageSet', 'to' => 'UTApiPageSet' ],
+ ], $pageSet->getRedirectTitlesAsResult() );
+ $this->assertEquals( [
+ [ 'ns' => -1, 'title' => 'Special:MyContributions', 'special' => true ],
+ [ 'ns' => 2, 'title' => "User:$userName", 'missing' => true ],
+ [ 'ns' => 3, 'title' => "User talk:$userName/subpage", 'missing' => true ],
+ ], $pageSet->getInvalidTitlesAndRevisions() );
+ $this->assertEquals( [
+ 0 => [ 'UTApiPageSet' => $id1 ],
+ 2 => [ $userDbkey => -2 ],
+ 3 => [ "$userDbkey/subpage" => -3 ],
+ ], $pageSet->getAllTitlesByNamespace() );
+
+ $context->setLanguage( 'de' );
+ $main = new ApiMain( $context );
+ $pageSet = new ApiPageSet( $main );
+ $pageSet->execute();
+
+ $this->assertEquals( [
+ [ 'from' => 'Special:MyPage', 'to' => "User:$userName" ],
+ [ 'from' => 'Special:MyTalk/subpage', 'to' => "User talk:$userName/subpage" ],
+ [ 'from' => 'Special:MyLanguage/UTApiPageSet', 'to' => 'UTApiPageSet/de' ],
+ ], $pageSet->getRedirectTitlesAsResult() );
+ $this->assertEquals( [
+ [ 'ns' => -1, 'title' => 'Special:MyContributions', 'special' => true ],
+ [ 'ns' => 2, 'title' => "User:$userName", 'missing' => true ],
+ [ 'ns' => 3, 'title' => "User talk:$userName/subpage", 'missing' => true ],
+ ], $pageSet->getInvalidTitlesAndRevisions() );
+ $this->assertEquals( [
+ 0 => [ 'UTApiPageSet/de' => $id2 ],
+ 2 => [ $userDbkey => -2 ],
+ 3 => [ "$userDbkey/subpage" => -3 ],
+ ], $pageSet->getAllTitlesByNamespace() );
+ }