| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 
 | <?php
namespace MediaWiki\Tests\Api;
use MediaWiki\Api\ApiMain;
use MediaWiki\Api\ApiOpenSearch;
use MediaWiki\Context\RequestContext;
use MediaWikiIntegrationTestCase;
use SearchEngine;
use SearchEngineConfig;
use SearchEngineFactory;
use Wikimedia\ParamValidator\ParamValidator;
/**
 * TODO convert to unit test, no integration is needed
 *
 * @covers \MediaWiki\Api\ApiOpenSearch
 */
class ApiOpenSearchTest extends MediaWikiIntegrationTestCase {
	public function testGetAllowedParams() {
		$config = $this->replaceSearchEngineConfig();
		$config->method( 'getSearchTypes' )
			->willReturn( [ 'the one ring' ] );
		[ $engine, $engineFactory ] = $this->replaceSearchEngine();
		$ctx = new RequestContext();
		$apiMain = new ApiMain( $ctx );
		$api = new ApiOpenSearch(
			$apiMain,
			'opensearch',
			$this->getServiceContainer()->getLinkBatchFactory(),
			$config,
			$engineFactory,
			$this->getServiceContainer()->getUrlUtils()
		);
		$engine->method( 'getProfiles' )
			->willReturnMap( [
				[ SearchEngine::COMPLETION_PROFILE_TYPE, $api->getUser(), [
					[
						'name' => 'normal',
						'desc-message' => 'normal-message',
						'default' => true,
					],
					[
						'name' => 'strict',
						'desc-message' => 'strict-message',
					],
				] ],
			] );
		$params = $api->getAllowedParams();
		$this->assertArrayNotHasKey( 'offset', $params );
		$this->assertArrayHasKey( 'profile', $params, print_r( $params, true ) );
		$this->assertEquals( 'normal', $params['profile'][ParamValidator::PARAM_DEFAULT] );
	}
	private function replaceSearchEngineConfig() {
		$config = $this->createMock( SearchEngineConfig::class );
		$this->setService( 'SearchEngineConfig', $config );
		return $config;
	}
	private function replaceSearchEngine() {
		$engine = $this->createMock( SearchEngine::class );
		$engineFactory = $this->createMock( SearchEngineFactory::class );
		$engineFactory->method( 'create' )
			->willReturn( $engine );
		$this->setService( 'SearchEngineFactory', $engineFactory );
		return [ $engine, $engineFactory ];
	}
}
 |