X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fapi%2FApiDeleteTest.php;h=0f2bcc6145d94ff89a7a17dbdd39346a4d44de5b;hb=4d2ab8d30f988c119db8f47689ad815f35324b0b;hp=87167f034f74d17531c9a29903d9869d00607e60;hpb=095a2a05b2aaccff26d7b871194a4edccd092707;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/api/ApiDeleteTest.php b/tests/phpunit/includes/api/ApiDeleteTest.php index 87167f034f..0f2bcc6145 100644 --- a/tests/phpunit/includes/api/ApiDeleteTest.php +++ b/tests/phpunit/includes/api/ApiDeleteTest.php @@ -12,26 +12,8 @@ * @covers ApiDelete */ class ApiDeleteTest extends ApiTestCase { - - protected function setUp() { - parent::setUp(); - - $this->doLogin(); - } - public function testDelete() { - $name = 'Help:ApiDeleteTest_testDelete'; - - // test non-existing page - try { - $this->doApiRequestWithToken( [ - 'action' => 'delete', - 'title' => $name, - ] ); - $this->fail( "Should have raised an ApiUsageException" ); - } catch ( ApiUsageException $e ) { - $this->assertTrue( self::apiExceptionHasCode( $e, 'missingtitle' ) ); - } + $name = 'Help:' . ucfirst( __FUNCTION__ ); // create new page $this->editPage( $name, 'Some text' ); @@ -40,23 +22,31 @@ class ApiDeleteTest extends ApiTestCase { $apiResult = $this->doApiRequestWithToken( [ 'action' => 'delete', 'title' => $name, - ] ); - $apiResult = $apiResult[0]; + ] )[0]; $this->assertArrayHasKey( 'delete', $apiResult ); $this->assertArrayHasKey( 'title', $apiResult['delete'] ); - // Normalized $name is used - $this->assertSame( - 'Help:ApiDeleteTest testDelete', - $apiResult['delete']['title'] - ); + $this->assertSame( $name, $apiResult['delete']['title'] ); $this->assertArrayHasKey( 'logid', $apiResult['delete'] ); $this->assertFalse( Title::newFromText( $name )->exists() ); } + public function testDeleteNonexistent() { + $this->setExpectedException( ApiUsageException::class, + "The page you specified doesn't exist." ); + + $this->doApiRequestWithToken( [ + 'action' => 'delete', + 'title' => 'This page deliberately left nonexistent', + ] ); + } + public function testDeletionWithoutPermission() { - $name = 'Help:ApiDeleteTest_testDeleteWithoutPermission'; + $this->setExpectedException( ApiUsageException::class, + 'The action you have requested is limited to users in the group:' ); + + $name = 'Help:' . ucfirst( __FUNCTION__ ); // create new page $this->editPage( $name, 'Some text' ); @@ -69,11 +59,110 @@ class ApiDeleteTest extends ApiTestCase { 'title' => $name, 'token' => $user->getEditToken(), ], null, null, $user ); - $this->fail( "Should have raised an ApiUsageException" ); - } catch ( ApiUsageException $e ) { - $this->assertTrue( self::apiExceptionHasCode( $e, 'permissiondenied' ) ); + } finally { + $this->assertTrue( Title::newFromText( $name )->exists() ); + } + } + + public function testDeleteWithTag() { + $name = 'Help:' . ucfirst( __FUNCTION__ ); + + ChangeTags::defineTag( 'custom tag' ); + + $this->editPage( $name, 'Some text' ); + + $this->doApiRequestWithToken( [ + 'action' => 'delete', + 'title' => $name, + 'tags' => 'custom tag', + ] ); + + $this->assertFalse( Title::newFromText( $name )->exists() ); + + $dbw = wfGetDB( DB_MASTER ); + $this->assertSame( 'custom tag', $dbw->selectField( + [ 'change_tag', 'logging' ], + 'ct_tag', + [ + 'log_namespace' => NS_HELP, + 'log_title' => ucfirst( __FUNCTION__ ), + ], + __METHOD__, + [], + [ 'change_tag' => [ 'INNER JOIN', 'ct_log_id = log_id' ] ] + ) ); + } + + public function testDeleteWithoutTagPermission() { + $this->setExpectedException( ApiUsageException::class, + 'You do not have permission to apply change tags along with your changes.' ); + + $name = 'Help:' . ucfirst( __FUNCTION__ ); + + ChangeTags::defineTag( 'custom tag' ); + $this->setMwGlobals( 'wgRevokePermissions', + [ 'user' => [ 'applychangetags' => true ] ] ); + + $this->editPage( $name, 'Some text' ); + + try { + $this->doApiRequestWithToken( [ + 'action' => 'delete', + 'title' => $name, + 'tags' => 'custom tag', + ] ); + } finally { + $this->assertTrue( Title::newFromText( $name )->exists() ); + } + } + + public function testDeleteAbortedByHook() { + $this->setExpectedException( ApiUsageException::class, + 'Deletion aborted by hook. It gave no explanation.' ); + + $name = 'Help:' . ucfirst( __FUNCTION__ ); + + $this->editPage( $name, 'Some text' ); + + $this->setTemporaryHook( 'ArticleDelete', + function () { + return false; + } + ); + + try { + $this->doApiRequestWithToken( [ 'action' => 'delete', 'title' => $name ] ); + } finally { + $this->assertTrue( Title::newFromText( $name )->exists() ); } + } + + public function testDeleteWatch() { + $name = 'Help:' . ucfirst( __FUNCTION__ ); + $user = self::$users['sysop']->getUser(); + $this->editPage( $name, 'Some text' ); $this->assertTrue( Title::newFromText( $name )->exists() ); + $this->assertFalse( $user->isWatched( Title::newFromText( $name ) ) ); + + $this->doApiRequestWithToken( [ 'action' => 'delete', 'title' => $name, 'watch' => '' ] ); + + $this->assertFalse( Title::newFromText( $name )->exists() ); + $this->assertTrue( $user->isWatched( Title::newFromText( $name ) ) ); + } + + public function testDeleteUnwatch() { + $name = 'Help:' . ucfirst( __FUNCTION__ ); + $user = self::$users['sysop']->getUser(); + + $this->editPage( $name, 'Some text' ); + $this->assertTrue( Title::newFromText( $name )->exists() ); + $user->addWatch( Title::newFromText( $name ) ); + $this->assertTrue( $user->isWatched( Title::newFromText( $name ) ) ); + + $this->doApiRequestWithToken( [ 'action' => 'delete', 'title' => $name, 'unwatch' => '' ] ); + + $this->assertFalse( Title::newFromText( $name )->exists() ); + $this->assertFalse( $user->isWatched( Title::newFromText( $name ) ) ); } }