3 namespace MediaWiki\Tests\Rest
;
6 use GuzzleHttp\Psr7\Uri
;
7 use GuzzleHttp\Psr7\Stream
;
8 use MediaWiki\Permissions\PermissionManager
;
9 use MediaWiki\Rest\BasicAccess\StaticBasicAuthorizer
;
10 use MediaWiki\Rest\Handler
;
11 use MediaWiki\Rest\EntryPoint
;
12 use MediaWiki\Rest\RequestData
;
13 use MediaWiki\Rest\RequestInterface
;
14 use MediaWiki\Rest\ResponseFactory
;
15 use MediaWiki\Rest\Router
;
16 use MediaWiki\Rest\Validator\Validator
;
17 use Psr\Container\ContainerInterface
;
20 use Wikimedia\ObjectFactory
;
24 * @covers \MediaWiki\Rest\EntryPoint
25 * @covers \MediaWiki\Rest\Router
27 class EntryPointTest
extends \MediaWikiTestCase
{
28 private static $mockHandler;
30 private function createRouter( RequestInterface
$request ) {
33 $objectFactory = new ObjectFactory(
34 $this->getMockForAbstractClass( ContainerInterface
::class )
36 $permissionManager = $this->createMock( PermissionManager
::class );
39 [ "$IP/tests/phpunit/unit/includes/Rest/testRoutes.json" ],
43 new ResponseFactory( [] ),
44 new StaticBasicAuthorizer(),
46 new Validator( $objectFactory, $permissionManager, $request, new User
)
50 private function createWebResponse() {
51 return $this->getMockBuilder( WebResponse
::class )
52 ->setMethods( [ 'header' ] )
56 public static function mockHandlerHeader() {
57 return new class extends Handler
{
58 public function execute() {
59 $response = $this->getResponseFactory()->create();
60 $response->setHeader( 'Foo', 'Bar' );
66 public function testHeader() {
67 $webResponse = $this->createWebResponse();
68 $webResponse->expects( $this->any() )
71 [ 'HTTP/1.1 200 OK', true, null ],
72 [ 'Foo: Bar', true, null ]
75 $request = new RequestData( [ 'uri' => new Uri( '/rest/mock/EntryPoint/header' ) ] );
76 $entryPoint = new EntryPoint(
77 RequestContext
::getMain(),
80 $this->createRouter( $request ) );
81 $entryPoint->execute();
82 $this->assertTrue( true );
85 public static function mockHandlerBodyRewind() {
86 return new class extends Handler
{
87 public function execute() {
88 $response = $this->getResponseFactory()->create();
89 $stream = new Stream( fopen( 'php://memory', 'w+' ) );
90 $stream->write( 'hello' );
91 $response->setBody( $stream );
98 * Make sure EntryPoint rewinds a seekable body stream before reading.
100 public function testBodyRewind() {
101 $request = new RequestData( [ 'uri' => new Uri( '/rest/mock/EntryPoint/bodyRewind' ) ] );
102 $entryPoint = new EntryPoint(
103 RequestContext
::getMain(),
105 $this->createWebResponse(),
106 $this->createRouter( $request ) );
108 $entryPoint->execute();
109 $this->assertSame( 'hello', ob_get_clean() );