wiki.techinc.nl/tests/phpunit/includes/api/ApiGeneratorTest.php
Yuri Astrakhan 62216932c1 API PageSet allows generator for non-query modules
* PageSet can now be used in any action to process titles/pageids/revids
or any generator, redirects resolution, and converttitle functionality.
* action=purge proper usage of MustBePosted()
* Add supports for all pageset capabilities - generators, redirects, converttitles to
  action=purge and action=setnotificationtimestamp
* BREAKING CHANGE: ApiPageSet constructor now has two params instead of three, with only the
  first one keeping its meaning. ApiPageSet is now derived from ApiBase.
* BREAKING CHANGE: ApiQuery::newGenerator() and executeGeneratorModule() were deleted.

Change-Id: I7a3d7b6eb015d21ec1a9b9d9c6af9d97663f3f9a
2013-02-08 15:42:21 -05:00

80 lines
2.4 KiB
PHP

<?php
/**
* @group API
*/
class ApiGeneratorTest extends MediaWikiTestCase {
/**
* Helper to easily get an ApiQuery object instance
*/
function getApiQuery() {
// Initialize an ApiQuery object to play with
$main = new ApiMain( new FauxRequest() );
return new ApiQuery( $main, 'foo', 'bar' );
}
/**
* Test whether all registered query modules which are subclasses of
* ApiQueryGeneratorBase are listed as being a generator. Registration is
* done:
* - for core: add it to ApiQuery::$mQueryGenerators
* - for extension: by adding to $wgAPIGeneratorModules
*
* @dataProvider provideApiquerygeneratorbaseChilds
*/
public function testApiquerygeneatorbaseModulesListedAsGenerators(
$moduleName, $moduleClass
) {
$generators = $this->getApiQuery()->getGenerators();
$this->assertArrayHasKey( $moduleName, $generators,
"API module '$moduleName' of class '$moduleClass' (an ApiQueryGeneratorBase subclass) must be listed in ApiQuery::\$mQueryGenerators or added to \$wgAPIGeneratorModules."
);
}
/**
* Returns API modules which are subclassing ApiQueryGeneratorBase.
* Case format is:
* (moduleName, moduleClass)
*/
public function provideApiquerygeneratorbaseChilds() {
$cases = array();
$modules = $this->getApiQuery()->getModuleManager()->getNamesWithClasses();
foreach( $modules as $moduleName => $moduleClass ) {
if( !is_subclass_of( $moduleClass, 'ApiQueryGeneratorBase' ) ) {
continue;
}
$cases[] = array( $moduleName, $moduleClass );
}
return $cases;
}
/**
* @dataProvider provideListedApiqueryGenerators
*/
public function testGeneratorsAreApiquerygeneratorbaseSubclasses(
$generatorName, $generatorClass
) {
$modules = $this->getApiQuery()->getModuleManager()->getNamesWithClasses();
$this->assertArrayHasKey( $generatorName, $modules,
"Class '$generatorClass' of generator '$generatorName' must be a subclass of 'ApiQueryGeneratorBase'. Listed either in ApiQuery::\$mQueryGenerators or in \$wgAPIGeneratorModules."
);
}
/**
* Return ApiQuery generators, either listed in ApiQuery or registered
* via wgAPIGeneratorModules.
* Case format is:
* (moduleName, $moduleClass).
*/
public function provideListedApiqueryGenerators() {
$cases = array();
$generators = $this->getApiQuery()->getGenerators();
foreach( $generators as $generatorName => $generatorClass ) {
$cases[] = array( $generatorName, $generatorClass );
}
return $cases;
}
}