wiki.techinc.nl/tests/phpunit/includes/Rest/EntryPointTest.php
Alexander Vorwerk 9b09bf3112 Use updated ObjectFactory namespace
Depends-On: I99c5e5664d2401c36a9890f148eba7c25e6e8324
Depends-On: I48ab818b2965da14af15ef370aa83ad9455badd9
Depends-On: I018371e4b77911e56152ca7b2df734afc73f58a5
Change-Id: I04ebdb52102f6191d49a9cc70b1f98308299e72f
2022-03-09 23:04:51 +00:00

130 lines
3.3 KiB
PHP

<?php
namespace MediaWiki\Tests\Rest;
use EmptyBagOStuff;
use GuzzleHttp\Psr7\Stream;
use GuzzleHttp\Psr7\Uri;
use MediaWiki\Permissions\UltimateAuthority;
use MediaWiki\Rest\BasicAccess\StaticBasicAuthorizer;
use MediaWiki\Rest\CorsUtils;
use MediaWiki\Rest\EntryPoint;
use MediaWiki\Rest\Handler;
use MediaWiki\Rest\Reporter\PHPErrorReporter;
use MediaWiki\Rest\RequestData;
use MediaWiki\Rest\RequestInterface;
use MediaWiki\Rest\ResponseFactory;
use MediaWiki\Rest\Router;
use MediaWiki\Rest\Validator\Validator;
use MediaWiki\User\UserIdentityValue;
use Psr\Container\ContainerInterface;
use RequestContext;
use WebResponse;
use Wikimedia\ObjectFactory\ObjectFactory;
/**
* @covers \MediaWiki\Rest\EntryPoint
* @covers \MediaWiki\Rest\Router
*/
class EntryPointTest extends \MediaWikiIntegrationTestCase {
private function createRouter( RequestInterface $request ) {
global $IP;
$objectFactory = new ObjectFactory(
$this->getMockForAbstractClass( ContainerInterface::class )
);
$user = new UserIdentityValue( 0, __CLASS__ );
$authority = new UltimateAuthority( $user );
return new Router(
[ "$IP/tests/phpunit/unit/includes/Rest/testRoutes.json" ],
[],
'http://wiki.example.com',
'/rest',
new EmptyBagOStuff(),
new ResponseFactory( [] ),
new StaticBasicAuthorizer(),
$authority,
$objectFactory,
new Validator( $objectFactory, $request, $authority ),
new PHPErrorReporter(),
$this->createHookContainer()
);
}
private function createWebResponse() {
return $this->getMockBuilder( WebResponse::class )
->onlyMethods( [ 'header' ] )
->getMock();
}
private function createCorsUtils() {
$cors = $this->createMock( CorsUtils::class );
$cors->method( 'modifyResponse' )
->will( $this->returnArgument( 1 ) );
return $cors;
}
public static function mockHandlerHeader() {
return new class extends Handler {
public function execute() {
$response = $this->getResponseFactory()->create();
$response->setHeader( 'Foo', 'Bar' );
return $response;
}
};
}
public function testHeader() {
$webResponse = $this->createWebResponse();
$webResponse->method( 'header' )
->withConsecutive(
[ 'HTTP/1.1 200 OK', true, null ],
[ 'Foo: Bar', true, null ]
);
$request = new RequestData( [ 'uri' => new Uri( '/rest/mock/EntryPoint/header' ) ] );
$entryPoint = new EntryPoint(
RequestContext::getMain(),
$request,
$webResponse,
$this->createRouter( $request ),
$this->createCorsUtils()
);
$entryPoint->execute();
$this->assertTrue( true );
}
public static function mockHandlerBodyRewind() {
return new class extends Handler {
public function execute() {
$response = $this->getResponseFactory()->create();
$stream = new Stream( fopen( 'php://memory', 'w+' ) );
$stream->write( 'hello' );
$response->setBody( $stream );
return $response;
}
};
}
/**
* Make sure EntryPoint rewinds a seekable body stream before reading.
*/
public function testBodyRewind() {
$request = new RequestData( [ 'uri' => new Uri( '/rest/mock/EntryPoint/bodyRewind' ) ] );
$entryPoint = new EntryPoint(
RequestContext::getMain(),
$request,
$this->createWebResponse(),
$this->createRouter( $request ),
$this->createCorsUtils()
);
ob_start();
$entryPoint->execute();
$this->assertSame( 'hello', ob_get_clean() );
}
}