diff options
author | daniel <dkinzler@wikimedia.org> | 2025-03-10 17:23:30 +0100 |
---|---|---|
committer | daniel <dkinzler@wikimedia.org> | 2025-03-10 17:23:30 +0100 |
commit | 8c53a15ba0fae2677aa8e28055f06ef557595be6 (patch) | |
tree | 391918982f5beef831d14a44bcdf41b43b011cac /tests/phpunit/integration | |
parent | 59533d29edbf98204b211655ce7e437796c92ff4 (diff) | |
download | mediawikicore-8c53a15ba0fae2677aa8e28055f06ef557595be6.tar.gz mediawikicore-8c53a15ba0fae2677aa8e28055f06ef557595be6.zip |
REST page metadata endpoints: handle supressed data gracefully
Why:
- Revision meta-data output was failingfor revisions with suppressed
user or comment
What:
- Handle suppressed user and comment gracefully
- add regression test
Bug: T386368
Bug: T387397
Change-Id: Ic6d3fc89d24030f5c3fd422637816de9976fc709
Diffstat (limited to 'tests/phpunit/integration')
-rw-r--r-- | tests/phpunit/integration/includes/Rest/Handler/Helper/PageContentHelperTest.php | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/phpunit/integration/includes/Rest/Handler/Helper/PageContentHelperTest.php b/tests/phpunit/integration/includes/Rest/Handler/Helper/PageContentHelperTest.php index e840e72dadcb..dfb074876c7b 100644 --- a/tests/phpunit/integration/includes/Rest/Handler/Helper/PageContentHelperTest.php +++ b/tests/phpunit/integration/includes/Rest/Handler/Helper/PageContentHelperTest.php @@ -3,19 +3,24 @@ namespace MediaWiki\Tests\Rest\Handler\Helper; use Exception; +use MediaWiki\CommentStore\CommentStoreComment; use MediaWiki\Config\ServiceOptions; use MediaWiki\MainConfigNames; use MediaWiki\Page\ExistingPageRecord; +use MediaWiki\Page\PageIdentityValue; use MediaWiki\Permissions\Authority; use MediaWiki\Rest\Handler\Helper\PageContentHelper; use MediaWiki\Rest\HttpException; use MediaWiki\Rest\LocalizedHttpException; use MediaWiki\Rest\Response; +use MediaWiki\Revision\MutableRevisionRecord; use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\SlotRecord; use MediaWiki\Tests\Unit\Permissions\MockAuthorityTrait; use MediaWiki\Title\Title; +use MediaWiki\User\UserIdentityValue; use MediaWikiIntegrationTestCase; +use Wikimedia\TestingAccessWrapper; /** * @covers \MediaWiki\Rest\Handler\Helper\PageContentHelper @@ -366,4 +371,100 @@ class PageContentHelperTest extends MediaWikiIntegrationTestCase { $this->assertEquals( $expected, $data ); } + public function provideConstructRestbaseCompatibleMetadata() { + $pageName = 'User:Morg'; + $page = PageIdentityValue::localIdentity( 7, NS_USER, 'Morg' ); + $user = UserIdentityValue::newRegistered( 444, 'Morg' ); + $comment = CommentStoreComment::newUnsavedComment( 'just an edit' ); + $timestamp = '20220102112233'; + + $rev = new MutableRevisionRecord( $page ); + $rev->setId( 123 ); + $rev->setUser( $user ); + $rev->setComment( $comment ); + $rev->setTimestamp( $timestamp ); + + $expected = [ + 'title' => $pageName, + 'page_id' => 7, + 'rev' => 123, + 'tid' => 'DUMMY', + 'namespace' => NS_USER, + 'user_id' => 444, + 'user_text' => 'Morg', + 'comment' => $comment->text, + 'timestamp' => wfTimestampOrNull( TS_ISO_8601, $timestamp ), + 'tags' => [], + 'restrictions' => [], + 'page_language' => 'en', + 'redirect' => false + ]; + + yield [ + $pageName, + $rev, + $expected + ]; + + // Construct a revision with a hidden comment + $rev = new MutableRevisionRecord( $page ); + $rev->setId( 123 ); + $rev->setUser( $user ); + $rev->setComment( $comment ); + $rev->setTimestamp( $timestamp ); + $rev->setVisibility( RevisionRecord::DELETED_COMMENT ); + + $expectedHiddenComment = [ + 'comment' => null, + 'restrictions' => [ 'commenthidden' ], + ] + $expected; + + yield [ + $pageName, + $rev, + $expectedHiddenComment + ]; + + // Construct a revision with a suppressed user + $rev = new MutableRevisionRecord( $page ); + $rev->setId( 123 ); + $rev->setUser( $user ); + $rev->setComment( $comment ); + $rev->setTimestamp( $timestamp ); + $rev->setVisibility( RevisionRecord::DELETED_USER ); + + $expectedHiddenComment = [ + 'user_text' => null, + 'restrictions' => [ 'userhidden' ], + ] + $expected; + + yield [ + $pageName, + $rev, + $expectedHiddenComment + ]; + } + + /** + * @dataProvider provideConstructRestbaseCompatibleMetadata + */ + public function testConstructRestbaseCompatibleMetadata( + string $pageName, + RevisionRecord $revision, + array $expected + ) { + $helper = $this->newHelper( [ 'title' => $pageName ] ); + + $helperAccess = TestingAccessWrapper::newFromObject( $helper ); + $helperAccess->pageIdentity = $revision->getPage(); + $helperAccess->targetRevision = $revision; + + $data = $helper->constructRestbaseCompatibleMetadata(); + + $this->assertEquals( + $expected, + $data + ); + } + } |