From 41acd148f247e8fd7d29851e5f47e72e34fbad72 Mon Sep 17 00:00:00 2001 From: Oliver Fabel <28701799+ofabel@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:48:33 +0200 Subject: [PATCH] dev: pass symfony http request in environments without superglobals --- src/Request.php | 6 ++++-- src/Tus/Server.php | 4 ++-- tests/RequestTest.php | 27 +++++++++++++++++++++++++++ tests/Tus/ServerTest.php | 37 +++++++++++++++++++++++++++---------- 4 files changed, 60 insertions(+), 14 deletions(-) diff --git a/src/Request.php b/src/Request.php index c6df760..f4c09d6 100644 --- a/src/Request.php +++ b/src/Request.php @@ -13,10 +13,12 @@ class Request /** * Request constructor. */ - public function __construct() + public function __construct(HttpRequest $request = null) { - if (null === $this->request) { + if (null === $request) { $this->request = HttpRequest::createFromGlobals(); + } else { + $this->request = $request; } } diff --git a/src/Tus/Server.php b/src/Tus/Server.php index 8c4d353..6c1fd60 100644 --- a/src/Tus/Server.php +++ b/src/Tus/Server.php @@ -80,9 +80,9 @@ class Server extends AbstractTus * * @throws \ReflectionException */ - public function __construct($cacheAdapter = 'file') + public function __construct($cacheAdapter = 'file', HttpRequest $request = null) { - $this->request = new Request(); + $this->request = new Request($request); $this->response = new Response(); $this->middleware = new Middleware(); $this->uploadDir = \dirname(__DIR__, 2) . '/' . 'uploads'; diff --git a/tests/RequestTest.php b/tests/RequestTest.php index 863d629..6ca2aa4 100644 --- a/tests/RequestTest.php +++ b/tests/RequestTest.php @@ -2,6 +2,7 @@ namespace TusPhp\Test; +use Mockery as m; use TusPhp\Request; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request as HttpRequest; @@ -26,6 +27,32 @@ public function setUp(): void parent::setUp(); } + /** + * @test + * + * @covers ::__construct + */ + public function it_sets_and_gets_the_same_http_request(): void + { + $httpRequestMock = m::mock(HttpRequest::class); + + $request = new Request($httpRequestMock); + + $this->assertSame($httpRequestMock, $request->getRequest()); + } + + /** + * @test + * + * @covers ::__construct + */ + public function it_creates_the_http_request_when_passing_null(): void + { + $request = new Request(null); + + $this->assertInstanceOf(HttpRequest::class, $request->getRequest()); + } + /** * @test * diff --git a/tests/Tus/ServerTest.php b/tests/Tus/ServerTest.php index 0b067a1..1c0c554 100644 --- a/tests/Tus/ServerTest.php +++ b/tests/Tus/ServerTest.php @@ -21,6 +21,7 @@ use TusPhp\Exception\ConnectionException; use TusPhp\Exception\OutOfRangeException; use Symfony\Component\EventDispatcher\EventDispatcher; +use Symfony\Component\HttpFoundation\Request as HttpRequest; use Symfony\Component\HttpFoundation\Response as HttpResponse; /** @@ -108,6 +109,22 @@ public function it_gets_a_request(): void $this->assertInstanceOf(Request::class, $this->tusServer->getRequest()); } + /** + * @test + * + * @covers ::__construct + * @covers ::getRequest + */ + public function it_sets_and_gets_the_same_http_request(): void + { + $httpRequestMock = m::mock(HttpRequest::class); + + $tusServer = new TusServer('file', $httpRequestMock); + + $this->assertInstanceOf(HttpRequest::class, $tusServer->getRequest()->getRequest()); + $this->assertSame($httpRequestMock, $tusServer->getRequest()->getRequest()); + } + /** * @test * @@ -226,7 +243,7 @@ public function it_sends_412_if_pre_condition_fails(): void ->server ->set('REQUEST_METHOD', 'HEAD'); - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers @@ -274,7 +291,7 @@ public function it_passes_pre_condition_check_if_requests_matches_tus_resumable_ ->server ->set('REQUEST_METHOD', 'HEAD'); - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers @@ -402,7 +419,7 @@ public function it_overrides_http_method(): void $tusServerMock->__construct('file'); - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers @@ -804,7 +821,7 @@ public function it_returns_413_for_uploads_larger_than_max_size(): void 'REQUEST_URI' => '/files', ]); - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers @@ -854,7 +871,7 @@ public function it_calls_concatenation_for_final_upload(): void 'REQUEST_URI' => '/files', ]); - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers @@ -916,7 +933,7 @@ public function it_handles_post_for_partial_request(): void 'REQUEST_URI' => '/files', ]); - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers @@ -1040,7 +1057,7 @@ public function it_handles_post_request(): void 'REQUEST_URI' => '/files', ]); - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers @@ -1163,7 +1180,7 @@ public function it_handles_concatenation_request(): void 'location' => $location, ]; - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers @@ -1328,7 +1345,7 @@ public function it_throws_460_for_checksum_mismatch_in_concatenation_request(): ['file_path' => $filePath . 'file_b', 'offset' => 20], ]; - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers @@ -3176,7 +3193,7 @@ public function it_verifies_upload_size(): void { $this->assertTrue($this->tusServerMock->verifyUploadSize()); - $requestMock = m::mock(Request::class, ['file'])->makePartial(); + $requestMock = m::mock(Request::class, [null])->makePartial(); $requestMock ->getRequest() ->headers