Merge "Enable configuration to supply options for Special:Search form"
[lhc/web/wiklou.git] / tests / phpunit / includes / EditPageTest.php
index 587f2c4..d2540f6 100644 (file)
@@ -368,6 +368,9 @@ class EditPageTest extends MediaWikiLangTestCase {
                }
        }
 
+       /**
+        * @covers EditPage
+        */
        public function testUpdatePage() {
                $checkIds = [];
 
@@ -396,7 +399,7 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $page = $this->assertEdit( 'EditPageTest_testUpdatePage', "zero", null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
                $this->assertGreaterThan( 0, $checkIds[0], "First event rev ID set" );
 
                $this->forceRevisionDate( $page, '20120101000000' );
@@ -409,11 +412,14 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $this->assertEdit( 'EditPageTest_testUpdatePage', null, null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
                $this->assertGreaterThan( 0, $checkIds[1], "Second edit hook rev ID set" );
                $this->assertGreaterThan( $checkIds[0], $checkIds[1], "Second event rev ID is higher" );
        }
 
+       /**
+        * @covers EditPage
+        */
        public function testUpdatePageTrx() {
                $text = "one";
                $edit = [
@@ -423,7 +429,7 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $page = $this->assertEdit( 'EditPageTest_testTrxUpdatePage', "zero", null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
 
                $this->forceRevisionDate( $page, '20120101000000' );
 
@@ -449,7 +455,7 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $this->assertEdit( 'EditPageTest_testTrxUpdatePage', null, null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
 
                $text = "three";
                $edit = [
@@ -459,7 +465,7 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $this->assertEdit( 'EditPageTest_testTrxUpdatePage', null, null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
 
                wfGetDB( DB_MASTER )->commit( __METHOD__ );
 
@@ -534,7 +540,7 @@ hello
 
                $this->assertEdit( 'EditPageTest_testSectionEdit', $base, null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $expected,
-                       "expected successfull update of section" );
+                       "expected successful update of section" );
        }
 
        public static function provideAutoMerge() {
@@ -675,7 +681,7 @@ hello
 
                // first edit
                $this->assertEdit( 'EditPageTest_testAutoMerge', null, 'Adam', $adamsEdit,
-                       EditPage::AS_SUCCESS_UPDATE, null, "expected successfull update" );
+                       EditPage::AS_SUCCESS_UPDATE, null, "expected successful update" );
 
                // second edit
                $this->assertEdit( 'EditPageTest_testAutoMerge', null, 'Berta', $bertasEdit,
@@ -684,16 +690,9 @@ hello
 
        /**
         * @depends testAutoMerge
+        * @covers EditPage
         */
        public function testCheckDirectEditingDisallowed_forNonTextContent() {
-               $title = Title::newFromText( 'Dummy:NonTextPageForEditPage' );
-               $page = WikiPage::factory( $title );
-
-               $article = new Article( $title );
-               $article->getContext()->setTitle( $title );
-               $ep = new EditPage( $article );
-               $ep->setContextTitle( $title );
-
                $user = $GLOBALS['wgUser'];
 
                $edit = [
@@ -704,15 +703,79 @@ hello
                        'wpUnicodeCheck' => EditPage::UNICODE_CHECK,
                ];
 
-               $req = new FauxRequest( $edit, true );
-               $ep->importFormData( $req );
-
                $this->setExpectedException(
                        MWException::class,
                        'This content model is not supported: testing'
                );
 
-               $ep->internalAttemptSave( $result, false );
+               $this->doEditDummyNonTextPage( $edit );
+       }
+
+       /** @covers EditPage */
+       public function testShouldPreventChangingContentModelWhenUserCannotChangeModelForTitle() {
+               $this->setTemporaryHook( 'getUserPermissionsErrors',
+                       function ( Title $page, $user, $action, &$result ) {
+                               if ( $action === 'editcontentmodel' &&
+                                        $page->getContentModel() === CONTENT_MODEL_WIKITEXT ) {
+                                       $result = false;
+
+                                       return false;
+                               }
+                       } );
+
+               $user = $GLOBALS['wgUser'];
+
+               $status = $this->doEditDummyNonTextPage( [
+                       'wpTextbox1' => 'some text',
+                       'wpEditToken' => $user->getEditToken(),
+                       'wpEdittime' => '',
+                       'wpStarttime' => wfTimestampNow(),
+                       'wpUnicodeCheck' => EditPage::UNICODE_CHECK,
+                       'model' => CONTENT_MODEL_WIKITEXT,
+                       'format' => CONTENT_FORMAT_WIKITEXT,
+               ] );
+
+               $this->assertFalse( $status->isOK() );
+               $this->assertEquals( EditPage::AS_NO_CHANGE_CONTENT_MODEL, $status->getValue() );
+       }
+
+       /** @covers EditPage */
+       public function testShouldPreventChangingContentModelWhenUserCannotEditTargetTitle() {
+               $this->setTemporaryHook( 'getUserPermissionsErrors',
+                       function ( Title $page, $user, $action, &$result ) {
+                               if ( $action === 'edit' && $page->getContentModel() === CONTENT_MODEL_WIKITEXT ) {
+                                       $result = false;
+                                       return false;
+                               }
+                       } );
+
+               $user = $GLOBALS['wgUser'];
+
+               $status = $this->doEditDummyNonTextPage( [
+                       'wpTextbox1' => 'some text',
+                       'wpEditToken' => $user->getEditToken(),
+                       'wpEdittime' => '',
+                       'wpStarttime' => wfTimestampNow(),
+                       'wpUnicodeCheck' => EditPage::UNICODE_CHECK,
+                       'model' => CONTENT_MODEL_WIKITEXT,
+                       'format' => CONTENT_FORMAT_WIKITEXT,
+               ] );
+
+               $this->assertFalse( $status->isOK() );
+               $this->assertEquals( EditPage::AS_NO_CHANGE_CONTENT_MODEL, $status->getValue() );
        }
 
+       private function doEditDummyNonTextPage( array $edit ): Status {
+               $title = Title::newFromText( 'Dummy:NonTextPageForEditPage' );
+
+               $article = new Article( $title );
+               $article->getContext()->setTitle( $title );
+               $ep = new EditPage( $article );
+               $ep->setContextTitle( $title );
+
+               $req = new FauxRequest( $edit, true );
+               $ep->importFormData( $req );
+
+               return $ep->internalAttemptSave( $result, false );
+       }
 }