summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php')
-rw-r--r--www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php97
1 files changed, 97 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php b/www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php
new file mode 100644
index 00000000..5aca5862
--- /dev/null
+++ b/www/wiki/extensions/Translate/tests/phpunit/tag/PageTranslationHooksTest.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * Test for various code using hooks.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @group Database
+ * @group medium
+ */
+class PageTranslationHooksTest extends MediaWikiTestCase {
+ protected function setUp() {
+ parent::setUp();
+
+ global $wgHooks;
+ $this->setMwGlobals( [
+ '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 testRenderTagPage() {
+ global $wgParser;
+
+ // Setup objects
+ $superUser = $this->getTestSysop()->getUser();
+ $translatablePageTitle = Title::newFromText( 'Vuosaari' );
+ $page = WikiPage::factory( $translatablePageTitle );
+ $text = '<translate>pupu</translate>';
+ $content = ContentHandler::makeContent( $text, $translatablePageTitle );
+ $translatablePage = TranslatablePage::newFromTitle( $translatablePageTitle );
+ $parser = $wgParser->getFreshParser();
+ $options = ParserOptions::newFromUser( $superUser );
+ $messageGroups = MessageGroups::singleton();
+
+ // Create the page
+ $editStatus = $page->doEditContent( $content, __METHOD__, 0, false, $superUser );
+ $messageGroups->recache();
+
+ // Check that we don't interfere with non-translatable pages at all
+ $parserOutput = $parser->parse( $text, $translatablePageTitle, $options );
+ $actual = $parserOutput->getExtensionData( 'translate-translation-page' );
+ $expected = null;
+ $this->assertSame( $expected, $actual, 'Extension data is not set on unmarked source page' );
+
+ // Mark the page for translation
+ $latestRevisionId = $editStatus->value['revision']->getId();
+ $translatablePage->addMarkedTag( $latestRevisionId );
+ $messageGroups->recache();
+ $translationPageTitle = Title::newFromText( 'Vuosaari/fi' );
+ TranslateRenderJob::newJob( $translationPageTitle )->run();
+
+ // Check that we don't add data to translatable pages
+ $parserOutput = $parser->parse( $text, $translatablePageTitle, $options );
+ $actual = $parserOutput->getExtensionData( 'translate-translation-page' );
+ $expected = null;
+ $this->assertSame( $expected, $actual, 'Extension data is not set on marked source page' );
+
+ // Check that our code works for translation pages
+ $parserOutput = $parser->parse( 'fi-pupu', $translationPageTitle, $options );
+ $actual = $parserOutput->getExtensionData( 'translate-translation-page' );
+ $expected = [
+ 'sourcepagetitle' => $translatablePageTitle,
+ 'languagecode' => 'fi',
+ 'messagegroupid' => 'page-Vuosaari',
+ ];
+ $this->assertTrue( is_array( $actual ), 'Extension data is set on marked page' );
+ $this->assertSame(
+ 'Vuosaari',
+ $actual[ 'sourcepagetitle' ]->getPrefixedText(),
+ 'Source page title is correct'
+ );
+ $this->assertSame(
+ 'fi',
+ $actual[ 'languagecode' ],
+ 'Language code is correct'
+ );
+ $this->assertSame(
+ 'page-Vuosaari',
+ $actual[ 'messagegroupid' ],
+ 'Message group id is correct'
+ );
+ }
+}