wiki.techinc.nl/tests/phpunit/unit/includes/Rest/Handler/ActionModuleBasedHandlerTestTrait.php
Daimona Eaytoy 7a494d1fa4 tests: Upgrade PHPUnit from 8.5+ to 9.5+
* DeprecatedHooksTest: Don't use assertContains().
* Replace uses of deprecated asserts:
  - assertFileNotExists() -> assertFileDoesNotExist()
* Update hierarchy of MediaWikiPHPUnitResultPrinter, since ResultPrinter
  is an interface in PHPUnit 9.
* Remove temporary forward-compat methods.
* Remove directories that don't exist from tests/phpunit/suite.xml, since
  they now make PHPUnit exit:
   - tests/phpunit/skins, it used to have SideBarTest, then moved to
     tests/phpunit/includes/skins
   - tests/phpunit/documentation, it used to have ReleaseNotesTest, then
     moved to tests/phpunit/unit/documentation
* Update configuration with --migrate-configuration and reformat.
* Avoid redefining getMockBuilder() in
  ActionModuleBasedHandlerTestTrait, use a @method annotation instead.
* In RCCacheEntryFactoryTest, avoid using internal PHPUnit logic for
  HTML validation, and use native PHP methods instead. The code was
  copied from Xml::load (moved to \Xml\Loader::load in PHPUnit 9) and
  simplified for this use case.

Bug: T243600
Bug: T262076
Change-Id: I851b9158b73d0cfc315eed9d63b15c54b05895e3
2022-10-08 02:03:55 +02:00

93 lines
2.5 KiB
PHP

<?php
namespace MediaWiki\Tests\Rest\Handler;
use ApiBase;
use ApiMain;
use Exception;
use FauxRequest;
use Language;
use PHPUnit\Framework\MockObject\MockBuilder;
use PHPUnit\Framework\MockObject\MockObject;
use RequestContext;
/**
* A trait providing utility functions for testing Handler classes
* derived from ActionModuleBasedHandler.
* This trait is intended to be used on subclasses of MediaWikiUnitTestCase
* or MediaWikiIntegrationTestCase.
*
* @package MediaWiki\Tests\Rest\Handler
* @method MockBuilder getMockBuilder(string $className)
*/
trait ActionModuleBasedHandlerTestTrait {
use HandlerTestTrait;
/**
* @param ApiMain $main
* @param string $name
* @param array $resultData
* @param Exception|null $throwException
*
* @return ApiBase|MockObject
*/
private function getDummyApiModule(
ApiMain $main,
$name,
$resultData,
Exception $throwException = null
) {
/** @var ApiBase|MockObject $module */
$module = $this->getMockBuilder( ApiBase::class )
->setConstructorArgs( [ $main, $name ] )
->onlyMethods( [ 'execute' ] )
->getMock();
$module->method( 'execute' )
->willReturnCallback(
static function () use ( $module, $resultData, $throwException ) {
if ( $throwException ) {
throw $throwException;
}
$res = $module->getResult();
foreach ( $resultData as $key => $value ) {
$res->addValue( null, $key, $value );
}
}
);
return $module;
}
/**
* @param bool $csrfSafe
* @return ApiMain
*/
private function getApiMain( $csrfSafe = false ) {
$session = $this->getSession( $csrfSafe );
// NOTE: This being a FauxRequest instance triggers special case behavior
// in ApiMain, causing ApiMain::isInternalMode() to return true. Among other things,
// this causes ApiMain to throw errors rather than encode them in the result data.
/** @var MockObject|FauxRequest $fauxRequest */
$fauxRequest = $this->getMockBuilder( FauxRequest::class )
->onlyMethods( [ 'getSession', 'getSessionId' ] )
->getMock();
$fauxRequest->method( 'getSession' )->willReturn( $session );
$fauxRequest->method( 'getSessionId' )->willReturn( $session->getSessionId() );
/** @var Language|MockObject $language */
$language = $this->createNoOpMock( Language::class );
$testContext = RequestContext::getMain();
$fauxContext = new RequestContext();
$fauxContext->setRequest( $fauxRequest );
$fauxContext->setUser( $testContext->getUser() );
$fauxContext->setLanguage( $language );
return new ApiMain( $fauxContext, true );
}
}