From f6c225e45677c87b7f985eac95524b782d150f12 Mon Sep 17 00:00:00 2001 From: daniel Date: Tue, 10 Apr 2018 17:31:33 +0200 Subject: [PATCH] Tests for preserving content ID and origin during undeletion Bug: T194015 Change-Id: I6d9a1390c7080d910d43097afb703d13cd500c1b --- .../Storage/RevisionStoreDbTestBase.php | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/tests/phpunit/includes/Storage/RevisionStoreDbTestBase.php b/tests/phpunit/includes/Storage/RevisionStoreDbTestBase.php index 5927cfc9fb..7ea0627e7b 100644 --- a/tests/phpunit/includes/Storage/RevisionStoreDbTestBase.php +++ b/tests/phpunit/includes/Storage/RevisionStoreDbTestBase.php @@ -732,6 +732,26 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase { $this->assertSame( $rev->getContentFormat(), $record->getContent( 'main' )->getDefaultFormat() ); $this->assertSame( $rev->getContentModel(), $record->getContent( 'main' )->getModel() ); $this->assertLinkTargetsEqual( $rev->getTitle(), $record->getPageAsLinkTarget() ); + + $revRec = $rev->getRevisionRecord(); + $revMain = $revRec->getSlot( 'main' ); + $recMain = $record->getSlot( 'main' ); + + $this->assertSame( $revMain->hasOrigin(), $recMain->hasOrigin(), 'hasOrigin' ); + $this->assertSame( $revMain->hasAddress(), $recMain->hasAddress(), 'hasAddress' ); + $this->assertSame( $revMain->hasContentId(), $recMain->hasContentId(), 'hasContentId' ); + + if ( $revMain->hasOrigin() ) { + $this->assertSame( $revMain->getOrigin(), $recMain->getOrigin(), 'getOrigin' ); + } + + if ( $revMain->hasAddress() ) { + $this->assertSame( $revMain->getAddress(), $recMain->getAddress(), 'getAddress' ); + } + + if ( $revMain->hasContentId() ) { + $this->assertSame( $revMain->getContentId(), $recMain->getContentId(), 'getContentId' ); + } } /** @@ -871,6 +891,58 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase { $this->assertSame( $text, $record->getContent( 'main' )->serialize() ); } + /** + * @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() ] ] + ); + } + /** * @covers \MediaWiki\Storage\RevisionStore::loadRevisionFromId */ -- 2.20.1