]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - tests/phpunit/includes/MergeHistoryTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / tests / phpunit / includes / MergeHistoryTest.php
diff --git a/tests/phpunit/includes/MergeHistoryTest.php b/tests/phpunit/includes/MergeHistoryTest.php
new file mode 100644 (file)
index 0000000..f44ae32
--- /dev/null
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ * @group Database
+ */
+class MergeHistoryTest extends MediaWikiTestCase {
+
+       /**
+        * Make some pages to work with
+        */
+       public function addDBDataOnce() {
+               // Pages that won't actually be merged
+               $this->insertPage( 'Test' );
+               $this->insertPage( 'Test2' );
+
+               // Pages that will be merged
+               $this->insertPage( 'Merge1' );
+               $this->insertPage( 'Merge2' );
+       }
+
+       /**
+        * @dataProvider provideIsValidMerge
+        * @covers MergeHistory::isValidMerge
+        * @param string $source Source page
+        * @param string $dest Destination page
+        * @param string|bool $timestamp Timestamp up to which revisions are merged (or false for all)
+        * @param string|bool $error Expected error for test (or true for no error)
+        */
+       public function testIsValidMerge( $source, $dest, $timestamp, $error ) {
+               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
+               $mh = new MergeHistory(
+                       Title::newFromText( $source ),
+                       Title::newFromText( $dest ),
+                       $timestamp
+               );
+               $status = $mh->isValidMerge();
+               if ( $error === true ) {
+                       $this->assertTrue( $status->isGood() );
+               } else {
+                       $this->assertTrue( $status->hasMessage( $error ) );
+               }
+       }
+
+       public static function provideIsValidMerge() {
+               return [
+                       // for MergeHistory::isValidMerge
+                       [ 'Test', 'Test2', false, true ],
+                       // Although this timestamp is after the latest timestamp of both pages,
+                       // MergeHistory should select the latest source timestamp up to this which should
+                       // still work for the merge.
+                       [ 'Test', 'Test2', strtotime( 'tomorrow' ), true ],
+                       [ 'Test', 'Test', false, 'mergehistory-fail-self-merge' ],
+                       [ 'Nonexistant', 'Test2', false, 'mergehistory-fail-invalid-source' ],
+                       [ 'Test', 'Nonexistant', false, 'mergehistory-fail-invalid-dest' ],
+                       [
+                               'Test',
+                               'Test2',
+                               'This is obviously an invalid timestamp',
+                               'mergehistory-fail-bad-timestamp'
+                       ],
+               ];
+       }
+
+       /**
+        * Test merge revision limit checking
+        * @covers MergeHistory::isValidMerge
+        */
+       public function testIsValidMergeRevisionLimit() {
+               $limit = MergeHistory::REVISION_LIMIT;
+
+               $mh = $this->getMockBuilder( 'MergeHistory' )
+                       ->setMethods( [ 'getRevisionCount' ] )
+                       ->setConstructorArgs( [
+                               Title::newFromText( 'Test' ),
+                               Title::newFromText( 'Test2' ),
+                       ] )
+                       ->getMock();
+               $mh->expects( $this->once() )
+                       ->method( 'getRevisionCount' )
+                       ->will( $this->returnValue( $limit + 1 ) );
+
+               $status = $mh->isValidMerge();
+               $this->assertTrue( $status->hasMessage( 'mergehistory-fail-toobig' ) );
+               $errors = $status->getErrorsByType( 'error' );
+               $params = $errors[0]['params'];
+               $this->assertEquals( $params[0], Message::numParam( $limit ) );
+       }
+
+       /**
+        * Test user permission checking
+        * @covers MergeHistory::checkPermissions
+        */
+       public function testCheckPermissions() {
+               $mh = new MergeHistory(
+                       Title::newFromText( 'Test' ),
+                       Title::newFromText( 'Test2' )
+               );
+
+               // Sysop with mergehistory permission
+               $sysop = static::getTestSysop()->getUser();
+               $status = $mh->checkPermissions( $sysop, '' );
+               $this->assertTrue( $status->isOK() );
+
+               // Normal user
+               $notSysop = static::getTestUser()->getUser();
+               $status = $mh->checkPermissions( $notSysop, '' );
+               $this->assertTrue( $status->hasMessage( 'mergehistory-fail-permission' ) );
+       }
+
+       /**
+        * Test merged revision count
+        * @covers MergeHistory::getMergedRevisionCount
+        */
+       public function testGetMergedRevisionCount() {
+               $mh = new MergeHistory(
+                       Title::newFromText( 'Merge1' ),
+                       Title::newFromText( 'Merge2' )
+               );
+
+               $sysop = static::getTestSysop()->getUser();
+               $mh->merge( $sysop );
+               $this->assertEquals( $mh->getMergedRevisionCount(), 1 );
+       }
+}