wiki.techinc.nl/tests/phpunit/unit/includes/Rest/RestTestTrait.php
Ebrahim Byagowi fab78547ad Add namespace to the root classes of ObjectCache
And deprecated aliases for the the no namespaced classes.

ReplicatedBagOStuff that already is deprecated isn't moved.

Bug: T353458
Change-Id: Ie01962517e5b53e59b9721e9996d4f1ea95abb51
2024-07-10 00:14:54 +03:30

107 lines
3.8 KiB
PHP

<?php
namespace MediaWiki\Tests\Rest;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\MainConfigNames;
use MediaWiki\Rest\BasicAccess\StaticBasicAuthorizer;
use MediaWiki\Rest\Module\Module;
use MediaWiki\Rest\Reporter\PHPErrorReporter;
use MediaWiki\Rest\RequestData;
use MediaWiki\Rest\ResponseFactory;
use MediaWiki\Rest\Router;
use MediaWiki\Rest\Validator\Validator;
use MediaWiki\Tests\Rest\Handler\SessionHelperTestTrait;
use MediaWiki\Tests\Unit\Permissions\MockAuthorityTrait;
use Psr\Container\ContainerInterface;
use Wikimedia\ObjectCache\EmptyBagOStuff;
use Wikimedia\ObjectFactory\ObjectFactory;
/**
* A trait providing utility function for testing the REST framework.
* This trait is intended to be used on subclasses of MediaWikiUnitTestCase
* or MediaWikiIntegrationTestCase.
*
* @stable to use
*/
trait RestTestTrait {
use SessionHelperTestTrait;
use MockAuthorityTrait;
/**
* @param array $params Constructor parameters, as an associative array.
* In addition to the actual parameters, the following pseudo-parameters
* are supported:
* - 'config': an associative array of configuration variables, used
* to construct the 'options' parameter.
* - 'request': A request object, used to construct the 'validator' parameter.
* @return Router
*/
private function newRouter( array $params = [] ) {
$responseFactory = new ResponseFactory( [] );
$responseFactory->setShowExceptionDetails( true );
$objectFactory = new ObjectFactory(
$this->getMockForAbstractClass( ContainerInterface::class )
);
$authority = $params['authority'] ?? $this->mockAnonUltimateAuthority();
$config = ( $params['config'] ?? [] ) + [
MainConfigNames::CanonicalServer => 'https://wiki.example.com',
MainConfigNames::InternalServer => 'http://api.local:8080',
MainConfigNames::RestPath => '/rest',
MainConfigNames::ScriptPath => '/w',
MainConfigNames::RightsUrl => 'https://rights.url',
MainConfigNames::RightsText => 'your rights',
MainConfigNames::EmergencyContact => 'admin@test.test',
MainConfigNames::Sitename => 'Test Site',
];
$request = $params['request'] ?? new RequestData();
return new Router(
$params['routeFiles'] ?? [ MW_INSTALL_PATH . '/tests/phpunit/unit/includes/Rest/testRoutes.json' ],
$params['extraRoutes'] ?? [],
$params['options'] ?? new ServiceOptions( Router::CONSTRUCTOR_OPTIONS, $config ),
$params['cacheBag'] ?? new EmptyBagOStuff(),
$params['responseFactory'] ?? $responseFactory,
$params['basicAuth'] ?? new StaticBasicAuthorizer(),
$params['authority'] ?? $authority,
$params['objectFactory'] ?? $objectFactory,
$params['validator'] ?? new Validator( $objectFactory, $request, $authority ),
$params['errorReporter'] ?? new PHPErrorReporter(),
$params['hookContainer'] ?? $this->createHookContainer(),
$params['session'] ?? $this->getSession( true )
);
}
/**
* @since 1.43
* @param array $params Constructor parameters for Module and Router, as an associative array.
* @return Module
*/
private function newModule( array $params ) {
$objectFactory = new ObjectFactory(
$this->getMockForAbstractClass( ContainerInterface::class )
);
$authority = $params['authority'] ?? $this->mockAnonUltimateAuthority();
$request = $params['request'] ?? new RequestData();
$module = $this->getMockBuilder( Module::class )
->setConstructorArgs( [
$params['router'] ?? $this->newRouter( $params ),
$params['pathPrefix'] ?? 'mock',
$params['responseFactory'] ?? new ResponseFactory( [] ),
$params['basicAuth'] ?? new StaticBasicAuthorizer(),
$params['objectFactory'] ?? $objectFactory,
$params['restValidator'] ?? new Validator( $objectFactory, $request, $authority ),
$params['errorReporter'] ?? new PHPErrorReporter()
] )
->onlyMethods( [] )
->getMockForAbstractClass();
return $module;
}
}