Merge ApiTestSetup into ApiTestCase and update all subclasses. The amount of duplicat...
authorChad Horohoe <demon@users.mediawiki.org>
Fri, 1 Jul 2011 16:34:02 +0000 (16:34 +0000)
committerChad Horohoe <demon@users.mediawiki.org>
Fri, 1 Jul 2011 16:34:02 +0000 (16:34 +0000)
./phpunit.php --filter Api currently gives me: Tests: 24, Assertions: 107, Incomplete: 1, Skipped: 2.

tests/TestsAutoLoader.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiPurgeTest.php
tests/phpunit/includes/api/ApiQueryTest.php
tests/phpunit/includes/api/ApiSetup.php [deleted file]
tests/phpunit/includes/api/ApiTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiWatchTest.php
tests/phpunit/includes/api/format/ApiFormatPhpTest.php
tests/phpunit/includes/api/format/ApiFormatTestBase.php
tests/phpunit/includes/upload/UploadFromUrlTest.php

index 4f47c98..cccf7bf 100644 (file)
@@ -14,10 +14,12 @@ $wgAutoloadClasses += array(
        'BlockTest' => "$testFolder/phpunit/includes/BlockTest.php",
 
        //API
-       'ApiTestSetup' => "$testFolder/phpunit/includes/api/ApiSetup.php",
+       'ApiFormatTestBase' => "$testFolder/phpunit/includes/api/format/ApiFormatTestBase.php",
        'ApiTestCase' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
        'ApiTestUser' => "$testFolder/phpunit/includes/api/ApiTestUser.php",
+       'MockApi' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
        'RandomImageGenerator' => "$testFolder/phpunit/includes/api/RandomImageGenerator.php",
+       'UserWrapper' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
 
        //Parser
        'ParserTestFileIterator' => "$testFolder/phpunit/includes/parser/NewParserHelpers.php",
index 11953d7..325a30f 100644 (file)
@@ -1,12 +1,10 @@
 <?php
 
-require_once dirname( __FILE__ ) . '/ApiSetup.php';
-
 /**
  * @group Database
  * @group Destructive
  */
-class ApiBlockTest extends ApiTestSetup {
+class ApiBlockTest extends ApiTestCase {
 
        function setUp() {
                parent::setUp();
@@ -14,7 +12,7 @@ class ApiBlockTest extends ApiTestSetup {
        }
 
        function getTokens() {
-               return $this->getTokenList( $this->sysopUser );
+               return $this->getTokenList( self::$users['sysop'] );
        }
 
        function addDBData() {
index 578f6d8..db1563e 100644 (file)
@@ -1,11 +1,9 @@
 <?php
 
-require_once dirname( __FILE__ ) . '/ApiSetup.php';
-
 /**
  * @group Database
  */
-class ApiPurgeTest extends ApiTestSetup {
+class ApiPurgeTest extends ApiTestCase {
 
        function setUp() {
                parent::setUp();
index 5c9ef93..114eadf 100644 (file)
@@ -1,11 +1,9 @@
 <?php
 
-require_once dirname( __FILE__ ) . '/ApiSetup.php';
-
 /**
  * @group Database
  */
-class ApiQueryTest extends ApiTestSetup {
+class ApiQueryTest extends ApiTestCase {
 
        function setUp() {
                parent::setUp();
diff --git a/tests/phpunit/includes/api/ApiSetup.php b/tests/phpunit/includes/api/ApiSetup.php
deleted file mode 100644 (file)
index 7672faa..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-abstract class ApiTestSetup extends MediaWikiLangTestCase {
-       protected $user;
-       protected $sysopUser;
-       protected static $apiUrl;
-
-       function setUp() {
-               global $wgServer, $wgContLang, $wgAuth, $wgMemc, $wgRequest;
-
-               parent::setUp();
-               self::$apiUrl = $wgServer . wfScript( 'api' );
-
-               $wgMemc = new EmptyBagOStuff;
-               $wgContLang = Language::factory( 'en' );
-               $wgAuth = new StubObject( 'wgAuth', 'AuthPlugin' );
-               $wgRequest = new FauxRequest( array() );
-               $this->setupUser();
-       }
-
-       protected function doApiRequest( $params, $data = null, $appendModule = false ) {
-               $_SESSION = isset( $data[2] ) ? $data[2] : array();
-
-               $req = new FauxRequest( $params, true, $_SESSION );
-               $module = new ApiMain( $req, true );
-               $module->execute();
-
-               $data[0] = $module->getResultData();
-               $data[1] = $req;
-               $data[2] = $_SESSION;
-
-               if( $appendModule ) $data[3] = $module;
-
-               return $data;
-       }
-
-       function setupUser() {
-               if ( $this->user == null || $this->sysopUser == null ) {
-                       $this->user = new UserWrapper( 'User for MediaWiki automated tests', User::randomPassword() );
-                       $this->sysopUser = new UserWrapper( 'Sysop for MediaWiki automated tests', User::randomPassword(), 'sysop' );
-               }
-
-               $GLOBALS['wgUser'] = $this->sysopUser->user;
-       }
-
-       function doLogin() {
-               $data = $this->doApiRequest( array(
-                       'action' => 'login',
-                       'lgname' => $this->sysopUser->userName,
-                       'lgpassword' => $this->sysopUser->password ) );
-
-               $token = $data[0]['login']['token'];
-
-               $data = $this->doApiRequest( array(
-                       'action' => 'login',
-                       "lgtoken" => $token,
-                       "lgname" => $this->sysopUser->userName,
-                       "lgpassword" => $this->sysopUser->password ), $data );
-
-               return $data;
-       }
-
-       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' ) );
-               return $data;
-       }
-
-}
-
-class UserWrapper {
-       public $userName, $password, $user;
-
-       public function __construct( $userName, $password, $group = '' ) {
-               $this->userName = $userName;
-               $this->password = $password;
-
-               $this->user = User::newFromName( $this->userName );
-               if ( !$this->user->getID() ) {
-                       $this->user = User::createNew( $this->userName, array(
-                               "email" => "test@example.com",
-                               "real_name" => "Test User" ) );
-               }
-               $this->user->setPassword( $this->password );
-
-               if ( $group !== '' ) {
-                       $this->user->addGroup( $group );
-               }
-               $this->user->saveSettings();
-       }
-}
-
index d7133da..e2215ac 100644 (file)
@@ -1,25 +1,10 @@
 <?php
 
-class MockApi extends ApiBase {
-       public function execute() { }
-       public function getVersion() { }
-
-       public function __construct() { }
-
-       public function getAllowedParams() {
-               return array(
-                       'filename' => null,
-                       'enablechunks' => false,
-                       'sessionkey' => null,
-               );
-       }
-}
-
 /**
  * @group Database
  * @group Destructive
  */
-class ApiTest extends ApiTestSetup {
+class ApiTest extends ApiTestCase {
 
        function testRequireOnlyOneParameterDefault() {
                $mock = new MockApi();
@@ -78,7 +63,7 @@ class ApiTest extends ApiTestSetup {
         */
        function testApiLoginNoName() {
                $data = $this->doApiRequest( array( 'action' => 'login',
-                       'lgname' => '', 'lgpassword' => $this->user->password,
+                       'lgname' => '', 'lgpassword' => self::$users['sysop']->password,
                ) );
                $this->assertEquals( 'NoName', $data[0]['login']['result'] );
        }
@@ -86,14 +71,15 @@ class ApiTest extends ApiTestSetup {
        function testApiLoginBadPass() {
                global $wgServer;
 
-               $user = $this->user;
+               $user = self::$users['sysop'];
+               $user->user->logOut();
 
                if ( !isset( $wgServer ) ) {
                        $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
                }
                $ret = $this->doApiRequest( array(
                        "action" => "login",
-                       "lgname" => $user->userName,
+                       "lgname" => $user->username,
                        "lgpassword" => "bad",
                        )
                );
@@ -109,8 +95,8 @@ class ApiTest extends ApiTestSetup {
                $ret = $this->doApiRequest( array(
                        "action" => "login",
                        "lgtoken" => $token,
-                       "lgname" => $user->userName,
-                       "lgpassword" => "bad",
+                       "lgname" => $user->username,
+                       "lgpassword" => "badnowayinhell",
                        )
                );
 
@@ -129,11 +115,12 @@ class ApiTest extends ApiTestSetup {
                        $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
                }
 
-               $user = $this->user;
+               $user = self::$users['sysop'];
+               $user->user->logOut();
 
                $ret = $this->doApiRequest( array(
                        "action" => "login",
-                       "lgname" => $user->userName,
+                       "lgname" => $user->username,
                        "lgpassword" => $user->password,
                        )
                );
@@ -149,7 +136,7 @@ class ApiTest extends ApiTestSetup {
                $ret = $this->doApiRequest( array(
                        "action" => "login",
                        "lgtoken" => $token,
-                       "lgname" => $user->userName,
+                       "lgname" => $user->username,
                        "lgpassword" => $user->password,
                        )
                );
@@ -170,11 +157,13 @@ class ApiTest extends ApiTestSetup {
                if ( !isset( $wgServer ) ) {
                        $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
                }
+               $user = self::$users['sysop'];
+
                $req = MWHttpRequest::factory( self::$apiUrl . "?action=login&format=xml",
                        array( "method" => "POST",
                                "postData" => array(
-                               "lgname" => $this->user->userName,
-                               "lgpassword" => $this->user->password ) ) );
+                               "lgname" => $user->username,
+                               "lgpassword" => $user->password ) ) );
                $req->execute();
 
                libxml_use_internal_errors( true );
@@ -189,8 +178,8 @@ class ApiTest extends ApiTestSetup {
 
                $req->setData( array(
                        "lgtoken" => $token,
-                       "lgname" => $this->user->userName,
-                       "lgpassword" => $this->user->password ) );
+                       "lgname" => $user->username,
+                       "lgpassword" => $user->password ) );
                $req->execute();
 
                $cj = $req->getCookieJar();
@@ -198,7 +187,7 @@ class ApiTest extends ApiTestSetup {
                $this->assertNotEquals( false, $serverName );
                $serializedCookie = $cj->serializeToHttpRequest( $wgScriptPath, $serverName );
                $this->assertNotEquals( '', $serializedCookie );
-               $this->assertRegexp( '/_session=[^;]*; .*UserID=[0-9]*; .*UserName=' . $this->user->userName . '; .*Token=/', $serializedCookie );
+               $this->assertRegexp( '/_session=[^;]*; .*UserID=[0-9]*; .*UserName=' . $user->userName . '; .*Token=/', $serializedCookie );
 
                return $cj;
        }
@@ -225,10 +214,11 @@ class ApiTest extends ApiTestSetup {
        }
        
        function testRunLogin() {
+               $sysopUser = self::$users['sysop'];
                $data = $this->doApiRequest( array(
                        'action' => 'login',
-                       'lgname' => $this->sysopUser->userName,
-                       'lgpassword' => $this->sysopUser->password ) );
+                       'lgname' => $sysopUser->username,
+                       'lgpassword' => $sysopUser->password ) );
 
                $this->assertArrayHasKey( "login", $data[0] );
                $this->assertArrayHasKey( "result", $data[0]['login'] );
@@ -238,8 +228,8 @@ class ApiTest extends ApiTestSetup {
                $data = $this->doApiRequest( array(
                        'action' => 'login',
                        "lgtoken" => $token,
-                       "lgname" => $this->sysopUser->userName,
-                       "lgpassword" => $this->sysopUser->password ), $data );
+                       "lgname" => $sysopUser->username,
+                       "lgpassword" => $sysopUser->password ), $data );
 
                $this->assertArrayHasKey( "login", $data[0] );
                $this->assertArrayHasKey( "result", $data[0]['login'] );
@@ -250,7 +240,7 @@ class ApiTest extends ApiTestSetup {
        }
        
        function testGettingToken() {
-               foreach ( array( $this->user, $this->sysopUser ) as $user ) {
+               foreach ( self::$users as $user ) {
                        $this->runTokenTest( $user );
                }
        }
index 54da690..fab4187 100644 (file)
@@ -1,12 +1,17 @@
 <?php 
 
 abstract class ApiTestCase extends MediaWikiLangTestCase {
+       /**
+        * @var Array of ApiTestUser
+        */
        public static $users;
+       protected static $apiUrl;
 
        function setUp() {
-               global $wgContLang, $wgAuth, $wgMemc, $wgRequest, $wgUser;
+               global $wgContLang, $wgAuth, $wgMemc, $wgRequest, $wgUser, $wgServer;
 
                parent::setUp();
+               self::$apiUrl = $wgServer . wfScript( 'api' );
                $wgMemc = new EmptyBagOStuff();
                $wgContLang = Language::factory( 'en' );
                $wgAuth = new StubObject( 'wgAuth', 'AuthPlugin' );
@@ -35,12 +40,18 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                if ( is_null( $session ) ) {
                        $session = array();
                }
+               $_SESSION = $session; // paranoia
 
                $request = new FauxRequest( $params, true, $session );
                $module = new ApiMain( $request, true );
                $module->execute();
 
-               return array( $module->getResultData(), $request, $request->getSessionArray() );
+               $results = array( $module->getResultData(), $request, $request->getSessionArray() );
+               if( $appendModule ) {
+                       $results[] = $module;
+               }
+
+               return $results;
        }
 
        /**
@@ -62,4 +73,68 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                }
        }
 
+       protected function doLogin() {
+               $data = $this->doApiRequest( array(
+                       'action' => 'login',
+                       'lgname' => self::$users['sysop']->username,
+                       'lgpassword' => self::$users['sysop']->password ) );
+
+               $token = $data[0]['login']['token'];
+
+               $data = $this->doApiRequest( array(
+                       'action' => 'login',
+                       'lgtoken' => $token,
+                       'lgname' => self::$users['sysop']->username,
+                       'lgpassword' => self::$users['sysop']->password
+                       ), $data );
+
+               return $data;
+       }
+
+       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' ) );
+               return $data;
+       }
+}
+
+class UserWrapper {
+       public $userName, $password, $user;
+
+       public function __construct( $userName, $password, $group = '' ) {
+               $this->userName = $userName;
+               $this->password = $password;
+
+               $this->user = User::newFromName( $this->userName );
+               if ( !$this->user->getID() ) {
+                       $this->user = User::createNew( $this->userName, array(
+                               "email" => "test@example.com",
+                               "real_name" => "Test User" ) );
+               }
+               $this->user->setPassword( $this->password );
+
+               if ( $group !== '' ) {
+                       $this->user->addGroup( $group );
+               }
+               $this->user->saveSettings();
+       }
+}
+
+class MockApi extends ApiBase {
+       public function execute() { }
+       public function getVersion() { }
+
+       public function __construct() { }
+
+       public function getAllowedParams() {
+               return array(
+                       'filename' => null,
+                       'enablechunks' => false,
+                       'sessionkey' => null,
+               );
+       }
 }
index cd35a5b..7fca538 100644 (file)
@@ -1,13 +1,11 @@
 <?php
 
-require_once dirname( __FILE__ ) . '/ApiSetup.php';
-
 /**
  * @group Database
  * @group Destructive
  * @todo This test suite is severly broken and need a full review 
  */
-class ApiWatchTest extends ApiTestSetup {
+class ApiWatchTest extends ApiTestCase {
 
        function setUp() {
                parent::setUp();
@@ -15,7 +13,7 @@ class ApiWatchTest extends ApiTestSetup {
        }
        
        function getTokens() {
-               return $this->getTokenList( $this->sysopUser );
+               return $this->getTokenList( self::$users['sysop'] );
        }
 
        /**
index 761857a..f83ef18 100644 (file)
@@ -1,19 +1,10 @@
 <?php
 
-require_once dirname( __FILE__ ) . '/ApiFormatTestBase.php';
-
 /**
  * @group API
  * @group Database
  */
 class ApiFormatPhpTest extends ApiFormatTestBase {
-
-       /*function setUp() {
-               parent::setUp();
-               $this->doLogin();
-       }*/
-
-       
        function testValidPHPSyntax() {
                
                $data = $this->apiRequest( 'php', array( 'action' => 'query', 'meta' => 'siteinfo' ) );
index 1ddbfcb..a0b7b02 100644 (file)
@@ -1,13 +1,9 @@
 <?php
 
-require_once dirname( dirname( __FILE__ ) ) . '/ApiSetup.php';
-
-abstract class ApiFormatTestBase extends ApiTestSetup {
-
+abstract class ApiFormatTestBase extends ApiTestCase {
        protected function apiRequest( $format, $params, $data = null ) {
-               
                $data = parent::doApiRequest( $params, $data, true );
-               
+
                $module = $data[3];
                
                $printer = $module->createPrinterByName( $format );
@@ -23,9 +19,4 @@ abstract class ApiFormatTestBase extends ApiTestSetup {
 
                return $out;
        }
-
-       function setupUser() {
-               /* Do not setup a user here */
-       }
 }
-
index cf4df4b..4722d40 100644 (file)
@@ -1,12 +1,10 @@
 <?php
 
-require_once dirname( dirname( __FILE__ ) ) . '/api/ApiSetup.php';
-
 /**
  * @group Broken
  * @group Upload
  */
-class UploadFromUrlTest extends ApiTestSetup {
+class UploadFromUrlTest extends ApiTestCase {
 
        public function setUp() {
                global $wgEnableUploads, $wgAllowCopyUploads, $wgAllowAsyncCopyUploads;