<?php
use MediaWiki\MediaWikiServices;
+use Wikimedia\TestingAccessWrapper;
/**
* @group Database
* @param string $title Title of page to be created
* @param string $lang Language and content of the created page
* @param string|null $content Content of the created page, or null for a generic string
+ *
+ * @return Revision
*/
protected function makePage( $title, $lang, $content = null ) {
if ( $content === null ) {
$title = Title::newFromText( $title, NS_MEDIAWIKI );
$wikiPage = new WikiPage( $title );
$contentHandler = ContentHandler::makeContent( $content, $title );
- $wikiPage->doEditContent( $contentHandler, "$lang translation test case" );
+ $status = $wikiPage->doEditContent( $contentHandler, "$lang translation test case" );
+
+ // sanity
+ $this->assertTrue( $status->isOK(), 'Create page ' . $title->getPrefixedDBkey() );
+ return $status->value['revision'];
}
/**
$this->assertEquals( 0, $dbr->trxLevel(), "No DB read queries" );
}
+
+ /**
+ * Regression test for T218918
+ */
+ public function testLoadFromDB_fetchLatestRevision() {
+ // Create three revisions of the same message page.
+ // Must be an existing message key.
+ $key = 'Log';
+ $this->makePage( $key, 'de', 'Test eins' );
+ $this->makePage( $key, 'de', 'Test zwei' );
+ $r3 = $this->makePage( $key, 'de', 'Test drei' );
+
+ // Create an out-of-sequence revision by importing a
+ // revision with an old timestamp. Hacky.
+ $importRevision = new WikiRevision( new HashConfig() );
+ $importRevision->setTitle( $r3->getTitle() );
+ $importRevision->setComment( 'Imported edit' );
+ $importRevision->setTimestamp( '19991122334455' );
+ $importRevision->setText( 'IMPORTED OLD TEST' );
+ $importRevision->setUsername( 'Alan Smithee' );
+
+ $importer = MediaWikiServices::getInstance()->getWikiRevisionOldRevisionImporterNoUpdates();
+ $importer->import( $importRevision );
+
+ // Now, load the message from the wiki page
+ MessageCache::destroyInstance();
+ $messageCache = MessageCache::singleton();
+ $messageCache->enable();
+ $messageCache = TestingAccessWrapper::newFromObject( $messageCache );
+
+ $cache = $messageCache->loadFromDB( 'de' );
+
+ $this->assertArrayHasKey( $key, $cache );
+
+ // Text in the cache has an extra space in front!
+ $this->assertSame( ' ' . 'Test drei', $cache[$key] );
+ }
+
}