Move IDatabase/IMaintainableDatabase to Rdbms namespace
[lhc/web/wiklou.git] / tests / phpunit / includes / resourceloader / ResourceLoaderWikiModuleTest.php
index a332528..5cab8e2 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
+
 class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
 
        /**
@@ -214,6 +217,50 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                $module = TestingAccessWrapper::newFromObject( $module );
                $this->assertEquals( $expected, $module->getTitleInfo( $context ), 'Title info' );
        }
+
+       /**
+        * @covers ResourceLoaderWikiModule::getContent
+        */
+       public function testGetContentForRedirects() {
+               // Set up context and module object
+               $context = $this->getResourceLoaderContext( [], new EmptyResourceLoader );
+               $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
+                       ->setMethods( [ 'getPages', 'getContentObj' ] )
+                       ->getMock();
+               $module->expects( $this->any() )
+                       ->method( 'getPages' )
+                       ->will( $this->returnValue( [
+                               'MediaWiki:Redirect.js' => [ 'type' => 'script' ]
+                       ] ) );
+               $module->expects( $this->any() )
+                       ->method( 'getContentObj' )
+                       ->will( $this->returnCallback( function ( Title $title ) {
+                               if ( $title->getPrefixedText() === 'MediaWiki:Redirect.js' ) {
+                                       $handler = new JavaScriptContentHandler();
+                                       return $handler->makeRedirectContent(
+                                               Title::makeTitle( NS_MEDIAWIKI, 'Target.js' )
+                                       );
+                               } elseif ( $title->getPrefixedText() === 'MediaWiki:Target.js' ) {
+                                       return new JavaScriptContent( 'target;' );
+                               } else {
+                                       return null;
+                               }
+                       } ) );
+
+               // Mock away Title's db queries with LinkCache
+               MediaWikiServices::getInstance()->getLinkCache()->addGoodLinkObj(
+                       1, // id
+                       new TitleValue( NS_MEDIAWIKI, 'Redirect.js' ),
+                       1, // len
+                       1 // redirect
+               );
+
+               $this->assertEquals(
+                       "/*\nMediaWiki:Redirect.js\n*/\ntarget;\n",
+                       $module->getScript( $context ),
+                       'Redirect resolved by getContent'
+               );
+       }
 }
 
 class TestResourceLoaderWikiModule extends ResourceLoaderWikiModule {