diff options
Diffstat (limited to 'www/wiki/tests/phpunit/includes/api/ApiRevisionDeleteTest.php')
-rw-r--r-- | www/wiki/tests/phpunit/includes/api/ApiRevisionDeleteTest.php | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/includes/api/ApiRevisionDeleteTest.php b/www/wiki/tests/phpunit/includes/api/ApiRevisionDeleteTest.php new file mode 100644 index 00000000..a4ca8a10 --- /dev/null +++ b/www/wiki/tests/phpunit/includes/api/ApiRevisionDeleteTest.php @@ -0,0 +1,117 @@ +<?php + +/** + * Tests for action=revisiondelete + * @covers APIRevisionDelete + * @group API + * @group medium + * @group Database + */ +class ApiRevisionDeleteTest extends ApiTestCase { + + public static $page = 'Help:ApiRevDel_test'; + public $revs = []; + + protected function setUp() { + // Needs to be before setup since this gets cached + $this->mergeMwGlobalArrayValue( + 'wgGroupPermissions', + [ 'sysop' => [ 'deleterevision' => true ] ] + ); + parent::setUp(); + // Make a few edits for us to play with + for ( $i = 1; $i <= 5; $i++ ) { + self::editPage( self::$page, MWCryptRand::generateHex( 10 ), 'summary' ); + $this->revs[] = Title::newFromText( self::$page ) + ->getLatestRevID( Title::GAID_FOR_UPDATE ); + } + } + + public function testHidingRevisions() { + $user = self::$users['sysop']->getUser(); + $revid = array_shift( $this->revs ); + $out = $this->doApiRequest( [ + 'action' => 'revisiondelete', + 'type' => 'revision', + 'target' => self::$page, + 'ids' => $revid, + 'hide' => 'content|user|comment', + 'token' => $user->getEditToken(), + ] ); + // Check the output + $out = $out[0]['revisiondelete']; + $this->assertEquals( $out['status'], 'Success' ); + $this->assertArrayHasKey( 'items', $out ); + $item = $out['items'][0]; + $this->assertTrue( $item['userhidden'], 'userhidden' ); + $this->assertTrue( $item['commenthidden'], 'commenthidden' ); + $this->assertTrue( $item['texthidden'], 'texthidden' ); + $this->assertEquals( $item['id'], $revid ); + + // Now check that that revision was actually hidden + $rev = Revision::newFromId( $revid ); + $this->assertEquals( $rev->getContent( Revision::FOR_PUBLIC ), null ); + $this->assertEquals( $rev->getComment( Revision::FOR_PUBLIC ), '' ); + $this->assertEquals( $rev->getUser( Revision::FOR_PUBLIC ), 0 ); + + // Now test unhiding! + $out2 = $this->doApiRequest( [ + 'action' => 'revisiondelete', + 'type' => 'revision', + 'target' => self::$page, + 'ids' => $revid, + 'show' => 'content|user|comment', + 'token' => $user->getEditToken(), + ] ); + + // Check the output + $out2 = $out2[0]['revisiondelete']; + $this->assertEquals( $out2['status'], 'Success' ); + $this->assertArrayHasKey( 'items', $out2 ); + $item = $out2['items'][0]; + + $this->assertFalse( $item['userhidden'], 'userhidden' ); + $this->assertFalse( $item['commenthidden'], 'commenthidden' ); + $this->assertFalse( $item['texthidden'], 'texthidden' ); + + $this->assertEquals( $item['id'], $revid ); + + $rev = Revision::newFromId( $revid ); + $this->assertNotEquals( $rev->getContent( Revision::FOR_PUBLIC ), null ); + $this->assertNotEquals( $rev->getComment( Revision::FOR_PUBLIC ), '' ); + $this->assertNotEquals( $rev->getUser( Revision::FOR_PUBLIC ), 0 ); + } + + public function testUnhidingOutput() { + $user = self::$users['sysop']->getUser(); + $revid = array_shift( $this->revs ); + // Hide revisions + $this->doApiRequest( [ + 'action' => 'revisiondelete', + 'type' => 'revision', + 'target' => self::$page, + 'ids' => $revid, + 'hide' => 'content|user|comment', + 'token' => $user->getEditToken(), + ] ); + + $out = $this->doApiRequest( [ + 'action' => 'revisiondelete', + 'type' => 'revision', + 'target' => self::$page, + 'ids' => $revid, + 'show' => 'comment', + 'token' => $user->getEditToken(), + ] ); + $out = $out[0]['revisiondelete']; + $this->assertEquals( $out['status'], 'Success' ); + $this->assertArrayHasKey( 'items', $out ); + $item = $out['items'][0]; + // Check it has userhidden & texthidden + // but not commenthidden + $this->assertTrue( $item['userhidden'], 'userhidden' ); + $this->assertFalse( $item['commenthidden'], 'commenthidden' ); + $this->assertTrue( $item['texthidden'], 'texthidden' ); + $this->assertEquals( $item['id'], $revid ); + } +} |