wiki.techinc.nl/tests/phpunit/integration/includes/revisionlist/RevisionListTest.php
libraryupgrader 5357695270 build: Updating dependencies
composer:
* mediawiki/mediawiki-codesniffer: 36.0.0 → 37.0.0
  The following sniffs now pass and were enabled:
  * Generic.ControlStructures.InlineControlStructure
  * MediaWiki.PHPUnit.AssertCount.NotUsed

npm:
* svgo: 2.3.0 → 2.3.1
  * https://npmjs.com/advisories/1754 (CVE-2021-33587)

Change-Id: I2a9bbee2fecbf7259876d335f565ece4b3622426
2021-07-22 03:36:05 +00:00

132 lines
3.6 KiB
PHP

<?php
use MediaWiki\MediaWikiServices;
use MediaWiki\Page\PageIdentity;
use MediaWiki\Page\PageIdentityValue;
use Wikimedia\Rdbms\FakeResultWrapper;
use Wikimedia\Rdbms\IDatabase;
/**
* @covers RevisionList
* @covers RevisionListBase
* @covers RevisionItem
* @covers RevisionItemBase
* @group Database
*
* @author DannyS712
*/
class RevisionListTest extends MediaWikiIntegrationTestCase {
protected function setUp(): void {
parent::setUp();
$this->tablesUsed[] = 'revision';
$this->tablesUsed[] = 'page';
$this->tablesUsed[] = 'comment';
$this->tablesUsed[] = 'content';
$this->tablesUsed[] = 'user';
}
public function testGetType() {
$context = new RequestContext();
$page = new PageIdentityValue( 123, NS_MAIN, __METHOD__, PageIdentity::LOCAL );
$revisionList = new RevisionList( $context, $page );
$this->assertSame(
'revision',
$revisionList->getType()
);
}
/**
* @dataProvider provideTestDoQuery
*/
public function testDoQuery( $filterIds ) {
$context = new RequestContext();
$page = new PageIdentityValue( 123, NS_MAIN, __METHOD__, PageIdentity::LOCAL );
$revisionList = new RevisionList( $context, $page );
$conds = [ 'rev_page' => 123 ];
if ( $filterIds !== false ) {
$revisionList->filterByIds( $filterIds );
$conds['rev_id'] = $filterIds;
}
$revQuery = MediaWikiServices::getInstance()
->getRevisionStore()
->getQueryInfo( [ 'page', 'user' ] );
$db = $this->createMock( IDatabase::class );
$db->expects( $this->once() )
->method( 'select' )
->with(
$revQuery['tables'],
$revQuery['fields'],
$conds,
'RevisionList::doQuery',
[ 'ORDER BY' => 'rev_id DESC' ],
$revQuery['joins']
)
->willReturn(
new FakeResultWrapper( [] )
);
$revisionList->doQuery( $db );
}
public function provideTestDoQuery() {
return [
'no filter' => [ false ],
'with filter' => [ [ 1, 2, 91 ] ],
];
}
public function testNewItem() {
// Need a row that is valid for RevisionFactory::newRevisionFromRow
$wikiPage = $this->getExistingTestPage( __METHOD__ );
$currentRevId = $wikiPage->getRevisionRecord()->getId();
$revQuery = MediaWikiServices::getInstance()
->getRevisionStore()
->getQueryInfo( [ 'page', 'user' ] );
$row = $this->db->selectRow(
$revQuery['tables'],
$revQuery['fields'],
[ 'rev_id' => $currentRevId ],
__METHOD__,
[],
$revQuery['joins']
);
$context = new RequestContext();
$context->setUser( $this->getTestSysop()->getUser() );
$page = new PageIdentityValue( 123, NS_MAIN, __METHOD__, PageIdentity::LOCAL );
$revisionList = new RevisionList( $context, $page );
$revisionItem = $revisionList->newItem( $row );
$this->assertInstanceOf( RevisionItem::class, $revisionItem );
// Tests for RevisionItem getters
$this->assertSame( 'rev_id', $revisionItem->getIdField() );
$this->assertSame( 'rev_timestamp', $revisionItem->getTimestampField() );
$this->assertSame( 'rev_user', $revisionItem->getAuthorIdField() );
$this->assertSame( 'rev_user_text', $revisionItem->getAuthorNameField() );
// Tests for RevisionItemBase getters that are not overridden
$this->assertSame( $currentRevId, $revisionItem->getId() );
$this->assertSame( intval( $row->rev_user ), $revisionItem->getAuthorId() );
$this->assertSame( strval( $row->rev_user_text ), $revisionItem->getAuthorName() );
$this->assertSame(
wfTimestamp( TS_MW, $row->rev_timestamp ),
$revisionItem->getTimestamp()
);
// Text of the latest revision cannot be deleted, so it is always viewable
$this->assertTrue( $revisionItem->canView() );
$this->assertTrue( $revisionItem->canViewContent() );
$this->assertFalse( $revisionItem->isDeleted() );
}
}