+ /**
+ * @covers \MediaWiki\Storage\RevisionStore::insertRevisionOn
+ */
+ public function testInsertRevisionOn_archive() {
+ $store = MediaWikiServices::getInstance()->getRevisionStore();
+ $title = Title::newFromText( __METHOD__ );
+
+ $page = WikiPage::factory( $title );
+ /** @var Revision $origRev */
+ $page->doEditContent( new WikitextContent( "First" ), __METHOD__ . '-first' );
+ $origRev = $page->doEditContent( new WikitextContent( "Foo" ), __METHOD__ )
+ ->value['revision'];
+ $orig = $origRev->getRevisionRecord();
+ $page->doDeleteArticle( __METHOD__ );
+
+ $db = wfGetDB( DB_MASTER );
+ $arQuery = $store->getArchiveQueryInfo();
+ $row = $db->selectRow(
+ $arQuery['tables'], $arQuery['fields'], [ 'ar_rev_id' => $orig->getId() ],
+ __METHOD__, [], $arQuery['joins']
+ );
+
+ $record = $store->newRevisionFromArchiveRow( $row );
+
+ $restored = $store->insertRevisionOn( $record, $db );
+ $this->assertSame( $orig->getPageId(), $restored->getPageId() );
+ $this->assertSame( $orig->getId(), $restored->getId() );
+ $this->assertSame( $orig->getComment()->text, $restored->getComment()->text );
+
+ $origMain = $orig->getSlot( 'main' );
+ $restoredMain = $restored->getSlot( 'main' );
+ $this->assertSame(
+ $origMain->getOrigin(),
+ $restoredMain->getOrigin()
+ );
+
+ if ( $origMain->hasContentId() ) {
+ $this->assertSame(
+ $origMain->getContentId(),
+ $restoredMain->getContentId()
+ );
+ }
+
+ // NOTE: we didn't restore the page row, so we can't use RevisionStore::getRevisionById
+ $this->assertSelect(
+ 'revision',
+ [ 'rev_id' ],
+ [ 'rev_id' => $orig->getId() ],
+ [ [ $orig->getId() ] ]
+ );
+ }
+