diff options
Diffstat (limited to 'www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php')
-rw-r--r-- | www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php | 118 |
1 files changed, 107 insertions, 11 deletions
diff --git a/www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php b/www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php index be2dfa50..2a76de70 100644 --- a/www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php +++ b/www/wiki/extensions/Translate/tests/phpunit/MessageGroupBaseTest.php @@ -7,15 +7,15 @@ class MessageGroupBaseTest extends MediaWikiTestCase { */ protected $group; - protected $groupConfiguration = array( - 'BASIC' => array( + protected $groupConfiguration = [ + 'BASIC' => [ 'class' => 'FileBasedMessageGroup', 'id' => 'test-id', 'label' => 'Test Label', 'namespace' => 'NS_MEDIAWIKI', 'description' => 'Test description', - ), - ); + ], + ]; protected function setUp() { parent::setUp(); @@ -61,11 +61,11 @@ class MessageGroupBaseTest extends MediaWikiTestCase { public function testGetNamespaceNumber() { $conf = $this->groupConfiguration; - $conf['BASIC']['namespace'] = NS_IMAGE; + $conf['BASIC']['namespace'] = NS_FILE; $this->group = MessageGroupBase::factory( $conf ); $this->assertEquals( - NS_IMAGE, + NS_FILE, $this->group->getNamespace(), 'should parse integer namespace number.' ); @@ -77,19 +77,115 @@ class MessageGroupBaseTest extends MediaWikiTestCase { $this->group = MessageGroupBase::factory( $conf ); $this->assertEquals( - NS_IMAGE, + NS_FILE, $this->group->getNamespace(), 'should parse string namespace name.' ); } - /** - * @expectedException MWException - * @expectedExceptionMessage No valid namespace defined - */ + public function testInsertablesSuggesterClass() { + $conf = $this->groupConfiguration; + $conf['INSERTABLES']['class'] = 'FakeInsertablesSuggester'; + $this->group = MessageGroupBase::factory( $conf ); + + $this->assertArrayEquals( + [ new Insertable( 'Fake', 'Insertables', 'Suggester' ) ], + $this->group->getInsertablesSuggester()->getInsertables( '' ), + 'should correctly get an InsertablesSuggester using \'class\' option.' + ); + } + + public function testInsertablesSuggesterClasses() { + $conf = $this->groupConfiguration; + $conf['INSERTABLES']['classes'] = [ + 'FakeInsertablesSuggester', + 'AnotherFakeInsertablesSuggester', + ]; + $this->group = MessageGroupBase::factory( $conf ); + + $this->assertArrayEquals( + [ + new Insertable( 'Fake', 'Insertables', 'Suggester' ), + new Insertable( 'AnotherFake', 'Insertables', 'Suggester' ), + ], + $this->group->getInsertablesSuggester()->getInsertables( '' ), + 'should correctly get InsertablesSuggesters using \'classes\' option.' + ); + } + + public function testInsertablesSuggesterClassAndClasses() { + $conf = $this->groupConfiguration; + $conf['INSERTABLES']['class'] = 'FakeInsertablesSuggester'; + $conf['INSERTABLES']['classes'] = [ 'AnotherFakeInsertablesSuggester' ]; + $this->group = MessageGroupBase::factory( $conf ); + + $this->assertArrayEquals( + [ + new Insertable( 'Fake', 'Insertables', 'Suggester' ), + new Insertable( 'AnotherFake', 'Insertables', 'Suggester' ), + ], + $this->group->getInsertablesSuggester()->getInsertables( '' ), + 'should correctly get InsertablesSuggesters using both \'class\' and \'classes\' options.' + ); + + $conf['INSERTABLES']['classes'][] = 'FakeInsertablesSuggester'; + $conf['INSERTABLES']['classes'][] = 'AnotherFakeInsertablesSuggester'; + $this->group = MessageGroupBase::factory( $conf ); + + $this->assertArrayEquals( + [ + new Insertable( 'Fake', 'Insertables', 'Suggester' ), + new Insertable( 'AnotherFake', 'Insertables', 'Suggester' ), + ], + $this->group->getInsertablesSuggester()->getInsertables( '' ), + 'should correctly get InsertablesSuggesters using ' . + 'both \'class\' and \'classes\' options and removing duplicates.' + ); + } + public function testGetNamespaceInvalid() { $conf = $this->groupConfiguration; $conf['BASIC']['namespace'] = 'ergweofijwef'; + $this->setExpectedException( MWException::class, 'No valid namespace defined' ); MessageGroupBase::factory( $conf ); } + + public function testModifyMessageGroupStates() { + // Create a basic workflow. + $this->setMwGlobals( [ + 'wgTranslateWorkflowStates' => [ + 'progress' => [ 'color' => 'd33' ], + 'proofreading' => [ 'color' => 'fc3' ], + ], + ] ); + // Install a special permission when the group ID is matched. + $this->setTemporaryHook( + 'Translate:modifyMessageGroupStates', + function ( $groupId, &$conf ) { + if ( $groupId === 'test-id' ) { + // No users have this. + $conf['proofreading']['right'] = 'inobtanium'; + } + } + ); + + $expectedStates = [ + 'progress' => [ 'color' => 'd33' ], + 'proofreading' => [ 'color' => 'fc3', 'right' => 'inobtanium' ], + ]; + $states = $this->group->getMessageGroupStates()->getStates(); + $this->assertEquals( $expectedStates, $states ); + } +} + +class FakeInsertablesSuggester implements InsertablesSuggester { + public function getInsertables( $text ) { + return [ new Insertable( 'Fake', 'Insertables', 'Suggester' ) ]; + } +} + +class AnotherFakeInsertablesSuggester implements InsertablesSuggester { + public function getInsertables( $text ) { + return [ new Insertable( 'AnotherFake', 'Insertables', 'Suggester' ) ]; + } } |