use MediaWiki\User\UserIdentityValue;
use MediaWikiTestCase;
use PHPUnit_Framework_MockObject_MockObject;
+use Psr\Log\NullLogger;
use Revision;
use TestUserRegistry;
use Title;
->getMock();
$lb->method( 'reallyOpenConnection' )->willReturnCallback(
- function ( array $server, $dbNameOverride ) {
+ function () use ( $server ) {
return $this->getDatabaseMock( $server );
}
);
/**
* @dataProvider provideDomainCheck
- * @covers \MediaWiki\Revision\RevisionStore::checkDatabaseWikiId
+ * @covers \MediaWiki\Revision\RevisionStore::checkDatabaseDomain
*/
public function testDomainCheck( $wikiId, $dbName, $dbPrefix ) {
$this->setMwGlobals(
'cliMode' => true,
'agent' => '',
'load' => 100,
+ 'srvCache' => new HashBagOStuff(),
'profiler' => null,
'trxProfiler' => new TransactionProfiler(),
- 'connLogger' => new \Psr\Log\NullLogger(),
- 'queryLogger' => new \Psr\Log\NullLogger(),
+ 'connLogger' => new NullLogger(),
+ 'queryLogger' => new NullLogger(),
'errorLogger' => function () {
},
'deprecationLogger' => function () {
}
if ( $revMain->hasContentId() ) {
- $this->assertSame( $revMain->getContentId(), $recMain->getContentId(), 'getContentId' );
+ // XXX: the content ID value is ill-defined when SCHEMA_COMPAT_WRITE_BOTH and
+ // SCHEMA_COMPAT_READ_OLD is set, since revision insertion will report the
+ // content ID used with the new schema, while loading the revision from the
+ // old schema will report an emulated ID.
+ if ( $this->getMcrMigrationStage() & SCHEMA_COMPAT_READ_NEW ) {
+ $this->assertSame( $revMain->getContentId(), $recMain->getContentId(), 'getContentId' );
+ }
}
}
+ /**
+ * @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRowAndSlots
+ * @covers \MediaWiki\Revision\RevisionStore::getQueryInfo
+ */
+ public function testNewRevisionFromRowAndSlot_getQueryInfo() {
+ $page = $this->getTestPage();
+ $text = __METHOD__ . 'o-รถ';
+ /** @var Revision $rev */
+ $rev = $page->doEditContent(
+ new WikitextContent( $text ),
+ __METHOD__ . 'a'
+ )->value['revision'];
+
+ $store = MediaWikiServices::getInstance()->getRevisionStore();
+ $info = $store->getQueryInfo();
+ $row = $this->db->selectRow(
+ $info['tables'],
+ $info['fields'],
+ [ 'rev_id' => $rev->getId() ],
+ __METHOD__,
+ [],
+ $info['joins']
+ );
+
+ $info = $store->getSlotsQueryInfo( [ 'content' ] );
+ $slotRows = $this->db->select(
+ $info['tables'],
+ $info['fields'],
+ $this->getSlotRevisionConditions( $rev->getId() ),
+ __METHOD__,
+ [],
+ $info['joins']
+ );
+
+ $record = $store->newRevisionFromRowAndSlots(
+ $row,
+ iterator_to_array( $slotRows ),
+ [],
+ $page->getTitle()
+ );
+ $this->assertRevisionRecordMatchesRevision( $rev, $record );
+ $this->assertSame( $text, $rev->getContent()->serialize() );
+ }
+
+ /**
+ * Conditions to use together with getSlotsQueryInfo() when selecting slot rows for a given
+ * revision.
+ *
+ * @return array
+ */
+ abstract protected function getSlotRevisionConditions( $revId );
+
/**
* @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRow
+ * @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRowAndSlots
* @covers \MediaWiki\Revision\RevisionStore::getQueryInfo
*/
public function testNewRevisionFromRow_getQueryInfo() {
/**
* @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRow
+ * @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRowAndSlots
*/
public function testNewRevisionFromRow_anonEdit() {
$page = $this->getTestPage();
/**
* @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRow
+ * @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRowAndSlots
*/
public function testNewRevisionFromRow_anonEdit_legacyEncoding() {
$this->setMwGlobals( 'wgLegacyEncoding', 'windows-1252' );
/**
* @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRow
+ * @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRowAndSlots
*/
public function testNewRevisionFromRow_userEdit() {
$page = $this->getTestPage();
/**
* @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRow
+ * @covers \MediaWiki\Revision\RevisionStore::newRevisionFromRowAndSlots
*/
public function testNewRevisionFromRow_no_user() {
$store = MediaWikiServices::getInstance()->getRevisionStore();
*/
public function testNewMutableRevisionFromArray_legacyEncoding( array $array ) {
$cache = new WANObjectCache( [ 'cache' => new HashBagOStuff() ] );
- $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
- $blobStore = new SqlBlobStore( $lb, $cache );
+ $services = MediaWikiServices::getInstance();
+ $lb = $services->getDBLoadBalancer();
+ $access = $services->getExternalStoreAccess();
+ $blobStore = new SqlBlobStore( $lb, $access, $cache );
$blobStore->setLegacyEncoding( 'windows-1252', Language::factory( 'en' ) );
$factory = $this->getMockBuilder( BlobStoreFactory::class )