X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FRevision%2FMcrRevisionStoreDbTest.php;h=e4d6b541054fc593898c4f4be6a0c426de64ed13;hb=bb915b0776c656b89ed5c14352ff92dfb07ce8f2;hp=7d301a9c44d0e82552eef022c77dcd8d92292916;hpb=db587c50882711fb626dd95ee316f96f845ddeaf;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/Revision/McrRevisionStoreDbTest.php b/tests/phpunit/includes/Revision/McrRevisionStoreDbTest.php index 7d301a9c44..e4d6b54105 100644 --- a/tests/phpunit/includes/Revision/McrRevisionStoreDbTest.php +++ b/tests/phpunit/includes/Revision/McrRevisionStoreDbTest.php @@ -3,12 +3,17 @@ namespace MediaWiki\Tests\Revision; use CommentStoreComment; +use ContentHandler; use MediaWiki\MediaWikiServices; use MediaWiki\Revision\MutableRevisionRecord; use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\SlotRecord; +use MediaWiki\Storage\SqlBlobStore; +use Revision; +use StatusValue; use TextContent; use Title; +use Wikimedia\TestingAccessWrapper; use WikitextContent; /** @@ -197,4 +202,91 @@ class McrRevisionStoreDbTest extends RevisionStoreDbTestBase { return [ 'slot_revision_id' => $revId ]; } + /** + * @covers \MediaWiki\Revision\RevisionStore::newRevisionsFromBatch + * @throws \MWException + */ + public function testNewRevisionsFromBatch_error() { + $page = $this->getTestPage(); + $text = __METHOD__ . 'b-ä'; + /** @var Revision $rev1 */ + $rev1 = $page->doEditContent( + new WikitextContent( $text . '1' ), + __METHOD__ . 'b', + 0, + false, + $this->getTestUser()->getUser() + )->value['revision']; + $invalidRow = $this->revisionToRow( $rev1 ); + $invalidRow->rev_id = 100500; + $result = MediaWikiServices::getInstance()->getRevisionStore() + ->newRevisionsFromBatch( + [ $this->revisionToRow( $rev1 ), $invalidRow ], + [ + 'slots' => [ SlotRecord::MAIN ], + 'content' => true + ] + ); + $this->assertFalse( $result->isGood() ); + $this->assertNotEmpty( $result->getErrors() ); + $records = $result->getValue(); + $this->assertRevisionRecordMatchesRevision( $rev1, $records[$rev1->getId()] ); + $this->assertSame( $text . '1', + $records[$rev1->getId()]->getContent( SlotRecord::MAIN )->serialize() ); + $this->assertEquals( $page->getTitle()->getDBkey(), + $records[$rev1->getId()]->getPageAsLinkTarget()->getDBkey() ); + $this->assertNull( $records[$invalidRow->rev_id] ); + $this->assertSame( [ [ + 'type' => 'warning', + 'message' => 'internalerror', + 'params' => [ + "Couldn't find slots for rev 100500" + ] + ] ], $result->getErrors() ); + } + + /** + * @covers \MediaWiki\Revision\RevisionStore::newRevisionsFromBatch + */ + public function testNewRevisionFromBatchUsesGetBlobBatch() { + $page1 = $this->getTestPage(); + $text = __METHOD__ . 'b-ä'; + $editStatus = $this->editPage( $page1->getTitle()->getPrefixedDBkey(), $text . '1' ); + $this->assertTrue( $editStatus->isGood(), 'Sanity: must create revision 1' ); + /** @var Revision $rev1 */ + $rev1 = $editStatus->getValue()['revision']; + + $contentAddress = $rev1->getRevisionRecord()->getSlot( SlotRecord::MAIN )->getAddress(); + $mockBlobStore = $this->getMockBuilder( SqlBlobStore::class ) + ->disableOriginalConstructor() + ->getMock(); + $mockBlobStore + ->expects( $this->once() ) + ->method( 'getBlobBatch' ) + ->with( [ $contentAddress ], $this->anything() ) + ->willReturn( StatusValue::newGood( [ + $contentAddress => 'Content_From_Mock' + ] ) ); + $mockBlobStore + ->expects( $this->never() ) + ->method( 'getBlob' ); + + $revStore = MediaWikiServices::getInstance() + ->getRevisionStoreFactory() + ->getRevisionStore(); + $wrappedRevStore = TestingAccessWrapper::newFromObject( $revStore ); + $wrappedRevStore->blobStore = $mockBlobStore; + + $result = $revStore->newRevisionsFromBatch( + [ $this->revisionToRow( $rev1 ) ], + [ + 'slots' => [ SlotRecord::MAIN ], + 'content' => true + ] + ); + $this->assertTrue( $result->isGood() ); + $this->assertSame( 'Content_From_Mock', + ContentHandler::getContentText( $result->getValue()[$rev1->getId()] + ->getContent( SlotRecord::MAIN ) ) ); + } }