Merge "Add missing return types to User::getOption()"
[lhc/web/wiklou.git] / tests / phpunit / includes / Storage / RevisionStoreDbTest.php
index 6c90854..719a3bf 100644 (file)
@@ -133,6 +133,8 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
                        $loadBalancer,
                        $blobStore,
                        new WANObjectCache( [ 'cache' => new HashBagOStuff() ] ),
+                       MediaWikiServices::getInstance()->getCommentStore(),
+                       MediaWikiServices::getInstance()->getActorMigration(),
                        $wikiId
                );
 
@@ -165,8 +167,8 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
                $this->assertEquals( $r1->getWikiId(), $r2->getWikiId() );
                $this->assertEquals( $r1->isMinor(), $r2->isMinor() );
                foreach ( $r1->getSlotRoles() as $role ) {
-                       $this->assertEquals( $r1->getSlot( $role ), $r2->getSlot( $role ) );
-                       $this->assertEquals( $r1->getContent( $role ), $r2->getContent( $role ) );
+                       $this->assertSlotRecordsEqual( $r1->getSlot( $role ), $r2->getSlot( $role ) );
+                       $this->assertTrue( $r1->getContent( $role )->equals( $r2->getContent( $role ) ) );
                }
                foreach ( [
                        RevisionRecord::DELETED_TEXT,
@@ -178,6 +180,29 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
                }
        }
 
+       private function assertSlotRecordsEqual( SlotRecord $s1, SlotRecord $s2 ) {
+               $this->assertSame( $s1->getRole(), $s2->getRole() );
+               $this->assertSame( $s1->getModel(), $s2->getModel() );
+               $this->assertSame( $s1->getFormat(), $s2->getFormat() );
+               $this->assertSame( $s1->getSha1(), $s2->getSha1() );
+               $this->assertSame( $s1->getSize(), $s2->getSize() );
+               $this->assertTrue( $s1->getContent()->equals( $s2->getContent() ) );
+
+               $s1->hasRevision() ? $this->assertSame( $s1->getRevision(), $s2->getRevision() ) : null;
+               $s1->hasAddress() ? $this->assertSame( $s1->hasAddress(), $s2->hasAddress() ) : null;
+       }
+
+       private function assertRevisionCompleteness( RevisionRecord $r ) {
+               foreach ( $r->getSlotRoles() as $role ) {
+                       $this->assertSlotCompleteness( $r, $r->getSlot( $role ) );
+               }
+       }
+
+       private function assertSlotCompleteness( RevisionRecord $r, SlotRecord $slot ) {
+               $this->assertTrue( $slot->hasAddress() );
+               $this->assertSame( $r->getId(), $slot->getRevision() );
+       }
+
        /**
         * @param mixed[] $details
         *
@@ -255,6 +280,7 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
 
                $this->assertLinkTargetsEqual( $title, $return->getPageAsLinkTarget() );
                $this->assertRevisionRecordsEqual( $rev, $return );
+               $this->assertRevisionCompleteness( $return );
        }
 
        /**
@@ -386,6 +412,8 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
        public function testNewNullRevision( Title $title, $comment, $minor ) {
                $store = MediaWikiServices::getInstance()->getRevisionStore();
                $user = TestUserRegistry::getMutableTestUser( __METHOD__ )->getUser();
+
+               $parent = $store->getRevisionByTitle( $title );
                $record = $store->newNullRevision(
                        wfGetDB( DB_MASTER ),
                        $title,
@@ -399,6 +427,14 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
                $this->assertEquals( $comment, $record->getComment() );
                $this->assertEquals( $minor, $record->isMinor() );
                $this->assertEquals( $user->getName(), $record->getUser()->getName() );
+               $this->assertEquals( $parent->getId(), $record->getParentId() );
+
+               $parentSlot = $parent->getSlot( 'main' );
+               $slot = $record->getSlot( 'main' );
+
+               $this->assertTrue( $slot->isInherited(), 'isInherited' );
+               $this->assertSame( $parentSlot->getOrigin(), $slot->getOrigin(), 'getOrigin' );
+               $this->assertSame( $parentSlot->getAddress(), $slot->getAddress(), 'getAddress' );
        }
 
        /**
@@ -620,12 +656,15 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\RevisionStore::newRevisionFromRow_1_29
         */
        public function testNewRevisionFromRow_anonEdit() {
+               $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', MIGRATION_WRITE_BOTH );
+               $this->overrideMwServices();
+
                $page = WikiPage::factory( Title::newFromText( 'UTPage' ) );
                $text = __METHOD__ . 'a-ä';
                /** @var Revision $rev */
                $rev = $page->doEditContent(
                        new WikitextContent( $text ),
-                       __METHOD__. 'a'
+                       __METHOD__ . 'a'
                )->value['revision'];
 
                $store = MediaWikiServices::getInstance()->getRevisionStore();
@@ -668,6 +707,9 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\RevisionStore::newRevisionFromRow_1_29
         */
        public function testNewRevisionFromRow_userEdit() {
+               $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', MIGRATION_WRITE_BOTH );
+               $this->overrideMwServices();
+
                $page = WikiPage::factory( Title::newFromText( 'UTPage' ) );
                $text = __METHOD__ . 'b-ä';
                /** @var Revision $rev */
@@ -1047,7 +1089,7 @@ class RevisionStoreDbTest extends MediaWikiTestCase {
                $page = WikiPage::factory( Title::newFromText( 'UTPage' ) );
                /** @var Revision $rev */
                $rev = $page->doEditContent(
-                       new WikitextContent( __METHOD__. 'b' ),
+                       new WikitextContent( __METHOD__ . 'b' ),
                        __METHOD__ . 'b',
                        0,
                        false,