5 * @covers ApiQuerySearch
7 class ApiQuerySearchTest
extends ApiTestCase
{
8 public function provideSearchResults() {
10 'empty search result' => [ [], [] ],
11 'has search results' => [
13 [ $this->mockResult( 'Zomg' ) ],
15 'filters broken search results' => [
18 $this->mockResult( 'a' ),
19 $this->mockResult( 'Zomg' )->setBrokenTitle( true ),
20 $this->mockResult( 'b' ),
23 'filters results with missing revision' => [
26 $this->mockResult( 'Zomg' )->setMissingRevision( true ),
27 $this->mockResult( 'b' ),
28 $this->mockResult( 'a' ),
35 * @dataProvider provideSearchResults
37 public function testSearchResults( $expect, $hits, array $params = [] ) {
38 MockSearchEngine
::addMockResults( 'my query', $hits );
39 list( $response, $request ) = $this->doApiRequest( $params +
[
42 'srsearch' => 'my query',
45 foreach ( $response['query']['search'] as $result ) {
46 $titles[] = $result['title'];
48 $this->assertEquals( $expect, $titles );
51 public function provideInterwikiResults() {
53 'empty' => [ [], [] ],
54 'one wiki response' => [
55 [ 'utwiki' => [ 'Qwerty' ] ],
57 SearchResultSet
::SECONDARY_RESULTS
=> [
58 'utwiki' => new MockSearchResultSet( [
59 $this->mockResult( 'Qwerty' )->setInterwikiPrefix( 'utwiki' ),
68 * @dataProvider provideInterwikiResults
70 public function testInterwikiResults( $expect, $hits, array $params = [] ) {
71 MockSearchEngine
::setMockInterwikiResults( $hits );
72 list( $response, $request ) = $this->doApiRequest( $params +
[
75 'srsearch' => 'my query',
76 'srinterwiki' => true,
79 $this->assertArrayNotHasKey( 'interwikisearch', $response['query'] );
83 $this->assertArrayHasKey( 'interwikisearchinfo', $response['query'] );
84 foreach ( $response['query']['interwikisearch'] as $wiki => $wikiResults ) {
86 foreach ( $wikiResults as $wikiResult ) {
87 $results[$wiki][] = $wikiResult['title'];
90 $this->assertEquals( $expect, $results );
93 public function setUp() {
95 MockSearchEngine
::clearMockResults();
96 $this->registerMockSearchEngine();
99 private function registerMockSearchEngine() {
100 $this->setMwGlobals( [
101 'wgSearchType' => MockSearchEngine
::class,
105 private function mockResult( $title ) {
106 return MockSearchResult
::newFromtitle( Title
::newFromText( $title ) );