CommentParser: * Move comment formatting backend from Linker to a CommentParser service. Allow link existence and file existence to be batched. * Rename $local to $samePage since I think that is clearer. * Rename $title to $selfLinkTarget since it was unclear what the title was used for. * Rename the "autocomment" concept to "section link" in public interfaces, although the old term remains in CSS classes. * Keep unsafe HTML pass-through in separate "unsafe" methods, for easier static analysis and code review. CommentFormatter: * Add CommentFormatter and RowCommentFormatter services as a usable frontend for comment batches, and to replace the Linker static methods. * Provide fluent and parametric interfaces. Linker: * Remove Linker::makeCommentLink() without deprecation -- nothing calls it and it is obviously an internal helper. * Soft-deprecate Linker methods formatComment(), formatLinksInComment(), commentBlock() and revComment(). Caller migration: * CommentFormatter single: Linker, RollbackAction, ApiComparePages, ApiParse * CommentFormatter parametric batch: ImageHistoryPseudoPager * CommentFormatter fluent batch: ApiQueryFilearchive * RowCommentFormatter sequential: History feed, BlocklistPager, ProtectedPagesPager, ApiQueryProtectedTitles * RowCommentFormatter with index: ChangesFeed, ChangesList, ApiQueryDeletedrevs, ApiQueryLogEvents, ApiQueryRecentChanges * RevisionCommentBatch: HistoryPager, ContribsPager Bug: T285917 Change-Id: Ia3fd50a4a13138ba5003d884962da24746d562d0
135 lines
3.1 KiB
PHP
135 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Tests\Unit\CommentFormatter;
|
|
|
|
use ArrayIterator;
|
|
use MediaWiki\CommentFormatter\CommentFormatter;
|
|
use MediaWiki\CommentFormatter\RevisionCommentBatch;
|
|
use MediaWiki\Permissions\Authority;
|
|
use MediaWiki\Permissions\SimpleAuthority;
|
|
use MediaWiki\User\UserIdentityValue;
|
|
use MediaWikiUnitTestCase;
|
|
|
|
/**
|
|
* Trivial unit test with the universe mocked.
|
|
*
|
|
* @covers \MediaWiki\CommentFormatter\RevisionCommentBatch
|
|
*/
|
|
class RevisionCommentBatchTest extends MediaWikiUnitTestCase {
|
|
private function getFormatter( $callback ) {
|
|
return new class( $callback ) extends CommentFormatter {
|
|
private $callback;
|
|
|
|
public function __construct( $callback ) {
|
|
$this->callback = $callback;
|
|
}
|
|
|
|
public function formatRevisions(
|
|
$revisions, Authority $authority, $samePage = false, $isPublic = false,
|
|
$useParentheses = true, $indexById = false
|
|
) {
|
|
( $this->callback )( get_defined_vars() );
|
|
}
|
|
};
|
|
}
|
|
|
|
private function newBatch( $callback ) {
|
|
return new RevisionCommentBatch(
|
|
$this->getFormatter( $callback )
|
|
);
|
|
}
|
|
|
|
private function getAuthority() {
|
|
return new SimpleAuthority(
|
|
new UserIdentityValue( 1, 'Sysop' ),
|
|
[]
|
|
);
|
|
}
|
|
|
|
public function testAuthority() {
|
|
$authority = $this->getAuthority();
|
|
$batch = $this->newBatch(
|
|
function ( $params ) use ( $authority ) {
|
|
$this->assertSame( $authority, $params['authority'] );
|
|
}
|
|
);
|
|
$batch->authority( $authority )->execute();
|
|
}
|
|
|
|
public function testNoAuthority() {
|
|
$this->expectException( \TypeError::class );
|
|
$batch = $this->newBatch(
|
|
static function ( $params ) {
|
|
}
|
|
);
|
|
$batch
|
|
->revisions( [] )
|
|
->execute();
|
|
}
|
|
|
|
public function testRevisions() {
|
|
$revisions = new ArrayIterator( [] );
|
|
$batch = $this->newBatch(
|
|
function ( $params ) use ( $revisions ) {
|
|
$this->assertSame( $revisions, $params['revisions'] );
|
|
// Check default booleans while we have them
|
|
$this->assertFalse( $params['samePage'] );
|
|
$this->assertFalse( $params['isPublic'] );
|
|
$this->assertFalse( $params['useParentheses'] );
|
|
$this->assertFalse( $params['indexById'] );
|
|
}
|
|
);
|
|
$batch
|
|
->authority( $this->getAuthority() )
|
|
->revisions( $revisions )
|
|
->execute();
|
|
}
|
|
|
|
public function testSamePage() {
|
|
$batch = $this->newBatch(
|
|
function ( $params ) {
|
|
$this->assertTrue( $params['samePage'] );
|
|
}
|
|
);
|
|
$batch
|
|
->authority( $this->getAuthority() )
|
|
->samePage()
|
|
->execute();
|
|
}
|
|
|
|
public function testUseParentheses() {
|
|
$batch = $this->newBatch(
|
|
function ( $params ) {
|
|
$this->assertTrue( $params['useParentheses'] );
|
|
}
|
|
);
|
|
$batch
|
|
->authority( $this->getAuthority() )
|
|
->useParentheses()
|
|
->execute();
|
|
}
|
|
|
|
public function hideIfPrivate() {
|
|
$batch = $this->newBatch(
|
|
function ( $params ) {
|
|
$this->assertTrue( $params['isPublic'] );
|
|
}
|
|
);
|
|
$batch
|
|
->authority( $this->getAuthority() )
|
|
->hideIfDeleted()
|
|
->execute();
|
|
}
|
|
|
|
public function indexById() {
|
|
$batch = $this->newBatch(
|
|
function ( $params ) {
|
|
$this->assertTrue( $params['indexById'] );
|
|
}
|
|
);
|
|
$batch
|
|
->authority( $this->getAuthority() )
|
|
->indexById()
|
|
->execute();
|
|
}
|
|
}
|