Add tests for SpecialPage::requireLogin
authoraude <aude.wiki@gmail.com>
Tue, 19 Nov 2013 21:37:11 +0000 (22:37 +0100)
committeraude <aude.wiki@gmail.com>
Tue, 19 Nov 2013 22:24:27 +0000 (23:24 +0100)
Change-Id: Id9ee08c921a3e109e5175bb7ae807615cb15b8e5

tests/phpunit/includes/SpecialPageTest.php

index fb8f7ad..a29d527 100644 (file)
@@ -14,6 +14,7 @@ class SpecialPageTest extends MediaWikiTestCase {
                parent::setUp();
 
                $this->setMwGlobals( array(
+                       'wgScript' => '/index.php',
                        'wgContLang' => Language::factory( 'en' )
                ) );
        }
@@ -57,4 +58,58 @@ class SpecialPageTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @dataProvider requireLoginAnonProvider
+        */
+       public function testRequireLoginAnon( $expected, $reason, $title ) {
+               $specialPage = new SpecialPage( 'Watchlist', 'viewmywatchlist' );
+
+               $user = User::newFromId( 0 );
+               $specialPage->getContext()->setUser( $user );
+               $specialPage->getContext()->setLanguage( Language::factory( 'en' ) );
+
+               $this->setExpectedException( 'UserNotLoggedIn', $expected );
+
+               if ( $reason === 'blank' && $title === 'blank' ) {
+                       $specialPage->requireLogin();
+               } else {
+                       $specialPage->requireLogin( $reason, $title );
+               }
+       }
+
+       public function requireLoginAnonProvider() {
+               $lang = 'en';
+
+               $msg = wfMessage( 'loginreqlink' )->inLanguage( $lang )->escaped();
+               $loginLink = '<a href="/index.php?title=Special:UserLogin&amp;returnto=Special%3AWatchlist"'
+                       . ' title="Special:UserLogin">' . $msg . '</a>';
+
+               $expected1 = wfMessage( 'exception-nologin-text-manual' )
+                       ->params( $loginLink )->inLanguage( $lang )->text();
+
+               $expected2 = wfMessage( 'about' )->inLanguage( $lang )->text();
+
+               return array(
+                       array( $expected1, null, null ),
+                       array( $expected2, 'about', null ),
+                       array( $expected2, wfMessage( 'about' ), null ),
+                       array( $expected2, 'about', 'about' ),
+                       array( $expected2, 'about', wfMessage( 'about' ) ),
+                       array( $expected1, 'blank', 'blank' )
+               );
+       }
+
+       public function testRequireLoginNotAnon() {
+               $specialPage = new SpecialPage( 'Watchlist', 'viewmywatchlist' );
+
+               $user = User::newFromId( 0 );
+               $user->setId( 1 );
+               $specialPage->getContext()->setUser( $user );
+
+               $specialPage->requireLogin();
+
+               // no exception thrown, logged in use can access special page
+               $this->assertTrue( true );
+       }
+
 }