wiki.techinc.nl/tests/phpunit/mocks/search/MockSearchEngine.php
daniel 855988fd0e LinkCache: soft deprecate addGoodLinkObj()
addGoodLinkObj() has many optional arguments, but omitting them actually
means corrupting the cache.

Nearly all existing callers are in tests.
So LinkCacheTestTrait::addGoodLinkObject() was created only
for testing. It is better to have this method in the
trait, because building the row directly in each test
would make these tests brittle against schema changes.

The only usage in WMF production code was in WikiPage and has been
fixed.

Bug: T284955
Change-Id: I03a2bd9ed64fcc0281ee29a286c8db395a9e03d9
2021-09-10 16:00:02 +02:00

50 lines
1.4 KiB
PHP

<?php
class MockSearchEngine extends SearchEngine {
use LinkCacheTestTrait;
/** @var SearchResult[][] */
private static $results = [];
/** @var ISearchResultSet[][] */
private static $interwikiResults = [];
public static function clearMockResults() {
self::$results = [];
self::$interwikiResults = [];
}
/**
* @param string $query The query searched for *after* initial
* transformations have been applied.
* @param SearchResult[] $results The results to return for $query
*/
public static function addMockResults( $query, array $results ) {
$mockSearchEngine = new self();
foreach ( $results as &$result ) {
// Resolve deferred results; needed to work around T203279
if ( is_callable( $result ) ) {
$result = $result();
}
// TODO: better page ids? Does it matter?
$mockSearchEngine->addGoodLinkObject( mt_rand(), $result->getTitle() );
}
self::$results[$query] = $results;
}
/**
* @param ISearchResultSet[][] $interwikiResults
*/
public static function setMockInterwikiResults( array $interwikiResults ) {
self::$interwikiResults = $interwikiResults;
}
protected function doSearchText( $term ) {
if ( isset( self::$results[ $term ] ) ) {
$results = array_slice( self::$results[ $term ], $this->offset, $this->limit );
} else {
$results = [];
}
return new MockSearchResultSet( $results, self::$interwikiResults );
}
}