diff options
Diffstat (limited to 'www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php')
-rw-r--r-- | www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php b/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php new file mode 100644 index 00000000..68265733 --- /dev/null +++ b/www/wiki/extensions/Translate/tests/phpunit/api/ApiQueryMessageGroupsTest.php @@ -0,0 +1,156 @@ +<?php +/** + * @file + * @author Harry Burt + * @copyright Copyright © 2012-2013, Harry Burt + * @license GPL-2.0-or-later + */ + +/** + * @group medium + */ +class ApiQueryMessageGroupsTest extends ApiTestCase { + + protected function setUp() { + parent::setUp(); + + global $wgHooks; + $this->setMwGlobals( [ + 'wgHooks' => $wgHooks, + 'wgTranslateTranslationServices' => [], + ] ); + $wgHooks['TranslatePostInitGroups'] = [ [ $this, 'getTestGroups' ] ]; + + $mg = MessageGroups::singleton(); + $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) ); + $mg->recache(); + } + + public function getTestGroups( &$list ) { + $exampleMessageGroup = new WikiMessageGroup( 'theid', 'thesource' ); + $exampleMessageGroup->setLabel( 'thelabel' ); // Example + $exampleMessageGroup->setNamespace( 5 ); // Example + $list['theid'] = $exampleMessageGroup; + + $anotherExampleMessageGroup = new WikiMessageGroup( 'anotherid', 'thesource' ); + $anotherExampleMessageGroup->setLabel( 'thelabel' ); // Example + $anotherExampleMessageGroup->setNamespace( 5 ); // Example + $list['anotherid'] = $anotherExampleMessageGroup; + + return false; + } + + public function testAPIAccuracy() { + list( $data ) = $this->doApiRequest( + [ + 'action' => 'query', + 'meta' => 'messagegroups', + 'mgprop' => 'id|label|class|namespace|exists', + // @see https://gerrit.wikimedia.org/r/#/c/160222/ + 'continue' => '' + ] + ); + + // Check structure + $this->assertArrayNotHasKey( 'warnings', $data ); + $this->assertArrayHasKey( 'query', $data ); + $this->assertCount( 1, $data['query'] ); + $this->assertArrayHasKey( 'messagegroups', $data['query'] ); + + // Basic content checks + $items = $data['query']['messagegroups']; + + // Ignore dynamic groups + foreach ( $items as $index => $group ) { + if ( $group['id'][0] === '!' ) { + unset( $items[$index] ); + } + } + + // Renumber keys + $items = array_values( $items ); + + $this->assertCount( 2, $items, 'Only the two groups specified are in the api' ); + $this->assertStringEndsWith( 'id', $items[0]['id'] ); + $this->assertStringEndsWith( 'id', $items[1]['id'] ); + $this->assertSame( $items[0]['label'], 'thelabel' ); + $this->assertSame( $items[1]['label'], 'thelabel' ); + $this->assertSame( $items[0]['exists'], true ); + $this->assertSame( $items[1]['exists'], true ); + $this->assertSame( $items[0]['namespace'], 5 ); + $this->assertSame( $items[1]['namespace'], 5 ); + $this->assertSame( $items[0]['class'], 'WikiMessageGroup' ); + $this->assertSame( $items[1]['class'], 'WikiMessageGroup' ); + } + + public function testAPIFilterAccuracy() { + $ids = [ 'MadeUpGroup' ]; + $ids += array_keys( MessageGroups::getAllGroups() ); + + foreach ( $ids as $id ) { + list( $data ) = $this->doApiRequest( + [ + 'action' => 'query', + 'meta' => 'messagegroups', + 'mgprop' => 'id|label|class|namespace|exists', + 'mgfilter' => $id, + // @see https://gerrit.wikimedia.org/r/#/c/160222/ + 'continue' => '' + ] + ); + + if ( $id === 'MadeUpGroup' ) { + // Check structure (shouldn't find anything) + $this->assertArrayNotHasKey( 'warnings', $data ); + $this->assertArrayHasKey( 'query', $data ); + $this->assertCount( 1, $data['query'] ); + $this->assertArrayHasKey( 'messagegroups', $data['query'] ); + $this->assertCount( 0, $data['query']['messagegroups'] ); + continue; + } + + // Check structure (filter is unique given these names) + $this->assertArrayNotHasKey( 'warnings', $data ); + $this->assertArrayHasKey( 'query', $data ); + $this->assertCount( 1, $data['query'] ); + $this->assertArrayHasKey( 'messagegroups', $data['query'] ); + $this->assertCount( 1, $data['query']['messagegroups'] ); + + // Check content + $item = $data['query']['messagegroups'][0]; + $this->assertCount( 5, $item ); + + $this->assertSame( $item['id'], $id ); + $this->assertSame( $item['label'], 'thelabel' ); + $this->assertSame( $item['exists'], true ); + $this->assertStringEndsWith( 'id', $item['id'] ); // theid, anotherid + $this->assertSame( $item['namespace'], 5 ); + $this->assertSame( $item['class'], 'WikiMessageGroup' ); + } + } + + public function testBadProperty() { + list( $data ) = $this->doApiRequest( + [ + 'action' => 'query', + 'meta' => 'messagegroups', + 'mgprop' => 'madeupproperty', + // @see https://gerrit.wikimedia.org/r/#/c/160222/ + 'continue' => '' + ] + ); + + $this->assertArrayHasKey( 'query', $data ); + $this->assertCount( 1, $data['query'] ); + $this->assertArrayHasKey( 'messagegroups', $data['query'] ); + // This doesn't work. invalid properties are only warnings, + // so we ged empty groups listed + // $this->assertCount( 0, $data['query']['messagegroups'] ); + + $this->assertArrayHasKey( 'warnings', $data ); + $this->assertCount( 1, $data['warnings'] ); + $this->assertArrayHasKey( 'messagegroups', $data['warnings'] ); + $this->assertCount( 1, $data['warnings']['messagegroups'] ); + $this->assertArrayHasKey( 'warnings', $data['warnings']['messagegroups'] ); + } +} |