aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/integration
diff options
context:
space:
mode:
authordaniel <dkinzler@wikimedia.org>2025-03-10 17:23:30 +0100
committerdaniel <dkinzler@wikimedia.org>2025-03-10 17:23:30 +0100
commit8c53a15ba0fae2677aa8e28055f06ef557595be6 (patch)
tree391918982f5beef831d14a44bcdf41b43b011cac /tests/phpunit/integration
parent59533d29edbf98204b211655ce7e437796c92ff4 (diff)
downloadmediawikicore-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.php101
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
+ );
+ }
+
}