Cleanup Api phpunit Tests

- Splits multiple classes into individual files
- Adds @covers tags
- Fixes scope

Change-Id: I7d2816d3574fa53a2aaa8e2a84b7a7ecdd245252
This commit is contained in:
addshore 2013-10-23 17:01:33 +01:00
parent 96a9a3e101
commit dc18b813e8
13 changed files with 127 additions and 87 deletions

View file

@ -55,10 +55,10 @@ $wgAutoloadClasses += array(
# tests/phpunit/includes/api # tests/phpunit/includes/api
'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php", 'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php",
'ApiTestCase' => "$testDir/phpunit/includes/api/ApiTestCase.php", 'ApiTestCase' => "$testDir/phpunit/includes/api/ApiTestCase.php",
'ApiTestContext' => "$testDir/phpunit/includes/api/ApiTestCase.php", 'ApiTestContext' => "$testDir/phpunit/includes/api/ApiTestContext.php",
'MockApi' => "$testDir/phpunit/includes/api/ApiTestCase.php", 'MockApi' => "$testDir/phpunit/includes/api/MockApi.php",
'UserWrapper' => "$testDir/phpunit/includes/api/UserWrapper.php",
'RandomImageGenerator' => "$testDir/phpunit/includes/api/RandomImageGenerator.php", 'RandomImageGenerator' => "$testDir/phpunit/includes/api/RandomImageGenerator.php",
'UserWrapper' => "$testDir/phpunit/includes/api/ApiTestCase.php",
# tests/phpunit/includes/content # tests/phpunit/includes/content
'DummyContentHandlerForTesting' => "$testDir/phpunit/includes/content/ContentHandlerTest.php", 'DummyContentHandlerForTesting' => "$testDir/phpunit/includes/content/ContentHandlerTest.php",

View file

@ -4,6 +4,8 @@
* @group API * @group API
* @group Database * @group Database
* @group medium * @group medium
*
* @covers ApiBlock
*/ */
class ApiBlockTest extends ApiTestCase { class ApiBlockTest extends ApiTestCase {
protected function setUp() { protected function setUp() {
@ -11,7 +13,7 @@ class ApiBlockTest extends ApiTestCase {
$this->doLogin(); $this->doLogin();
} }
function getTokens() { protected function getTokens() {
return $this->getTokenList( self::$users['sysop'] ); return $this->getTokenList( self::$users['sysop'] );
} }
@ -63,17 +65,13 @@ class ApiBlockTest extends ApiTestCase {
} }
/** /**
* Attempting to block without a token should give a UsageException with
* error message:
* "The token parameter must be set"
*
* @dataProvider provideBlockUnblockAction
* @expectedException UsageException * @expectedException UsageException
* @expectedExceptionMessage The token parameter must be set
*/ */
public function testBlockingActionWithNoToken( $action ) { public function testBlockingActionWithNoToken( ) {
$this->doApiRequest( $this->doApiRequest(
array( array(
'action' => $action, 'action' => 'block',
'user' => 'UTApiBlockee', 'user' => 'UTApiBlockee',
'reason' => 'Some reason', 'reason' => 'Some reason',
), ),
@ -82,14 +80,4 @@ class ApiBlockTest extends ApiTestCase {
self::$users['sysop']->user self::$users['sysop']->user
); );
} }
/**
* Just provide the 'block' and 'unblock' action to test both API calls
*/
public static function provideBlockUnblockAction() {
return array(
array( 'block' ),
array( 'unblock' ),
);
}
} }

View file

@ -4,9 +4,11 @@
* @group Database * @group Database
* @group API * @group API
* @group medium * @group medium
*
* @covers ApiCreateAccount
*/ */
class ApiCreateAccountTest extends ApiTestCase { class ApiCreateAccountTest extends ApiTestCase {
function setUp() { protected function setUp() {
parent::setUp(); parent::setUp();
LoginForm::setCreateaccountToken(); LoginForm::setCreateaccountToken();
$this->setMwGlobals( array( 'wgEnableEmail' => true ) ); $this->setMwGlobals( array( 'wgEnableEmail' => true ) );

View file

@ -8,6 +8,8 @@
* @group API * @group API
* @group Database * @group Database
* @group medium * @group medium
*
* @covers ApiEditPage
*/ */
class ApiEditPageTest extends ApiTestCase { class ApiEditPageTest extends ApiTestCase {

View file

@ -4,10 +4,18 @@
* @group API * @group API
* @group Database * @group Database
* @group medium * @group medium
*
* @covers ApiOptions
*/ */
class ApiOptionsTest extends MediaWikiLangTestCase { class ApiOptionsTest extends MediaWikiLangTestCase {
private $mTested, $mUserMock, $mContext, $mSession; /** @var PHPUnit_Framework_MockObject_MockObject */
private $mUserMock ;
/** @var ApiOptions */
private $mTested;
private $mSession;
/** @var DerivativeContext */
private $mContext;
private $mOldGetPreferencesHooks = false; private $mOldGetPreferencesHooks = false;

View file

@ -4,6 +4,8 @@
* @group API * @group API
* @group Database * @group Database
* @group medium * @group medium
*
* @covers ApiParse
*/ */
class ApiParseTest extends ApiTestCase { class ApiParseTest extends ApiTestCase {

View file

@ -4,6 +4,8 @@
* @group API * @group API
* @group Database * @group Database
* @group medium * @group medium
*
* @covers ApiPurge
*/ */
class ApiPurgeTest extends ApiTestCase { class ApiPurgeTest extends ApiTestCase {

View file

@ -117,7 +117,7 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
* @param $params Array: key-value API params * @param $params Array: key-value API params
* @param $session Array|null: session array * @param $session Array|null: session array
* @param $user User|null A User object for the context * @param $user User|null A User object for the context
* @return result of the API call * @return mixed result of the API call
* @throws Exception in case wsToken is not set in the session * @throws Exception in case wsToken is not set in the session
*/ */
protected function doApiRequestWithToken( array $params, array $session = null, User $user = null ) { protected function doApiRequestWithToken( array $params, array $session = null, User $user = null ) {
@ -188,66 +188,3 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
); );
} }
} }
class UserWrapper {
public $userName;
public $password;
public $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,
);
}
}
class ApiTestContext extends RequestContext {
/**
* Returns a DerivativeContext with the request variables in place
*
* @param $request WebRequest request object including parameters and session
* @param $user User or null
* @return DerivativeContext
*/
public function newTestContext( WebRequest $request, User $user = null ) {
$context = new DerivativeContext( $this );
$context->setRequest( $request );
if ( $user !== null ) {
$context->setUser( $user );
}
return $context;
}
}

View file

@ -0,0 +1,21 @@
<?php
class ApiTestContext extends RequestContext {
/**
* Returns a DerivativeContext with the request variables in place
*
* @param $request WebRequest request object including parameters and session
* @param $user User or null
* @return DerivativeContext
*/
public function newTestContext( WebRequest $request, User $user = null ) {
$context = new DerivativeContext( $this );
$context->setRequest( $request );
if ( $user !== null ) {
$context->setUser( $user );
}
return $context;
}
}

View file

@ -0,0 +1,31 @@
<?php
/**
* @group API
* @group Database
* @group medium
*
* @covers ApiUnblock
*/
class ApiUnblockTest extends ApiTestCase {
protected function setUp() {
parent::setUp();
$this->doLogin();
}
/**
* @expectedException UsageException
*/
public function testWithNoToken( ) {
$this->doApiRequest(
array(
'action' => 'unblock',
'user' => 'UTApiBlockee',
'reason' => 'Some reason',
),
null,
false,
self::$users['sysop']->user
);
}
}

View file

@ -0,0 +1,20 @@
<?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,
);
}
}

View file

@ -6,6 +6,7 @@
* @group API * @group API
*/ */
class PrefixUniquenessTest extends MediaWikiTestCase { class PrefixUniquenessTest extends MediaWikiTestCase {
public function testPrefixes() { public function testPrefixes() {
$main = new ApiMain( new FauxRequest() ); $main = new ApiMain( new FauxRequest() );
$query = new ApiQuery( $main, 'foo', 'bar' ); $query = new ApiQuery( $main, 'foo', 'bar' );
@ -13,6 +14,7 @@ class PrefixUniquenessTest extends MediaWikiTestCase {
$prefixes = array(); $prefixes = array();
foreach ( $modules as $name => $class ) { foreach ( $modules as $name => $class ) {
/** @var ApiMain $module */
$module = new $class( $main, $name ); $module = new $class( $main, $name );
$prefix = $module->getModulePrefix(); $prefix = $module->getModulePrefix();
if ( isset( $prefixes[$prefix] ) ) { if ( isset( $prefixes[$prefix] ) ) {

View file

@ -0,0 +1,25 @@
<?php
class UserWrapper {
public $userName;
public $password;
public $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();
}
}