4 * Tests for MediaWiki api.php?action=delete.
14 class ApiDeleteTest
extends ApiTestCase
{
16 protected function setUp() {
18 $this->tablesUsed
= array_merge(
20 [ 'change_tag', 'change_tag_def', 'logging' ]
24 public function testDelete() {
25 $name = 'Help:' . ucfirst( __FUNCTION__
);
28 $this->editPage( $name, 'Some text' );
31 $apiResult = $this->doApiRequestWithToken( [
36 $this->assertArrayHasKey( 'delete', $apiResult );
37 $this->assertArrayHasKey( 'title', $apiResult['delete'] );
38 $this->assertSame( $name, $apiResult['delete']['title'] );
39 $this->assertArrayHasKey( 'logid', $apiResult['delete'] );
41 $this->assertFalse( Title
::newFromText( $name )->exists() );
44 public function testBatchedDelete() {
45 $this->setMwGlobals( 'wgDeleteRevisionsBatchSize', 1 );
47 $name = 'Help:' . ucfirst( __FUNCTION__
);
48 for ( $i = 1; $i <= 3; $i++
) {
49 $this->editPage( $name, "Revision $i" );
52 $apiResult = $this->doApiRequestWithToken( [
57 $this->assertArrayHasKey( 'delete', $apiResult );
58 $this->assertArrayHasKey( 'title', $apiResult['delete'] );
59 $this->assertSame( $name, $apiResult['delete']['title'] );
60 $this->assertArrayHasKey( 'scheduled', $apiResult['delete'] );
61 $this->assertTrue( $apiResult['delete']['scheduled'] );
62 $this->assertArrayNotHasKey( 'logid', $apiResult['delete'] );
65 JobQueueGroup
::destroySingletons();
67 $jobs->loadParamsAndArgs( null, [ 'quiet' => true ], null );
70 $this->assertFalse( Title
::newFromText( $name )->exists( Title
::GAID_FOR_UPDATE
) );
73 public function testDeleteNonexistent() {
74 $this->setExpectedException( ApiUsageException
::class,
75 "The page you specified doesn't exist." );
77 $this->doApiRequestWithToken( [
79 'title' => 'This page deliberately left nonexistent',
83 public function testDeletionWithoutPermission() {
84 $this->setExpectedException( ApiUsageException
::class,
85 'The action you have requested is limited to users in the group:' );
87 $name = 'Help:' . ucfirst( __FUNCTION__
);
90 $this->editPage( $name, 'Some text' );
92 // test deletion without permission
95 $apiResult = $this->doApiRequest( [
98 'token' => $user->getEditToken(),
99 ], null, null, $user );
101 $this->assertTrue( Title
::newFromText( $name )->exists() );
105 public function testDeleteWithTag() {
106 $name = 'Help:' . ucfirst( __FUNCTION__
);
108 ChangeTags
::defineTag( 'custom tag' );
110 $this->editPage( $name, 'Some text' );
112 $this->doApiRequestWithToken( [
113 'action' => 'delete',
115 'tags' => 'custom tag',
118 $this->assertFalse( Title
::newFromText( $name )->exists() );
120 $dbw = wfGetDB( DB_MASTER
);
121 $this->assertSame( 'custom tag', $dbw->selectField(
122 [ 'change_tag', 'logging', 'change_tag_def' ],
125 'log_namespace' => NS_HELP
,
126 'log_title' => ucfirst( __FUNCTION__
),
131 'change_tag' => [ 'JOIN', 'ct_log_id = log_id' ],
132 'change_tag_def' => [ 'JOIN', 'ctd_id = ct_tag_id' ]
137 public function testDeleteWithoutTagPermission() {
138 $this->setExpectedException( ApiUsageException
::class,
139 'You do not have permission to apply change tags along with your changes.' );
141 $name = 'Help:' . ucfirst( __FUNCTION__
);
143 ChangeTags
::defineTag( 'custom tag' );
144 $this->setMwGlobals( 'wgRevokePermissions',
145 [ 'user' => [ 'applychangetags' => true ] ] );
147 $this->editPage( $name, 'Some text' );
150 $this->doApiRequestWithToken( [
151 'action' => 'delete',
153 'tags' => 'custom tag',
156 $this->assertTrue( Title
::newFromText( $name )->exists() );
160 public function testDeleteAbortedByHook() {
161 $this->setExpectedException( ApiUsageException
::class,
162 'Deletion aborted by hook. It gave no explanation.' );
164 $name = 'Help:' . ucfirst( __FUNCTION__
);
166 $this->editPage( $name, 'Some text' );
168 $this->setTemporaryHook( 'ArticleDelete',
175 $this->doApiRequestWithToken( [ 'action' => 'delete', 'title' => $name ] );
177 $this->assertTrue( Title
::newFromText( $name )->exists() );
181 public function testDeleteWatch() {
182 $name = 'Help:' . ucfirst( __FUNCTION__
);
183 $user = self
::$users['sysop']->getUser();
185 $this->editPage( $name, 'Some text' );
186 $this->assertTrue( Title
::newFromText( $name )->exists() );
187 $this->assertFalse( $user->isWatched( Title
::newFromText( $name ) ) );
189 $this->doApiRequestWithToken( [ 'action' => 'delete', 'title' => $name, 'watch' => '' ] );
191 $this->assertFalse( Title
::newFromText( $name )->exists() );
192 $this->assertTrue( $user->isWatched( Title
::newFromText( $name ) ) );
195 public function testDeleteUnwatch() {
196 $name = 'Help:' . ucfirst( __FUNCTION__
);
197 $user = self
::$users['sysop']->getUser();
199 $this->editPage( $name, 'Some text' );
200 $this->assertTrue( Title
::newFromText( $name )->exists() );
201 $user->addWatch( Title
::newFromText( $name ) );
202 $this->assertTrue( $user->isWatched( Title
::newFromText( $name ) ) );
204 $this->doApiRequestWithToken( [ 'action' => 'delete', 'title' => $name, 'unwatch' => '' ] );
206 $this->assertFalse( Title
::newFromText( $name )->exists() );
207 $this->assertFalse( $user->isWatched( Title
::newFromText( $name ) ) );