Use ::class to resolve class names in tests
[lhc/web/wiklou.git] / tests / phpunit / includes / resourceloader / ResourceLoaderWikiModuleTest.php
index 5cab8e2..0aa37d2 100644 (file)
@@ -2,6 +2,7 @@
 
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\TestingAccessWrapper;
 
 class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
 
@@ -11,7 +12,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
         */
        public function testConstructor( $params ) {
                $module = new ResourceLoaderWikiModule( $params );
-               $this->assertInstanceOf( 'ResourceLoaderWikiModule', $module );
+               $this->assertInstanceOf( ResourceLoaderWikiModule::class, $module );
        }
 
        public static function provideConstructor() {
@@ -96,7 +97,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
         * @dataProvider provideIsKnownEmpty
         */
        public function testIsKnownEmpty( $titleInfo, $group, $expected ) {
-               $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
+               $module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
                        ->setMethods( [ 'getTitleInfo', 'getGroup' ] )
                        ->getMock();
                $module->expects( $this->any() )
@@ -105,7 +106,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                $module->expects( $this->any() )
                        ->method( 'getGroup' )
                        ->will( $this->returnValue( $group ) );
-               $context = $this->getMockBuilder( 'ResourceLoaderContext' )
+               $context = $this->getMockBuilder( ResourceLoaderContext::class )
                        ->disableOriginalConstructor()
                        ->getMock();
                $this->assertEquals( $expected, $module->isKnownEmpty( $context ) );
@@ -156,14 +157,14 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                ];
                $expected = $titleInfo;
 
-               $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' )
+               $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class )
                        ->setMethods( [ 'getPages' ] )
                        ->getMock();
                $module->method( 'getPages' )->willReturn( $pages );
                // Can't mock static methods
                $module::$returnFetchTitleInfo = $titleInfo;
 
-               $context = $this->getMockBuilder( 'ResourceLoaderContext' )
+               $context = $this->getMockBuilder( ResourceLoaderContext::class )
                        ->disableOriginalConstructor()
                        ->getMock();
 
@@ -191,7 +192,7 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                ];
                $expected = $titleInfo;
 
-               $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' )
+               $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class )
                        ->setMethods( [ 'getPages' ] )
                        ->getMock();
                $module->method( 'getPages' )->willReturn( $pages );
@@ -218,13 +219,119 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                $this->assertEquals( $expected, $module->getTitleInfo( $context ), 'Title info' );
        }
 
+       /**
+        * @covers ResourceLoaderWikiModule::preloadTitleInfo
+        */
+       public function testGetPreloadedBadTitle() {
+               // Mock values
+               $pages = [
+                       // Covers else branch for invalid page name
+                       '[x]' => [ 'type' => 'styles' ],
+               ];
+               $titleInfo = [];
+
+               // Set up objects
+               $module = $this->getMockBuilder( TestResourceLoaderWikiModule::class )
+                       ->setMethods( [ 'getPages' ] ) ->getMock();
+               $module->method( 'getPages' )->willReturn( $pages );
+               $module::$returnFetchTitleInfo = $titleInfo;
+               $rl = new EmptyResourceLoader();
+               $rl->register( 'testmodule', $module );
+               $context = new ResourceLoaderContext( $rl, new FauxRequest() );
+
+               // Act
+               TestResourceLoaderWikiModule::preloadTitleInfo(
+                       $context,
+                       wfGetDB( DB_REPLICA ),
+                       [ 'testmodule' ]
+               );
+
+               // Assert
+               $module = TestingAccessWrapper::newFromObject( $module );
+               $this->assertEquals( $titleInfo, $module->getTitleInfo( $context ), 'Title info' );
+       }
+
+       /**
+        * @covers ResourceLoaderWikiModule::preloadTitleInfo
+        */
+       public function testGetPreloadedTitleInfoEmpty() {
+               $context = new ResourceLoaderContext( new EmptyResourceLoader(), new FauxRequest() );
+               // Covers early return
+               $this->assertSame(
+                       null,
+                       ResourceLoaderWikiModule::preloadTitleInfo(
+                               $context,
+                               wfGetDB( DB_REPLICA ),
+                               []
+                       )
+               );
+       }
+
+       public static function provideGetContent() {
+               return [
+                       'Bad title' => [ null, '[x]' ],
+                       'Dead redirect' => [ null, [
+                               'text' => 'Dead redirect',
+                               'title' => 'Dead_redirect',
+                               'redirect' => 1,
+                       ] ],
+                       'Bad content model' => [ null, [
+                               'text' => 'MediaWiki:Wikitext',
+                               'ns' => NS_MEDIAWIKI,
+                               'title' => 'Wikitext',
+                       ] ],
+                       'No JS content found' => [ null, [
+                               'text' => 'MediaWiki:Script.js',
+                               'ns' => NS_MEDIAWIKI,
+                               'title' => 'Script.js',
+                       ] ],
+                       'No CSS content found' => [ null, [
+                               'text' => 'MediaWiki:Styles.css',
+                               'ns' => NS_MEDIAWIKI,
+                               'title' => 'Script.css',
+                       ] ],
+               ];
+       }
+
+       /**
+        * @covers ResourceLoaderWikiModule::getContent
+        * @dataProvider provideGetContent
+        */
+       public function testGetContent( $expected, $title ) {
+               $context = $this->getResourceLoaderContext( [], new EmptyResourceLoader );
+               $module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
+                       ->setMethods( [ 'getContentObj' ] ) ->getMock();
+               $module->expects( $this->any() )
+                       ->method( 'getContentObj' )->willReturn( null );
+
+               if ( is_array( $title ) ) {
+                       $title += [ 'ns' => NS_MAIN, 'id' => 1, 'len' => 1, 'redirect' => 0 ];
+                       $titleText = $title['text'];
+                       // Mock Title db access via LinkCache
+                       MediaWikiServices::getInstance()->getLinkCache()->addGoodLinkObj(
+                               $title['id'],
+                               new TitleValue( $title['ns'], $title['title'] ),
+                               $title['len'],
+                               $title['redirect']
+                       );
+               } else {
+                       $titleText = $title;
+               }
+
+               $module = TestingAccessWrapper::newFromObject( $module );
+               $this->assertEquals(
+                       $expected,
+                       $module->getContent( $titleText )
+               );
+       }
+
        /**
         * @covers ResourceLoaderWikiModule::getContent
         */
        public function testGetContentForRedirects() {
                // Set up context and module object
                $context = $this->getResourceLoaderContext( [], new EmptyResourceLoader );
-               $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
+               $module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
                        ->setMethods( [ 'getPages', 'getContentObj' ] )
                        ->getMock();
                $module->expects( $this->any() )