wiki.techinc.nl/tests/phpunit/includes/search/SearchResultSetTest.php
Daimona Eaytoy 6b1a62e169 Fix more non-database tests accessing the database
Mock the needed services, or set fixed values to avoid DB lookups, when
possible. Add the test to the Database group otherwise, e.g. for things
like Skin and Parser that use global state all over the place.

Change-Id: I8d87013d89accaf04d0ac19cb4b7216290383eb5
2023-08-06 15:30:41 +00:00

87 lines
2.8 KiB
PHP

<?php
use MediaWiki\Revision\RevisionLookup;
use MediaWiki\Title\Title;
class SearchResultSetTest extends MediaWikiIntegrationTestCase {
protected function setUp(): void {
parent::setUp();
$this->setService( 'RevisionLookup', $this->createMock( RevisionLookup::class ) );
}
/**
* @covers SearchResultSet::getIterator
* @covers BaseSearchResultSet::next
* @covers BaseSearchResultSet::rewind
*/
public function testIterate() {
$title = Title::makeTitle( NS_MAIN, __METHOD__ );
$result = SearchResult::newFromTitle( $title );
$resultSet = new MockSearchResultSet( [ $result ] );
$this->assertSame( 1, $resultSet->numRows() );
$count = 0;
foreach ( $resultSet as $iterResult ) {
$this->assertEquals( $result, $iterResult );
$count++;
}
$this->assertSame( 1, $count );
$this->hideDeprecated( 'BaseSearchResultSet::rewind' );
$this->hideDeprecated( 'BaseSearchResultSet::next' );
$resultSet->rewind();
$count = 0;
while ( ( $iterResult = $resultSet->next() ) !== false ) {
$this->assertEquals( $result, $iterResult );
$count++;
}
$this->assertSame( 1, $count );
}
/**
* @covers SearchResultSetTrait::augmentResult
* @covers SearchResultSetTrait::setAugmentedData
*/
public function testDelayedResultAugment() {
$title = Title::makeTitle( NS_MAIN, __METHOD__ );
$title->resetArticleID( 42 );
$result = SearchResult::newFromTitle( $title );
$resultSet = new MockSearchResultSet( [ $result ] );
$resultSet->augmentResult( $result );
$this->assertEquals( [], $result->getExtensionData() );
$resultSet->setAugmentedData( 'foo', [
$result->getTitle()->getArticleID() => 'bar'
] );
$this->assertEquals( [ 'foo' => 'bar' ], $result->getExtensionData() );
}
/**
* @covers SearchResultSet::shrink
* @covers SearchResultSet::count
* @covers SearchResultSet::hasMoreResults
*/
public function testHasMoreResults() {
$title = Title::makeTitle( NS_MAIN, __METHOD__ );
$result = SearchResult::newFromTitle( $title );
$resultSet = new MockSearchResultSet( array_fill( 0, 3, $result ) );
$this->assertCount( 3, $resultSet );
$this->assertFalse( $resultSet->hasMoreResults() );
$resultSet->shrink( 3 );
$this->assertFalse( $resultSet->hasMoreResults() );
$resultSet->shrink( 2 );
$this->assertTrue( $resultSet->hasMoreResults() );
}
/**
* @covers SearchResultSet::shrink
*/
public function testShrink() {
$title = Title::makeTitle( NS_MAIN, __METHOD__ );
$results = array_fill( 0, 3, SearchResult::newFromTitle( $title ) );
$resultSet = new MockSearchResultSet( $results );
$this->assertCount( 3, $resultSet->extractResults() );
$this->assertCount( 3, $resultSet->extractTitles() );
$resultSet->shrink( 1 );
$this->assertCount( 1, $resultSet->extractResults() );
$this->assertCount( 1, $resultSet->extractTitles() );
}
}