3 use MediaWiki\Block\DatabaseBlock
;
4 use MediaWiki\Block\Restriction\PageRestriction
;
7 * Tests for action=revisiondelete
8 * @covers APIRevisionDelete
13 class ApiRevisionDeleteTest
extends ApiTestCase
{
15 public static $page = 'Help:ApiRevDel_test';
18 protected function setUp() {
19 // Needs to be before setup since this gets cached
20 $this->mergeMwGlobalArrayValue(
22 [ 'sysop' => [ 'deleterevision' => true ] ]
25 // Make a few edits for us to play with
26 for ( $i = 1; $i <= 5; $i++
) {
27 self
::editPage( self
::$page, MWCryptRand
::generateHex( 10 ), 'summary' );
28 $this->revs
[] = Title
::newFromText( self
::$page )
29 ->getLatestRevID( Title
::GAID_FOR_UPDATE
);
33 public function testHidingRevisions() {
34 $user = self
::$users['sysop']->getUser();
35 $revid = array_shift( $this->revs
);
36 $out = $this->doApiRequest( [
37 'action' => 'revisiondelete',
39 'target' => self
::$page,
41 'hide' => 'content|user|comment',
42 'token' => $user->getEditToken(),
45 $out = $out[0]['revisiondelete'];
46 $this->assertEquals( $out['status'], 'Success' );
47 $this->assertArrayHasKey( 'items', $out );
48 $item = $out['items'][0];
49 $this->assertTrue( $item['userhidden'], 'userhidden' );
50 $this->assertTrue( $item['commenthidden'], 'commenthidden' );
51 $this->assertTrue( $item['texthidden'], 'texthidden' );
52 $this->assertEquals( $item['id'], $revid );
54 // Now check that that revision was actually hidden
55 $rev = Revision
::newFromId( $revid );
56 $this->assertEquals( $rev->getContent( Revision
::FOR_PUBLIC
), null );
57 $this->assertEquals( $rev->getComment( Revision
::FOR_PUBLIC
), '' );
58 $this->assertEquals( $rev->getUser( Revision
::FOR_PUBLIC
), 0 );
61 $out2 = $this->doApiRequest( [
62 'action' => 'revisiondelete',
64 'target' => self
::$page,
66 'show' => 'content|user|comment',
67 'token' => $user->getEditToken(),
71 $out2 = $out2[0]['revisiondelete'];
72 $this->assertEquals( $out2['status'], 'Success' );
73 $this->assertArrayHasKey( 'items', $out2 );
74 $item = $out2['items'][0];
76 $this->assertFalse( $item['userhidden'], 'userhidden' );
77 $this->assertFalse( $item['commenthidden'], 'commenthidden' );
78 $this->assertFalse( $item['texthidden'], 'texthidden' );
80 $this->assertEquals( $item['id'], $revid );
82 $rev = Revision
::newFromId( $revid );
83 $this->assertNotEquals( $rev->getContent( Revision
::FOR_PUBLIC
), null );
84 $this->assertNotEquals( $rev->getComment( Revision
::FOR_PUBLIC
), '' );
85 $this->assertNotEquals( $rev->getUser( Revision
::FOR_PUBLIC
), 0 );
88 public function testUnhidingOutput() {
89 $user = self
::$users['sysop']->getUser();
90 $revid = array_shift( $this->revs
);
92 $this->doApiRequest( [
93 'action' => 'revisiondelete',
95 'target' => self
::$page,
97 'hide' => 'content|user|comment',
98 'token' => $user->getEditToken(),
101 $out = $this->doApiRequest( [
102 'action' => 'revisiondelete',
103 'type' => 'revision',
104 'target' => self
::$page,
107 'token' => $user->getEditToken(),
109 $out = $out[0]['revisiondelete'];
110 $this->assertEquals( $out['status'], 'Success' );
111 $this->assertArrayHasKey( 'items', $out );
112 $item = $out['items'][0];
113 // Check it has userhidden & texthidden
114 // but not commenthidden
115 $this->assertTrue( $item['userhidden'], 'userhidden' );
116 $this->assertFalse( $item['commenthidden'], 'commenthidden' );
117 $this->assertTrue( $item['texthidden'], 'texthidden' );
118 $this->assertEquals( $item['id'], $revid );
121 public function testPartiallyBlockedPage() {
122 $this->setExpectedApiException( 'apierror-blocked-partial' );
124 $user = static::getTestSysop()->getUser();
126 $block = new DatabaseBlock( [
128 'by' => static::getTestSysop()->getUser()->getId(),
132 $block->setRestrictions( [
133 new PageRestriction( 0, Title
::newFromText( self
::$page )->getArticleID() )
137 $revid = array_shift( $this->revs
);
139 $this->doApiRequest( [
140 'action' => 'revisiondelete',
141 'type' => 'revision',
142 'target' => self
::$page,
144 'hide' => 'content|user|comment',
145 'token' => $user->getEditToken(),