wiki.techinc.nl/tests/phpunit/unit/includes/revisionlist/RevisionListBaseTest.php
DannyS712 4a206f1f90 Add tests for RevisionList/RevisionItem classes
Fix RevisionItemBase::getId to actually return an int, as intended

Previously all four classes (RevisionItem, RevisionItemBase,
RevisionList, and RevisionListBase) had no coverage. Now:

+--------------------------------------------+-------+--------+
| Filename                                   | Old % | New %  |
+--------------------------------------------+-------+--------+
| includes/revisionlist/RevisionItem.php     | 0     |  46.77 |
| includes/revisionlist/RevisionItemBase.php | 0     |  70.27 |
| includes/revisionlist/RevisionList.php     | 0     | 100.00 |
| includes/revisionlist/RevisionListBase.php | 0     |  76.32 |
+--------------------------------------------+-------+--------+

Bug: T252076
Change-Id: I3da1ae350986ef6dc54a13ae9275b4c1d03f6e5b
2020-05-12 09:36:44 -07:00

89 lines
2.7 KiB
PHP

<?php
use Wikimedia\Rdbms\IResultWrapper;
use Wikimedia\TestingAccessWrapper;
/**
* @covers RevisionListBase
*
* @author DannyS712
*/
class RevisionListBaseTest extends MediaWikiUnitTestCase {
public function testGetType() {
$revisionListBase = $this->getMockBuilder( RevisionListBase::class )
->disableOriginalConstructor()
->getMockForAbstractClass();
$this->assertNull( $revisionListBase->getType() );
}
public function testReset() {
$revisionListBase = $this->getMockBuilder( RevisionListBase::class )
->disableOriginalConstructor()
->getMockForAbstractClass();
$revisionItemBase = $this->getMockBuilder( RevisionItemBase::class )
->disableOriginalConstructor()
->getMockForAbstractClass();
// Actual contents aren't used
$fakeRow = (object)[ 'key' => 'val' ];
$resultWrapper = $this->getMockBuilder( IResultWrapper::class )
->disableOriginalConstructor()
->getMock();
$resultWrapper->expects( $this->once() )
->method( 'rewind' );
$resultWrapper->expects( $this->once() )
->method( 'current' )
->willReturn( $fakeRow );
$revisionListBase->expects( $this->once() )
->method( 'newItem' )
->with( $fakeRow )
->willReturn( $revisionItemBase );
// res is normally the result of a db query that uses wfGetDB and cannot
// be tested in a unit test
$mockAccess = TestingAccessWrapper::newFromObject( $revisionListBase );
$mockAccess->res = $resultWrapper;
$this->assertSame( $revisionItemBase, $revisionListBase->reset() );
$this->assertSame( $revisionItemBase, $revisionListBase->current() );
}
public function testResultWrapper() {
// Test methods that only depend on the result wrapper
$revisionListBase = $this->getMockBuilder( RevisionListBase::class )
->disableOriginalConstructor()
->getMockForAbstractClass();
$this->assertSame( 0, $revisionListBase->key() );
$this->assertFalse( $revisionListBase->valid() );
$this->assertSame( 0, $revisionListBase->length() );
$resultWrapper = $this->getMockBuilder( IResultWrapper::class )
->disableOriginalConstructor()
->getMock();
$resultWrapper->expects( $this->once() )
->method( 'key' )
->willReturn( 991 );
$resultWrapper->expects( $this->once() )
->method( 'valid' )
->willReturn( true );
$resultWrapper->expects( $this->once() )
->method( 'numRows' )
->willReturn( 457 );
// res is normally the result of a db query that uses wfGetDB and cannot
// be tested in a unit test
$mockAccess = TestingAccessWrapper::newFromObject( $revisionListBase );
$mockAccess->res = $resultWrapper;
$this->assertSame( 991, $revisionListBase->key() );
$this->assertTrue( $revisionListBase->valid() );
$this->assertSame( 457, $revisionListBase->length() );
}
}