3 namespace MediaWiki\Tests\Rest
;
6 use GuzzleHttp\Psr7\Uri
;
7 use GuzzleHttp\Psr7\Stream
;
8 use MediaWiki\Rest\Handler
;
10 use MediaWiki\Rest\EntryPoint
;
11 use MediaWiki\Rest\RequestData
;
12 use MediaWiki\Rest\ResponseFactory
;
13 use MediaWiki\Rest\Router
;
17 * @covers \MediaWiki\Rest\EntryPoint
18 * @covers \MediaWiki\Rest\Router
20 class EntryPointTest
extends MediaWikiTestCase
{
21 private static $mockHandler;
23 private function createRouter() {
25 [ __DIR__
. '/testRoutes.json' ],
29 new ResponseFactory() );
32 private function createWebResponse() {
33 return $this->getMockBuilder( WebResponse
::class )
34 ->setMethods( [ 'header' ] )
38 public static function mockHandlerHeader() {
39 return new class extends Handler
{
40 public function execute() {
41 $response = $this->getResponseFactory()->create();
42 $response->setHeader( 'Foo', 'Bar' );
48 public function testHeader() {
49 $webResponse = $this->createWebResponse();
50 $webResponse->expects( $this->any() )
53 [ 'HTTP/1.1 200 OK', true, null ],
54 [ 'Foo: Bar', true, null ]
57 $entryPoint = new EntryPoint(
58 new RequestData( [ 'uri' => new Uri( '/rest/mock/EntryPoint/header' ) ] ),
60 $this->createRouter() );
61 $entryPoint->execute();
62 $this->assertTrue( true );
65 public static function mockHandlerBodyRewind() {
66 return new class extends Handler
{
67 public function execute() {
68 $response = $this->getResponseFactory()->create();
69 $stream = new Stream( fopen( 'php://memory', 'w+' ) );
70 $stream->write( 'hello' );
71 $response->setBody( $stream );
78 * Make sure EntryPoint rewinds a seekable body stream before reading.
80 public function testBodyRewind() {
81 $entryPoint = new EntryPoint(
82 new RequestData( [ 'uri' => new Uri( '/rest/mock/EntryPoint/bodyRewind' ) ] ),
83 $this->createWebResponse(),
84 $this->createRouter() );
86 $entryPoint->execute();
87 $this->assertSame( 'hello', ob_get_clean() );