X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FEditPageTest.php;h=1f9465dee3dfc78fe463386a6c27adf608b4db5b;hb=9c7f6734c397a954b8eaa5ec73876f2b4bf92afb;hp=8f0826b5e6840773372ce70f56a7c02410dc2843;hpb=faf7cc4a09848c538320bd2b9067b1a77c0a0183;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/EditPageTest.php b/tests/phpunit/includes/EditPageTest.php index 8f0826b5e6..1f9465dee3 100644 --- a/tests/phpunit/includes/EditPageTest.php +++ b/tests/phpunit/includes/EditPageTest.php @@ -1,5 +1,7 @@ getContentLanguage(); + $this->setContentLang( $contLang ); + $this->setMwGlobals( [ - 'wgExtraNamespaces' => $wgExtraNamespaces, - 'wgNamespaceContentModels' => $wgNamespaceContentModels, - 'wgContentHandlers' => $wgContentHandlers, - 'wgContLang' => $wgContLang, + 'wgExtraNamespaces' => [ + 12312 => 'Dummy', + 12313 => 'Dummy_talk', + ], + 'wgNamespaceContentModels' => [ 12312 => 'testing' ], ] ); - - $wgExtraNamespaces[12312] = 'Dummy'; - $wgExtraNamespaces[12313] = 'Dummy_talk'; - - $wgNamespaceContentModels[12312] = "testing"; - $wgContentHandlers["testing"] = 'DummyContentHandlerForTesting'; - - MWNamespace::clearCaches(); - $wgContLang->resetNamespaces(); # reset namespace cache - } - - protected function tearDown() { - global $wgContLang; - - MWNamespace::clearCaches(); - $wgContLang->resetNamespaces(); # reset namespace cache - parent::tearDown(); + $this->mergeMwGlobalArrayValue( + 'wgContentHandlers', + [ 'testing' => 'DummyContentHandlerForTesting' ] + ); } /** @@ -360,7 +351,7 @@ class EditPageTest extends MediaWikiLangTestCase { wfGetDB( DB_MASTER )->commit( __METHOD__ ); - $this->assertEquals( 0, DeferredUpdates::pendingUpdatesCount(), 'No deferred updates' ); + $this->assertSame( 0, DeferredUpdates::pendingUpdatesCount(), 'No deferred updates' ); if ( $expectedCode != EditPage::AS_BLANK_ARTICLE ) { $latest = $page->getLatest(); @@ -377,6 +368,9 @@ class EditPageTest extends MediaWikiLangTestCase { } } + /** + * @covers EditPage + */ public function testUpdatePage() { $checkIds = []; @@ -405,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' ); @@ -418,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 = [ @@ -432,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' ); @@ -458,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 = [ @@ -468,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__ ); @@ -543,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() { @@ -684,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, @@ -693,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 = [ @@ -713,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 ); + } }