Merge "Fix 'Tags' padding to keep it farther from the edge and document the source...
[lhc/web/wiklou.git] / tests / phpunit / includes / api / ApiQuerySearchTest.php
1 <?php
2
3 /**
4 * @group medium
5 * @covers ApiQuerySearch
6 */
7 class ApiQuerySearchTest extends ApiTestCase {
8 public function provideSearchResults() {
9 return [
10 'empty search result' => [ [], [] ],
11 'has search results' => [
12 [ 'Zomg' ],
13 [ $this->mockResult( 'Zomg' ) ],
14 ],
15 'filters broken search results' => [
16 [ 'A', 'B' ],
17 [
18 $this->mockResult( 'a' ),
19 $this->mockResult( 'Zomg' )->setBrokenTitle( true ),
20 $this->mockResult( 'b' ),
21 ],
22 ],
23 'filters results with missing revision' => [
24 [ 'B', 'A' ],
25 [
26 $this->mockResult( 'Zomg' )->setMissingRevision( true ),
27 $this->mockResult( 'b' ),
28 $this->mockResult( 'a' ),
29 ],
30 ],
31 ];
32 }
33
34 /**
35 * @dataProvider provideSearchResults
36 */
37 public function testSearchResults( $expect, $hits, array $params = [] ) {
38 MockSearchEngine::addMockResults( 'my query', $hits );
39 list( $response, $request ) = $this->doApiRequest( $params + [
40 'action' => 'query',
41 'list' => 'search',
42 'srsearch' => 'my query',
43 ] );
44 $titles = [];
45 foreach ( $response['query']['search'] as $result ) {
46 $titles[] = $result['title'];
47 }
48 $this->assertEquals( $expect, $titles );
49 }
50
51 public function provideInterwikiResults() {
52 return [
53 'empty' => [ [], [] ],
54 'one wiki response' => [
55 [ 'utwiki' => [ 'Qwerty' ] ],
56 [
57 SearchResultSet::SECONDARY_RESULTS => [
58 'utwiki' => new MockSearchResultSet( [
59 $this->mockResult( 'Qwerty' )->setInterwikiPrefix( 'utwiki' ),
60 ] ),
61 ],
62 ]
63 ],
64 ];
65 }
66
67 /**
68 * @dataProvider provideInterwikiResults
69 */
70 public function testInterwikiResults( $expect, $hits, array $params = [] ) {
71 MockSearchEngine::setMockInterwikiResults( $hits );
72 list( $response, $request ) = $this->doApiRequest( $params + [
73 'action' => 'query',
74 'list' => 'search',
75 'srsearch' => 'my query',
76 'srinterwiki' => true,
77 ] );
78 if ( !$expect ) {
79 $this->assertArrayNotHasKey( 'interwikisearch', $response['query'] );
80 return;
81 }
82 $results = [];
83 $this->assertArrayHasKey( 'interwikisearchinfo', $response['query'] );
84 foreach ( $response['query']['interwikisearch'] as $wiki => $wikiResults ) {
85 $results[$wiki] = [];
86 foreach ( $wikiResults as $wikiResult ) {
87 $results[$wiki][] = $wikiResult['title'];
88 }
89 }
90 $this->assertEquals( $expect, $results );
91 }
92
93 public function setUp() {
94 parent::setUp();
95 MockSearchEngine::clearMockResults();
96 $this->registerMockSearchEngine();
97 }
98
99 private function registerMockSearchEngine() {
100 $this->setMwGlobals( [
101 'wgSearchType' => MockSearchEngine::class,
102 ] );
103 }
104
105 private function mockResult( $title ) {
106 return MockSearchResult::newFromtitle( Title::newFromText( $title ) );
107 }
108
109 }