wiki.techinc.nl/tests/phpunit/includes/search/SearchResultSetTest.php
Erik Bernhardson 2a43939ffb Push pagination decision for search into SearchEngine
Various code using the search engine shouldn't need to implement it's
own methods, such as over-fetching, to determine if there are more
results available. This should be knowledge internal to search that is
exposed by a boolean.

Change-Id: Ica094428700637dfdedb723b03f6aeadfe12b9f4
2018-06-11 13:35:44 -07:00

61 lines
1.9 KiB
PHP

<?php
class SearchResultSetTest extends MediaWikiTestCase {
/**
* @covers SearchResultSet::getIterator
* @covers SearchResultSet::next
* @covers SearchResultSet::rewind
*/
public function testIterate() {
$result = SearchResult::newFromTitle( Title::newMainPage() );
$resultSet = new MockSearchResultSet( [ $result ] );
$this->assertEquals( 1, $resultSet->numRows() );
$count = 0;
foreach ( $resultSet as $iterResult ) {
$this->assertEquals( $result, $iterResult );
$count++;
}
$this->assertEquals( 1, $count );
$this->hideDeprecated( 'SearchResultSet::rewind' );
$this->hideDeprecated( 'SearchResultSet::next' );
$resultSet->rewind();
$count = 0;
while ( false !== ( $iterResult = $resultSet->next() ) ) {
$this->assertEquals( $result, $iterResult );
$count++;
}
$this->assertEquals( 1, $count );
}
/**
* @covers SearchResultSet::augmentResult
* @covers SearchResultSet::setAugmentedData
*/
public function testDelayedResultAugment() {
$result = SearchResult::newFromTitle( Title::newMainPage() );
$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() {
$result = SearchResult::newFromTitle( Title::newMainPage() );
$resultSet = new MockSearchResultSet( array_fill( 0, 3, $result ) );
$this->assertEquals( 3, count( $resultSet ) );
$this->assertFalse( $resultSet->hasMoreResults() );
$resultSet->shrink( 3 );
$this->assertFalse( $resultSet->hasMoreResults() );
$resultSet->shrink( 2 );
$this->assertTrue( $resultSet->hasMoreResults() );
}
}