}
}
+ /**
+ * @covers EditPage
+ */
public function testUpdatePage() {
$checkIds = [];
$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' );
$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 = [
$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' );
$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 = [
$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__ );
$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() {
// 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,
/**
* @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 = [
'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 );
+ }
}