Avoid Database::tableName in WikiExporter
[lhc/web/wiklou.git] / tests / phpunit / includes / Rest / EntryPointTest.php
1 <?php
2
3 namespace MediaWiki\Tests\Rest;
4
5 use EmptyBagOStuff;
6 use GuzzleHttp\Psr7\Uri;
7 use GuzzleHttp\Psr7\Stream;
8 use MediaWiki\Rest\BasicAccess\StaticBasicAuthorizer;
9 use MediaWiki\Rest\Handler;
10 use MediaWiki\Rest\EntryPoint;
11 use MediaWiki\Rest\RequestData;
12 use MediaWiki\Rest\ResponseFactory;
13 use MediaWiki\Rest\Router;
14 use RequestContext;
15 use WebResponse;
16
17 /**
18 * @covers \MediaWiki\Rest\EntryPoint
19 * @covers \MediaWiki\Rest\Router
20 */
21 class EntryPointTest extends \MediaWikiTestCase {
22 private static $mockHandler;
23
24 private function createRouter() {
25 global $IP;
26
27 return new Router(
28 [ "$IP/tests/phpunit/unit/includes/Rest/testRoutes.json" ],
29 [],
30 '/rest',
31 new EmptyBagOStuff(),
32 new ResponseFactory(),
33 new StaticBasicAuthorizer() );
34 }
35
36 private function createWebResponse() {
37 return $this->getMockBuilder( WebResponse::class )
38 ->setMethods( [ 'header' ] )
39 ->getMock();
40 }
41
42 public static function mockHandlerHeader() {
43 return new class extends Handler {
44 public function execute() {
45 $response = $this->getResponseFactory()->create();
46 $response->setHeader( 'Foo', 'Bar' );
47 return $response;
48 }
49 };
50 }
51
52 public function testHeader() {
53 $webResponse = $this->createWebResponse();
54 $webResponse->expects( $this->any() )
55 ->method( 'header' )
56 ->withConsecutive(
57 [ 'HTTP/1.1 200 OK', true, null ],
58 [ 'Foo: Bar', true, null ]
59 );
60
61 $entryPoint = new EntryPoint(
62 RequestContext::getMain(),
63 new RequestData( [ 'uri' => new Uri( '/rest/mock/EntryPoint/header' ) ] ),
64 $webResponse,
65 $this->createRouter() );
66 $entryPoint->execute();
67 $this->assertTrue( true );
68 }
69
70 public static function mockHandlerBodyRewind() {
71 return new class extends Handler {
72 public function execute() {
73 $response = $this->getResponseFactory()->create();
74 $stream = new Stream( fopen( 'php://memory', 'w+' ) );
75 $stream->write( 'hello' );
76 $response->setBody( $stream );
77 return $response;
78 }
79 };
80 }
81
82 /**
83 * Make sure EntryPoint rewinds a seekable body stream before reading.
84 */
85 public function testBodyRewind() {
86 $entryPoint = new EntryPoint(
87 RequestContext::getMain(),
88 new RequestData( [ 'uri' => new Uri( '/rest/mock/EntryPoint/bodyRewind' ) ] ),
89 $this->createWebResponse(),
90 $this->createRouter() );
91 ob_start();
92 $entryPoint->execute();
93 $this->assertSame( 'hello', ob_get_clean() );
94 }
95
96 }