Push pagination decision for search into SearchEngine
[lhc/web/wiklou.git] / tests / phpunit / includes / api / ApiQueryPrefixSearchTest.php
1 <?php
2
3 /**
4 * @group API
5 * @group medium
6 *
7 * @covers ApiQueryPrefixSearch
8 */
9 class ApiQueryPrefixSearchTest extends ApiTestCase {
10 public function offsetContinueProvider() {
11 return [
12 'no offset' => [ 2, 2, 0, 2 ],
13 'with offset' => [ 7, 2, 5, 2 ],
14 'past end, no offset' => [ null, 11, 0, 20 ],
15 'past end, with offset' => [ null, 5, 6, 10 ],
16 ];
17 }
18
19 /**
20 * @dataProvider offsetContinueProvider
21 */
22 public function testOffsetContinue( $expectedOffset, $expectedResults, $offset, $limit ) {
23 $this->registerMockSearchEngine();
24 $response = $this->doApiRequest( [
25 'action' => 'query',
26 'list' => 'prefixsearch',
27 'pssearch' => 'example query terms',
28 'psoffset' => $offset,
29 'pslimit' => $limit,
30 ] );
31 $result = $response[0];
32 $this->assertArrayNotHasKey( 'warnings', $result );
33 $suggestions = $result['query']['prefixsearch'];
34 $this->assertCount( $expectedResults, $suggestions );
35 if ( $expectedOffset == null ) {
36 $this->assertArrayNotHasKey( 'continue', $result );
37 } else {
38 $this->assertArrayHasKey( 'continue', $result );
39 $this->assertEquals( $expectedOffset, $result['continue']['psoffset'] );
40 }
41 }
42
43 private function registerMockSearchEngine() {
44 $this->setMwGlobals( [
45 'wgSearchType' => MockCompletionSearchEngine::class,
46 ] );
47 }
48 }