From 21cf1fb88f96d7593daaf37375333f19ad832bd6 Mon Sep 17 00:00:00 2001 From: aude Date: Tue, 19 Nov 2013 22:37:11 +0100 Subject: [PATCH] Add tests for SpecialPage::requireLogin Change-Id: Id9ee08c921a3e109e5175bb7ae807615cb15b8e5 --- tests/phpunit/includes/SpecialPageTest.php | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tests/phpunit/includes/SpecialPageTest.php b/tests/phpunit/includes/SpecialPageTest.php index fb8f7ad90b..a29d527dd9 100644 --- a/tests/phpunit/includes/SpecialPageTest.php +++ b/tests/phpunit/includes/SpecialPageTest.php @@ -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 = '' . $msg . ''; + + $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 ); + } + } -- 2.20.1