Fix for r100905:
authorAlexandre Emsenhuber <ialex@users.mediawiki.org>
Thu, 27 Oct 2011 18:46:40 +0000 (18:46 +0000)
committerAlexandre Emsenhuber <ialex@users.mediawiki.org>
Thu, 27 Oct 2011 18:46:40 +0000 (18:46 +0000)
* Make tests work again
* Added ApiTestCase::doApiRequest() and related to pass it to the context and removed override of $wgUser where possible
* Fix ApiLogin to get the correct User object (i.e. the logged in one)
* Fix ApiBase to feed a RequestContext to setContext() so that ApiLogin can call setUser()

includes/api/ApiBase.php
includes/api/ApiLogin.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/upload/UploadFromUrlTest.php

index e0167d9..e84ce57 100644 (file)
@@ -74,7 +74,7 @@ abstract class ApiBase extends ContextSource {
                $this->mModulePrefix = $modulePrefix;
 
                if ( !$this->isMain() ) {
-                       $this->setContext( $this->mMainModule );
+                       $this->setContext( $mainModule->getContext() );
                }
        }
 
index 38fd155..a45d51f 100644 (file)
@@ -74,15 +74,16 @@ class ApiLogin extends ApiBase {
                $context->setRequest( $req );*/
                $loginForm = new LoginForm();
                $loginForm->setContext( $context );
-               $user = $this->getUser();
 
                global $wgCookiePrefix, $wgPasswordAttemptThrottle;
 
                $authRes = $loginForm->authenticateUserData();
                switch ( $authRes ) {
                        case LoginForm::SUCCESS:
+                               $user = $context->getUser();
+                               $this->getContext()->setUser( $user );
                                $user->setOption( 'rememberpassword', 1 );
-                               $user->setCookies( $this->getMain()->getRequest() );
+                               $user->setCookies( $this->getRequest() );
 
                                // Run hooks.
                                // @todo FIXME: Split back and frontend from this hook.
index 1f3d55d..514da42 100644 (file)
@@ -47,7 +47,7 @@ class ApiBlockTest extends ApiTestCase {
                        'action' => 'block',
                        'user' => 'UTApiBlockee',
                        'reason' => 'Some reason',
-                       'token' => $pageinfo['blocktoken'] ), $data );
+                       'token' => $pageinfo['blocktoken'] ), $data, false, self::$users['sysop']->user );
 
                $block = Block::newFromTarget('UTApiBlockee');
 
index 7f6d943..40b85d4 100644 (file)
@@ -43,12 +43,12 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
 
        }
 
-       protected function doApiRequest( $params, $session = null, $appendModule = false ) {
+       protected function doApiRequest( $params, $session = null, $appendModule = false, $user = null ) {
                if ( is_null( $session ) ) {
                        $session = array();
                }
 
-               $context = $this->apiContext->newTestContext( $params, $session );
+               $context = $this->apiContext->newTestContext( $params, $session, $user );
                $module = new ApiMain( $context, true );
                $module->execute();
 
@@ -71,13 +71,13 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
         * @param $params: key-value API params
         * @param $session: session array
         */
-       protected function doApiRequestWithToken( $params, $session ) {
+       protected function doApiRequestWithToken( $params, $session, $user = null ) {
                if ( $session['wsToken'] ) {
                        // add edit token to fake session
                        $session['wsEditToken'] = $session['wsToken'];
                        // add token to request parameters
                        $params['token'] = md5( $session['wsToken'] ) . User::EDIT_TOKEN_SUFFIX;
-                       return $this->doApiRequest( $params, $session );
+                       return $this->doApiRequest( $params, $session, false, $user );
                } else {
                        throw new Exception( "request data not in right format" );
                }
@@ -102,12 +102,11 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
        }
 
        protected function getTokenList( $user ) {
-               $GLOBALS['wgUser'] = $user->user;
                $data = $this->doApiRequest( array(
                        'action' => 'query',
                        'titles' => 'Main Page',
                        'intoken' => 'edit|delete|protect|move|block|unblock',
-                       'prop' => 'info' ) );
+                       'prop' => 'info' ), false, $user->user );
                return $data;
        }
 }
@@ -156,11 +155,15 @@ class ApiTestContext extends RequestContext {
         *
         * @param $params Array key-value API params
         * @param $session Array session data
+        * @param $user User or null
         * @return DerivativeContext
         */
-       public function newTestContext( $params, $session ) {
+       public function newTestContext( $params, $session, $user = null ) {
                $context = new DerivativeContext( $this );
                $context->setRequest( new FauxRequest( $params, true, $session ) );
+               if ( $user !== null ) {
+                       $context->setUser( $user );
+               }
                return $context;
        }
 }
index f5b3b1f..881eebf 100644 (file)
@@ -79,14 +79,11 @@ class ApiUploadTest extends ApiTestCaseUpload {
         * @depends testLogin
         */
        public function testUploadMissingParams( $session ) {
-               global $wgUser;
-               $wgUser = self::$users['uploader']->user;
-
                $exception = false;
                try {
                        $this->doApiRequestWithToken( array(
                                'action' => 'upload',
-                       ), $session );
+                       ), $session, self::$users['uploader']->user );
                } catch ( UsageException $e ) {
                        $exception = true;
                        $this->assertEquals( "One of the parameters filekey, file, url, statuskey is required",
@@ -100,9 +97,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
         * @depends testLogin
         */
        public function testUpload( $session ) {
-               global $wgUser;
-               $wgUser = self::$users['uploader']->user;
-
                $extension = 'png';
                $mimeType = 'image/png';
 
@@ -136,7 +130,8 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                $exception = false;
                try {
-                       list( $result, , ) = $this->doApiRequestWithToken( $params, $session );
+                       list( $result, , ) = $this->doApiRequestWithToken( $params, $session,
+                               self::$users['uploader']->user );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -156,9 +151,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
         * @depends testLogin
         */
        public function testUploadZeroLength( $session ) {
-               global $wgUser;
-               $wgUser = self::$users['uploader']->user;
-
                $mimeType = 'image/png';
 
                $filePath = tempnam( wfTempDir(), "" );
@@ -180,7 +172,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                $exception = false;
                try {
-                       $this->doApiRequestWithToken( $params, $session );
+                       $this->doApiRequestWithToken( $params, $session, self::$users['uploader']->user );
                } catch ( UsageException $e ) {
                        $this->assertContains( 'The file you submitted was empty', $e->getMessage() );
                        $exception = true;
@@ -197,9 +189,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
         * @depends testLogin
         */
        public function testUploadSameFileName( $session ) {
-               global $wgUser;
-               $wgUser = self::$users['uploader']->user;
-
                $extension = 'png';
                $mimeType = 'image/png';
 
@@ -234,7 +223,8 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                $exception = false;
                try {
-                       list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session );
+                       list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
+                               self::$users['uploader']->user );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -250,7 +240,8 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                $exception = false;
                try {
-                       list( $result, , ) = $this->doApiRequestWithToken( $params, $session );
+                       list( $result, , ) = $this->doApiRequestWithToken( $params, $session,
+                               self::$users['uploader']->user );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -271,9 +262,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
         * @depends testLogin
         */
        public function testUploadSameContent( $session ) {
-               global $wgUser;
-               $wgUser = self::$users['uploader']->user;
-
                $extension = 'png';
                $mimeType = 'image/png';
 
@@ -309,7 +297,8 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                $exception = false;
                try {
-                       list( $result, $request, $session ) = $this->doApiRequestWithToken( $params, $session );
+                       list( $result, $request, $session ) = $this->doApiRequestWithToken( $params, $session,
+                               self::$users['uploader']->user );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -334,7 +323,8 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                $exception = false;
                try {
-                       list( $result, $request, $session ) = $this->doApiRequestWithToken( $params, $session );
+                       list( $result, $request, $session ) = $this->doApiRequestWithToken( $params, $session,
+                               self::$users['uploader']->user );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -356,7 +346,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
         */
        public function testUploadStash( $session ) {
                global $wgUser;
-               $wgUser = self::$users['uploader']->user;
+               $wgUser = self::$users['uploader']->user; // @todo FIXME: still used somewhere
 
                $extension = 'png';
                $mimeType = 'image/png';
@@ -391,7 +381,8 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                $exception = false;
                try {
-                       list( $result, $request, $session ) = $this->doApiRequestWithToken( $params, $session );
+                       list( $result, $request, $session ) = $this->doApiRequestWithToken( $params, $session,
+                               self::$users['uploader']->user );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -419,7 +410,8 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $this->clearFakeUploads();
                $exception = false;
                try {
-                       list( $result, $request, $session ) = $this->doApiRequestWithToken( $params, $session );
+                       list( $result, $request, $session ) = $this->doApiRequestWithToken( $params, $session,
+                               self::$users['uploader']->user );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
index 164beee..cee5b1e 100644 (file)
@@ -20,7 +20,7 @@ class UploadFromUrlTest extends ApiTestCase {
                }
        }
 
-       protected function doApiRequest( $params, $unused = null, $appendModule = false ) {
+       protected function doApiRequest( $params, $unused = null, $appendModule = false, $user = null ) {
                $sessionId = session_id();
                session_write_close();