wiki.techinc.nl/tests/phpunit/unit/includes/CommentFormatter/RevisionCommentBatchTest.php

136 lines
3.1 KiB
PHP
Raw Normal View History

Introduce CommentFormatter 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
2021-07-01 06:55:03 +00:00
<?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();
}
}