jenkins-bot has submitted this change and it was merged. Change subject: Inject settings into api client info module ......................................................................
Inject settings into api client info module Change-Id: Iba2a88813d177504fb71e47df2f8defc12d0abc8 --- M client/includes/api/ApiClientInfo.php M client/tests/phpunit/includes/api/ApiClientInfoTest.php 2 files changed, 138 insertions(+), 37 deletions(-) Approvals: Daniel Kinzler: Looks good to me, approved jenkins-bot: Verified diff --git a/client/includes/api/ApiClientInfo.php b/client/includes/api/ApiClientInfo.php index 9e201e1..563e241 100644 --- a/client/includes/api/ApiClientInfo.php +++ b/client/includes/api/ApiClientInfo.php @@ -33,14 +33,19 @@ */ class ApiClientInfo extends \ApiQueryBase { + protected $settings; + /** * @since 0.4 * - * @param $api ApiBase - * @param $moduleName string + * @param ApiBase $api + * @param string $moduleName */ public function __construct( $api, $moduleName ) { parent::__construct( $api, $moduleName, 'wb' ); + + // @todo inject this instead of using singleton here + $this->settings = Settings::singleton(); } /** @@ -51,34 +56,51 @@ public function execute() { $params = $this->extractRequestParams(); + $apiData = $this->getRepoInfo( $params ); + + $this->getResult()->addValue( 'query', 'wikibase', $apiData ); + } + + /** + * Set settings for api module + * + * @since 0.4 + * + * @param SettingsArray $settings + */ + public function setSettings( SettingsArray $settings ) { + $this->settings = $settings; + } + + /** + * Gets repo url info to inject into the api module + * + * @since 0.4 + * + * @param array $params[] + * + * @return array + */ + public function getRepoInfo( array $params ) { $data = array( 'repo' => array() ); + + $repoUrlArray = array( + 'base' => $this->settings->getSetting( 'repoUrl' ), + 'scriptpath' => $this->settings->getSetting( 'repoScriptPath' ), + 'articlepath' => $this->settings->getSetting( 'repoArticlePath' ), + ); foreach ( $params['prop'] as $p ) { switch ( $p ) { case 'url': - $data['repo']['url'] = $this->urlInfo(); + $data['repo']['url'] = $repoUrlArray; break; default; break; } } - $this->getResult()->addValue( 'query', 'wikibase', $data ); - } - - /** - * Provides url settings for the associated Wikibase repo - * - * @since 0.4 - * - * @return array - */ - public function urlInfo() { - return array( - 'base' => Settings::get( 'repoUrl' ), - 'scriptpath' => Settings::get( 'repoScriptPath' ), - 'articlepath' => Settings::get( 'repoArticlePath' ), - ); + return $data; } /** diff --git a/client/tests/phpunit/includes/api/ApiClientInfoTest.php b/client/tests/phpunit/includes/api/ApiClientInfoTest.php index 3294e26..808aa2a 100644 --- a/client/tests/phpunit/includes/api/ApiClientInfoTest.php +++ b/client/tests/phpunit/includes/api/ApiClientInfoTest.php @@ -1,6 +1,8 @@ <?php - namespace Wikibase\Test; + +use Wikibase\SettingsArray; +use Wikibase\ApiClientInfo; /** * Tests for ApiClientInfo module. @@ -37,23 +39,57 @@ * @licence GNU GPL v2+ * @author Katie Filbert < aude.w...@gmail.com > */ -class ApiClientInfoTest extends \ApiTestCase { +class ApiClientInfoTest extends \MediaWikiTestCase { - public function testGetUrlInfo() { - $data = $this->doApiRequest( - array( - 'action' => 'query', - 'meta' => 'wikibase', - 'wbprop' => 'url', - ) - ); + protected $apiContext; - $this->assertArrayHasKey( 'query', $data[0] ); - $this->assertArrayHasKey( 'wikibase', $data[0]['query'] ); - $this->assertArrayHasKey( 'repo', $data[0]['query']['wikibase'] ); - $this->assertArrayHasKey( 'url', $data[0]['query']['wikibase']['repo'] ); + public function setUp() { + parent::setUp(); - $urlInfo = $data[0]['query']['wikibase']['repo']['url']; + $this->apiContext = new \ApiTestContext(); + } + + public function getApiModule( array $params, SettingsArray $settings ) { + $request = new \FauxRequest( $params, true ); + + $user = \User::newFromName( 'zombie' ); + + $context = $this->apiContext->newTestContext( $request, $user ); + $apiMain = new \ApiMain( $context, true ); + + $apiModule = new ApiClientInfo( $apiMain, 'query' ); + $apiModule->setSettings( $settings ); + + return $apiModule; + } + + /** + * @dataProvider executeProvider + */ + public function testExecute( $params ) { + $settings = $this->getSettings(); + + $module = $this->getApiModule( $params, $settings ); + $module->execute(); + + $result = $module->getResult()->getData(); + + $this->assertInternalType( 'array', $result, 'top level element is an array' ); + + $this->assertArrayHasKey( 'query', $result, 'top level element has a query key' ); + $this->assertArrayHasKey( 'wikibase', $result['query'], 'second level element has a wikibase key' ); + } + + /** + * @dataProvider getRepoInfoProvider + */ + public function testGetRepoInfo( array $params, SettingsArray $settings ) { + $module = $this->getApiModule( $params, $settings ); + $reqParams = $module->extractRequestParams(); + $repoInfo = $module->getRepoInfo( $reqParams ); + + $this->assertArrayHasKey( 'repo', $repoInfo, 'top level element has repo key' ); + $urlInfo = $repoInfo['repo']['url']; $this->assertArrayHasKey( 'base', $urlInfo ); $this->assertArrayHasKey( 'scriptpath', $urlInfo ); @@ -66,8 +102,51 @@ $this->assertInternalType( 'string', $urlInfo['articlepath'], "The repo URL information for 'articlepath' should be a string" ); - $this->assertEquals( \Wikibase\Settings::get( 'repoUrl' ), $urlInfo['base'] ); - $this->assertEquals( \Wikibase\Settings::get( 'repoScriptPath' ), $urlInfo['scriptpath'] ); - $this->assertEquals( \Wikibase\Settings::get( 'repoArticlePath' ), $urlInfo['articlepath'] ); + $this->assertEquals( $settings->getSetting( 'repoUrl' ), $urlInfo['base'] ); + $this->assertEquals( $settings->getSetting( 'repoScriptPath' ), $urlInfo['scriptpath'] ); + $this->assertEquals( $settings->getSetting( 'repoArticlePath' ), $urlInfo['articlepath'] ); + } + + public function executeProvider() { + $params = $this->getApiRequestParams(); + + return array( + array( $params ) + ); + } + + public function getRepoInfoProvider() { + $params = $this->getApiRequestParams(); + $settings = $this->getSettings(); + + return array( + array( $params, $settings ) + ); + } + + /** + * @return array + */ + protected function getApiRequestParams() { + $params = array( + 'action' => 'query', + 'meta' => 'wikibase', + 'wbprop' => 'url' + ); + + return $params; + } + + /** + * @return SettingsArray + */ + protected function getSettings() { + return new SettingsArray( array( + 'repoUrl' => 'http://www.example.org', + 'repoScriptPath' => '/w', + 'repoArticlePath' => '/wiki/$1' + ) ); + } + } -- To view, visit https://gerrit.wikimedia.org/r/64037 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Iba2a88813d177504fb71e47df2f8defc12d0abc8 Gerrit-PatchSet: 5 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Jeroen De Dauw <jeroended...@gmail.com> Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de> Gerrit-Reviewer: jenkins-bot _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits