aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--includes/Rest/Handler/Helper/PageContentHelper.php7
-rw-r--r--tests/phpunit/integration/includes/Rest/Handler/Helper/PageContentHelperTest.php101
2 files changed, 106 insertions, 2 deletions
diff --git a/includes/Rest/Handler/Helper/PageContentHelper.php b/includes/Rest/Handler/Helper/PageContentHelper.php
index c6b781b06c7f..160e78585340 100644
--- a/includes/Rest/Handler/Helper/PageContentHelper.php
+++ b/includes/Rest/Handler/Helper/PageContentHelper.php
@@ -281,6 +281,9 @@ class PageContentHelper {
$restrictions[] = 'userhidden';
}
+ $publicUser = $revision->getUser();
+ $publicComment = $revision->getComment();
+
return [
'title' => $title->getPrefixedDBkey(),
'page_id' => $page->getId(),
@@ -294,9 +297,9 @@ class PageContentHelper {
'namespace' => $page->getNamespace(),
'user_id' => $revision->getUser( RevisionRecord::RAW )->getId(),
- 'user_text' => $revision->getUser( RevisionRecord::FOR_PUBLIC )->getName(),
+ 'user_text' => $publicUser ? $publicUser->getName() : null,
+ 'comment' => $publicComment ? $publicComment->text : null,
'timestamp' => wfTimestampOrNull( TS_ISO_8601, $revision->getTimestamp() ),
- 'comment' => $revision->getComment()->text,
'tags' => $tags,
'restrictions' => $restrictions,
'page_language' => $title->getPageLanguage()->getCode(),
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
+ );
+ }
+
}