From: James D. Forrester Date: Wed, 28 Feb 2018 23:03:26 +0000 (-0800) Subject: tests: Assert that the user who deleted a page is logged as such X-Git-Tag: 1.34.0-rc.0~5602 X-Git-Url: http://git.cyclocoop.org/%22%2C%20generer_url_ecrire%28?a=commitdiff_plain;h=0db10b84b06660e2bbeaf895f69c2f372ac64739;p=lhc%2Fweb%2Fwiklou.git tests: Assert that the user who deleted a page is logged as such These tests are rather basic, but they're better than the nothing that seems to be the current state. Revision deletion is still untested and suppression is only very lightly tested. More tests should be added. Bug: T188479 Bug: T188773 Change-Id: Iba0f41ffddc6af45e0a4be86176708160f4821f4 --- diff --git a/tests/phpunit/includes/page/WikiPageDbTestBase.php b/tests/phpunit/includes/page/WikiPageDbTestBase.php index 53b659f2e0..40c4e1ecd3 100644 --- a/tests/phpunit/includes/page/WikiPageDbTestBase.php +++ b/tests/phpunit/includes/page/WikiPageDbTestBase.php @@ -155,6 +155,9 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase { } /** + * Undeletion is covered in PageArchiveTest::testUndeleteRevisions() + * TODO: Revision deletion + * * @covers WikiPage::doDeleteArticle * @covers WikiPage::doDeleteArticleReal */ @@ -203,6 +206,169 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase { $this->assertEquals( 0, $n, 'pagelinks should contain no more links from the page' ); } + /** + * @covers WikiPage::doDeleteArticleReal + */ + public function testDoDeleteArticleReal_user0() { + $page = $this->createPage( + __METHOD__, + "[[original text]] foo", + CONTENT_MODEL_WIKITEXT + ); + $id = $page->getId(); + + $errorStack = ''; + $status = $page->doDeleteArticleReal( + /* reason */ "testing user 0 deletion", + /* suppress */ false, + /* unused 1 */ null, + /* unused 2 */ null, + /* errorStack */ $errorStack, + null + ); + $logId = $status->getValue(); + $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' ); + $this->assertSelect( + [ 'logging' ] + $actorQuery['tables'], /* table */ + [ + 'log_type', + 'log_action', + 'log_comment', + 'log_user' => $actorQuery['fields']['log_user'], + 'log_user_text' => $actorQuery['fields']['log_user_text'], + 'log_namespace', + 'log_title', + ], + [ 'log_id' => $logId ], + [ [ + 'delete', + 'delete', + 'testing user 0 deletion', + '0', + '127.0.0.1', + (string)$page->getTitle()->getNamespace(), + $page->getTitle()->getDBkey(), + ] ], + [], + $actorQuery['joins'] + ); + } + + /** + * @covers WikiPage::doDeleteArticleReal + */ + public function testDoDeleteArticleReal_userSysop() { + $page = $this->createPage( + __METHOD__, + "[[original text]] foo", + CONTENT_MODEL_WIKITEXT + ); + $id = $page->getId(); + + $user = $this->getTestSysop()->getUser(); + $errorStack = ''; + $status = $page->doDeleteArticleReal( + /* reason */ "testing sysop deletion", + /* suppress */ false, + /* unused 1 */ null, + /* unused 2 */ null, + /* errorStack */ $errorStack, + $user + ); + $logId = $status->getValue(); + $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' ); + $this->assertSelect( + [ 'logging' ] + $actorQuery['tables'], /* table */ + [ + 'log_type', + 'log_action', + 'log_comment', + 'log_user' => $actorQuery['fields']['log_user'], + 'log_user_text' => $actorQuery['fields']['log_user_text'], + 'log_namespace', + 'log_title', + ], + [ 'log_id' => $logId ], + [ [ + 'delete', + 'delete', + 'testing sysop deletion', + (string)$user->getId(), + $user->getName(), + (string)$page->getTitle()->getNamespace(), + $page->getTitle()->getDBkey(), + ] ], + [], + $actorQuery['joins'] + ); + } + + /** + * TODO: Test more stuff about suppression. + * + * @covers WikiPage::doDeleteArticleReal + */ + public function testDoDeleteArticleReal_suppress() { + $page = $this->createPage( + __METHOD__, + "[[original text]] foo", + CONTENT_MODEL_WIKITEXT + ); + $id = $page->getId(); + + $user = $this->getTestSysop()->getUser(); + $errorStack = ''; + $status = $page->doDeleteArticleReal( + /* reason */ "testing deletion", + /* suppress */ true, + /* unused 1 */ null, + /* unused 2 */ null, + /* errorStack */ $errorStack, + $user + ); + $logId = $status->getValue(); + $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' ); + $this->assertSelect( + [ 'logging' ] + $actorQuery['tables'], /* table */ + [ + 'log_type', + 'log_action', + 'log_comment', + 'log_user' => $actorQuery['fields']['log_user'], + 'log_user_text' => $actorQuery['fields']['log_user_text'], + 'log_namespace', + 'log_title', + ], + [ 'log_id' => $logId ], + [ [ + 'suppress', + 'delete', + 'testing deletion', + (string)$user->getId(), + $user->getName(), + (string)$page->getTitle()->getNamespace(), + $page->getTitle()->getDBkey(), + ] ], + [], + $actorQuery['joins'] + ); + + $this->assertNull( + $page->getContent( Revision::FOR_PUBLIC ), + "WikiPage::getContent should return null after the page was suppressed for general users" + ); + + $this->assertNull( + $page->getContent( Revision::FOR_THIS_USER, null ), + "WikiPage::getContent should return null after the page was suppressed for user zero" + ); + + $this->assertNull( + $page->getContent( Revision::FOR_THIS_USER, $user ), + "WikiPage::getContent should return null after the page was suppressed even for a sysop" + ); + } + /** * @covers WikiPage::doDeleteUpdates */