diff options
Diffstat (limited to 'www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php')
-rw-r--r-- | www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php b/www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php new file mode 100644 index 00000000..e457aa70 --- /dev/null +++ b/www/wiki/extensions/Translate/tests/phpunit/PageTranslationTaggingTest.php @@ -0,0 +1,129 @@ +<?php + +/** + * @group Database + * @group medium + */ +class PageTranslationTaggingTest extends MediaWikiTestCase { + protected function setUp() { + parent::setUp(); + + global $wgHooks; + $this->setMwGlobals( [ + 'wgHooks' => $wgHooks, + 'wgEnablePageTranslation' => true, + 'wgTranslateTranslationServices' => [], + ] ); + TranslateHooks::setupTranslate(); + $wgHooks['TranslatePostInitGroups'] = [ 'MessageGroups::getTranslatablePages' ]; + + $mg = MessageGroups::singleton(); + $mg->setCache( new WANObjectCache( [ 'cache' => wfGetCache( 'hash' ) ] ) ); + $mg->recache(); + + MessageIndex::setInstance( new HashMessageIndex() ); + MessageIndex::singleton()->rebuild(); + } + + public function testNormalPage() { + $title = Title::newFromText( 'Fréttinga' ); + $this->assertNotNull( $title, 'Title is valid' ); + $page = WikiPage::factory( $title ); + $this->assertNotNull( $page, 'WikiPage is valid' ); + $translatablePage = TranslatablePage::newFromTitle( $title ); + $content = ContentHandler::makeContent( 'kissa', $title ); + + $page->doEditContent( $content, 'Test case' ); + + $this->assertFalse( $translatablePage->getReadyTag(), 'No ready tag was added' ); + $this->assertFalse( $translatablePage->getMarkedTag(), 'No marked tag was added' ); + } + + public function testTranslatablePage() { + $title = Title::newFromText( 'Fréttinga' ); + $this->assertNotNull( $title, 'Title is valid' ); + $page = WikiPage::factory( $title ); + $this->assertNotNull( $page, 'WikiPage is valid' ); + $translatablePage = TranslatablePage::newFromTitle( $title ); + + $content = ContentHandler::makeContent( '<translate>kissa</translate>', $title ); + $status = $page->doEditContent( $content, 'Test case' ); + $latest = $status->value['revision']->getId(); + + $this->assertSame( $latest, $translatablePage->getReadyTag(), 'Ready tag was added' ); + $this->assertFalse( $translatablePage->getMarkedTag(), 'No marked tag was added' ); + } + + public function testTranslatablePageWithMarked() { + $title = Title::newFromText( 'Fréttinga' ); + $this->assertNotNull( $title, 'Title is valid' ); + $page = WikiPage::factory( $title ); + $this->assertNotNull( $page, 'WikiPage is valid' ); + $translatablePage = TranslatablePage::newFromTitle( $title ); + + $content = ContentHandler::makeContent( '<translate>koira</translate>', $title ); + $status = $page->doEditContent( $content, 'Test case' ); + $latest = $status->value['revision']->getId(); + + $translatablePage->addMarkedTag( $latest, [ 'foo' ] ); + $this->assertSame( $latest, $translatablePage->getReadyTag(), 'Ready tag was added' ); + $this->assertSame( $latest, $translatablePage->getMarkedTag(), 'Marked tag was added' ); + + global $wgUser; + $cascade = false; + $page->doUpdateRestrictions( + [ 'edit' => 'sysop' ], + [], + $cascade, + 'Test case', + $wgUser + ); + + $newLatest = $latest + 1; + $this->assertSame( + $newLatest, + $translatablePage->getReadyTag(), + 'Ready tag was updated after protection' + ); + $this->assertSame( + $latest, + $translatablePage->getMarkedTag(), + 'Marked tag was not updated after protection' + ); + + $page->doUpdateRestrictions( [], [], $cascade, 'Test case', $wgUser ); + } + + public function testTranslationPageRestrictions() { + $superUser = $this->getTestSysop()->getUser(); + $title = Title::newFromText( 'Translatable page' ); + $page = WikiPage::factory( $title ); + $content = ContentHandler::makeContent( '<translate>Hello</translate>', $title ); + + $status = $page->doEditContent( + $content, + 'New page', + 0, + false, + $superUser + ); + + $revision = $status->value['revision']->getId(); + $translatablePage = TranslatablePage::newFromRevision( $title, $revision ); + $translatablePage->addMarkedTag( $revision ); + MessageGroups::singleton()->recache(); + + $translationPage = Title::newFromText( 'Translatable page/fi' ); + TranslateRenderJob::newJob( $translationPage )->run(); + $this->assertTrue( $translationPage->userCan( 'read', $superUser ), + 'Users can read existing translation pages' ); + $this->assertFalse( $translationPage->userCan( 'edit', $superUser ), + 'Users can not edit existing translation pages' ); + + $translationPage = Title::newFromText( 'Translatable page/ab' ); + $this->assertTrue( $translationPage->userCan( 'read', $superUser ), + 'Users can read non-existing translation pages' ); + $this->assertFalse( $translationPage->userCan( 'edit', $superUser ), + 'Users can not edit non-existing translation pages' ); + } +} |