Skip to content

Commit 3e0b602

Browse files
committed
refactor: convert StaticFileResponse to an http response
1 parent 8c594ff commit 3e0b602

9 files changed

Lines changed: 70 additions & 104 deletions

src/Lambda/Handler/Http/AbstractHttpRequestEventHandler.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
use Ymir\Runtime\Lambda\InvocationEvent\InvocationEventInterface;
1919
use Ymir\Runtime\Lambda\Response\Http\HttpResponse;
2020
use Ymir\Runtime\Lambda\Response\Http\NotFoundHttpResponse;
21-
use Ymir\Runtime\Lambda\Response\Http\StaticFileResponse;
21+
use Ymir\Runtime\Lambda\Response\Http\StaticFileHttpResponse;
2222
use Ymir\Runtime\Lambda\Response\ResponseInterface;
2323

2424
/**
@@ -64,7 +64,7 @@ public function handle(InvocationEventInterface $event): ResponseInterface
6464
return new NotFoundHttpResponse();
6565
}
6666

67-
return $this->isStaticFile($filePath) ? new StaticFileResponse($filePath) : $this->createLambdaEventResponse($event);
67+
return $this->isStaticFile($filePath) ? new StaticFileHttpResponse($filePath) : $this->createLambdaEventResponse($event);
6868
}
6969

7070
/**
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/*
6+
* This file is part of Ymir PHP Runtime.
7+
*
8+
* (c) Carl Alexander <support@ymirapp.com>
9+
*
10+
* For the full copyright and license information, please view the LICENSE
11+
* file that was distributed with this source code.
12+
*/
13+
14+
namespace Ymir\Runtime\Lambda\Response\Http;
15+
16+
use Mimey\MimeTypes;
17+
use Mimey\MimeTypesInterface;
18+
use Ymir\Runtime\Exception\FileNotReadableException;
19+
20+
/**
21+
* A Lambda response for a static file.
22+
*/
23+
class StaticFileHttpResponse extends HttpResponse
24+
{
25+
/**
26+
* Constructor.
27+
*/
28+
public function __construct(string $filePath, MimeTypesInterface $mimeTypes = null)
29+
{
30+
$content = file_get_contents($filePath);
31+
32+
if (!is_string($content)) {
33+
throw new FileNotReadableException(sprintf('Unable to get the contents of "%s"', $filePath));
34+
}
35+
36+
$contentType = ($mimeTypes ?? new MimeTypes())->getMimeType(pathinfo($filePath, PATHINFO_EXTENSION)) ?? 'text/plain';
37+
38+
parent::__construct($content, ['Content-Type' => [$contentType]], 200, '2.0');
39+
}
40+
}

src/Lambda/Response/Http/StaticFileResponse.php

Lines changed: 0 additions & 74 deletions
This file was deleted.

tests/Unit/Lambda/Handler/Http/AbstractHttpRequestEventHandlerTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
use PHPUnit\Framework\TestCase;
1717
use Ymir\Runtime\Lambda\Handler\Http\AbstractHttpRequestEventHandler;
18-
use Ymir\Runtime\Lambda\Response\Http\StaticFileResponse;
18+
use Ymir\Runtime\Lambda\Response\Http\StaticFileHttpResponse;
1919
use Ymir\Runtime\Tests\Mock\HttpRequestEventMockTrait;
2020
use Ymir\Runtime\Tests\Mock\HttpResponseMockTrait;
2121
use Ymir\Runtime\Tests\Mock\InvocationEventInterfaceMockTrait;
@@ -58,7 +58,7 @@ public function testHandleCallsCreateLambdaEventResponse(): void
5858
$this->assertSame($response, $handler->handle($event));
5959
}
6060

61-
public function testHandleReturnsStaticFileResponse(): void
61+
public function testHandleReturnsStaticFileHttpResponse(): void
6262
{
6363
$event = $this->getHttpRequestEventMock();
6464
$tempDir = sys_get_temp_dir();
@@ -71,7 +71,7 @@ public function testHandleReturnsStaticFileResponse(): void
7171
->method('getPath')
7272
->willReturn('/foo');
7373

74-
$this->assertInstanceOf(StaticFileResponse::class, $handler->handle($event));
74+
$this->assertInstanceOf(StaticFileHttpResponse::class, $handler->handle($event));
7575

7676
@unlink($tempDir.'/foo');
7777
}

tests/Unit/Lambda/Handler/Http/AbstractPhpFpmRequestEventHandlerTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public function testHandleCreatesFastCgiHttpResponse(): void
108108
$this->assertFalse($response->isCompressible());
109109
}
110110

111-
public function testHandleDoesntReturnStaticFileResponseForPhpFileWithPayloadVersion1(): void
111+
public function testHandleDoesntReturnStaticFileHttpResponseForPhpFileWithPayloadVersion1(): void
112112
{
113113
$event = $this->getHttpRequestEventMock();
114114
$file = tmpfile();
@@ -142,7 +142,7 @@ public function testHandleDoesntReturnStaticFileResponseForPhpFileWithPayloadVer
142142
$this->assertFalse($response->isCompressible());
143143
}
144144

145-
public function testHandleDoesntReturnStaticFileResponseForPhpFileWithPayloadVersion2(): void
145+
public function testHandleDoesntReturnStaticFileHttpResponseForPhpFileWithPayloadVersion2(): void
146146
{
147147
$event = $this->getHttpRequestEventMock();
148148
$file = tmpfile();

tests/Unit/Lambda/Handler/Http/BedrockHttpEventHandlerTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
use Ymir\Runtime\Lambda\Handler\Http\BedrockHttpEventHandler;
2121
use Ymir\Runtime\Lambda\Response\Http\FastCgiHttpResponse;
2222
use Ymir\Runtime\Lambda\Response\Http\NotFoundHttpResponse;
23-
use Ymir\Runtime\Lambda\Response\Http\StaticFileResponse;
23+
use Ymir\Runtime\Lambda\Response\Http\StaticFileHttpResponse;
2424
use Ymir\Runtime\Tests\Mock\HttpRequestEventMockTrait;
2525
use Ymir\Runtime\Tests\Mock\InvocationEventInterfaceMockTrait;
2626
use Ymir\Runtime\Tests\Mock\LoggerMockTrait;
@@ -406,7 +406,7 @@ public function testHandleCreatesFastCgiRequestToWebDirectoryWithWpPathsWithPayl
406406
@unlink($this->tempDir.'/web/wp/tmp/index.php');
407407
}
408408

409-
public function testHandleDoesntReturnStaticFileResponseForFileOutsideWebDirectoryWithPayloadVersion1(): void
409+
public function testHandleDoesntReturnStaticFileHttpResponseForFileOutsideWebDirectoryWithPayloadVersion1(): void
410410
{
411411
$event = $this->getHttpRequestEventMock();
412412
$logger = $this->getLoggerMock();
@@ -439,7 +439,7 @@ public function testHandleDoesntReturnStaticFileResponseForFileOutsideWebDirecto
439439
$this->assertFalse($response->isCompressible());
440440
}
441441

442-
public function testHandleDoesntReturnStaticFileResponseForFileOutsideWebDirectoryWithPayloadVersion2(): void
442+
public function testHandleDoesntReturnStaticFileHttpResponseForFileOutsideWebDirectoryWithPayloadVersion2(): void
443443
{
444444
$event = $this->getHttpRequestEventMock();
445445
$logger = $this->getLoggerMock();
@@ -472,7 +472,7 @@ public function testHandleDoesntReturnStaticFileResponseForFileOutsideWebDirecto
472472
$this->assertFalse($response->isCompressible());
473473
}
474474

475-
public function testHandleDoesntReturnStaticFileResponseForPhpFileWithPayloadVersion1(): void
475+
public function testHandleDoesntReturnStaticFileHttpResponseForPhpFileWithPayloadVersion1(): void
476476
{
477477
$event = $this->getHttpRequestEventMock();
478478
$logger = $this->getLoggerMock();
@@ -505,7 +505,7 @@ public function testHandleDoesntReturnStaticFileResponseForPhpFileWithPayloadVer
505505
$this->assertFalse($response->isCompressible());
506506
}
507507

508-
public function testHandleDoesntReturnStaticFileResponseForPhpFileWithPayloadVersion2(): void
508+
public function testHandleDoesntReturnStaticFileHttpResponseForPhpFileWithPayloadVersion2(): void
509509
{
510510
$event = $this->getHttpRequestEventMock();
511511
$logger = $this->getLoggerMock();
@@ -628,7 +628,7 @@ public function testHandleReturnsNotFoundHttpResponseForInaccessibleFiles(string
628628
@unlink($this->tempDir.$filePath);
629629
}
630630

631-
public function testHandleReturnsStaticFileResponseForFileInsideWebDirectory(): void
631+
public function testHandleReturnsStaticFileHttpResponseForFileInsideWebDirectory(): void
632632
{
633633
$event = $this->getHttpRequestEventMock();
634634
$logger = $this->getLoggerMock();
@@ -643,7 +643,7 @@ public function testHandleReturnsStaticFileResponseForFileInsideWebDirectory():
643643
touch($this->tempDir.'/web/wp/wp-login.php');
644644
touch($this->tempDir.'/web/foo');
645645

646-
$this->assertInstanceOf(StaticFileResponse::class, (new BedrockHttpEventHandler($logger, $process, $this->tempDir))->handle($event));
646+
$this->assertInstanceOf(StaticFileHttpResponse::class, (new BedrockHttpEventHandler($logger, $process, $this->tempDir))->handle($event));
647647

648648
@unlink($this->tempDir.'/config/application.php');
649649
@unlink($this->tempDir.'/web/app/mu-plugins/bedrock-autoloader.php');

tests/Unit/Lambda/Handler/Http/LaravelHttpEventHandlerTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
use Ymir\Runtime\Lambda\Handler\Http\LaravelHttpEventHandler;
2020
use Ymir\Runtime\Lambda\Response\Http\FastCgiHttpResponse;
2121
use Ymir\Runtime\Lambda\Response\Http\NotFoundHttpResponse;
22-
use Ymir\Runtime\Lambda\Response\Http\StaticFileResponse;
22+
use Ymir\Runtime\Lambda\Response\Http\StaticFileHttpResponse;
2323
use Ymir\Runtime\Tests\Mock\HttpRequestEventMockTrait;
2424
use Ymir\Runtime\Tests\Mock\InvocationEventInterfaceMockTrait;
2525
use Ymir\Runtime\Tests\Mock\LoggerMockTrait;
@@ -177,7 +177,7 @@ public function testHandlePrioritizesPublicOverStorage(): void
177177
$handler = new LaravelHttpEventHandler($logger, $process, $this->tempDir);
178178
$response = $handler->handle($event);
179179

180-
$this->assertInstanceOf(StaticFileResponse::class, $response);
180+
$this->assertInstanceOf(StaticFileHttpResponse::class, $response);
181181

182182
@unlink($this->tempDir.'/public/index.php');
183183
@unlink($this->tempDir.'/artisan');
@@ -203,7 +203,7 @@ public function testHandleResolvesStoragePathIfFileDoesNotExistInPublic(): void
203203
$handler = new LaravelHttpEventHandler($logger, $process, $this->tempDir);
204204
$response = $handler->handle($event);
205205

206-
$this->assertInstanceOf(StaticFileResponse::class, $response);
206+
$this->assertInstanceOf(StaticFileHttpResponse::class, $response);
207207

208208
@unlink($this->tempDir.'/public/index.php');
209209
@unlink($this->tempDir.'/artisan');

tests/Unit/Lambda/Handler/Http/RadicleHttpEventHandlerTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
use Ymir\Runtime\Lambda\Handler\Http\RadicleHttpEventHandler;
2121
use Ymir\Runtime\Lambda\Response\Http\FastCgiHttpResponse;
2222
use Ymir\Runtime\Lambda\Response\Http\NotFoundHttpResponse;
23-
use Ymir\Runtime\Lambda\Response\Http\StaticFileResponse;
23+
use Ymir\Runtime\Lambda\Response\Http\StaticFileHttpResponse;
2424
use Ymir\Runtime\Tests\Mock\HttpRequestEventMockTrait;
2525
use Ymir\Runtime\Tests\Mock\InvocationEventInterfaceMockTrait;
2626
use Ymir\Runtime\Tests\Mock\LoggerMockTrait;
@@ -406,7 +406,7 @@ public function testHandleCreatesFastCgiRequestToWebDirectoryWithWpPathsWithPayl
406406
@unlink($this->tempDir.'/public/wp/tmp/index.php');
407407
}
408408

409-
public function testHandleDoesntReturnStaticFileResponseForFileOutsideWebDirectoryWithPayloadVersion1(): void
409+
public function testHandleDoesntReturnStaticFileHttpResponseForFileOutsideWebDirectoryWithPayloadVersion1(): void
410410
{
411411
$event = $this->getHttpRequestEventMock();
412412
$logger = $this->getLoggerMock();
@@ -439,7 +439,7 @@ public function testHandleDoesntReturnStaticFileResponseForFileOutsideWebDirecto
439439
$this->assertFalse($response->isCompressible());
440440
}
441441

442-
public function testHandleDoesntReturnStaticFileResponseForFileOutsideWebDirectoryWithPayloadVersion2(): void
442+
public function testHandleDoesntReturnStaticFileHttpResponseForFileOutsideWebDirectoryWithPayloadVersion2(): void
443443
{
444444
$event = $this->getHttpRequestEventMock();
445445
$logger = $this->getLoggerMock();
@@ -472,7 +472,7 @@ public function testHandleDoesntReturnStaticFileResponseForFileOutsideWebDirecto
472472
$this->assertFalse($response->isCompressible());
473473
}
474474

475-
public function testHandleDoesntReturnStaticFileResponseForPhpFileWithPayloadVersion1(): void
475+
public function testHandleDoesntReturnStaticFileHttpResponseForPhpFileWithPayloadVersion1(): void
476476
{
477477
$event = $this->getHttpRequestEventMock();
478478
$logger = $this->getLoggerMock();
@@ -505,7 +505,7 @@ public function testHandleDoesntReturnStaticFileResponseForPhpFileWithPayloadVer
505505
$this->assertFalse($response->isCompressible());
506506
}
507507

508-
public function testHandleDoesntReturnStaticFileResponseForPhpFileWithPayloadVersion2(): void
508+
public function testHandleDoesntReturnStaticFileHttpResponseForPhpFileWithPayloadVersion2(): void
509509
{
510510
$event = $this->getHttpRequestEventMock();
511511
$logger = $this->getLoggerMock();
@@ -628,7 +628,7 @@ public function testHandleReturnsNotFoundHttpResponseForInaccessibleFiles(string
628628
@unlink($this->tempDir.$filePath);
629629
}
630630

631-
public function testHandleReturnsStaticFileResponseForFileInsideWebDirectory(): void
631+
public function testHandleReturnsStaticFileHttpResponseForFileInsideWebDirectory(): void
632632
{
633633
$event = $this->getHttpRequestEventMock();
634634
$logger = $this->getLoggerMock();
@@ -643,7 +643,7 @@ public function testHandleReturnsStaticFileResponseForFileInsideWebDirectory():
643643
touch($this->tempDir.'/public/wp/wp-login.php');
644644
touch($this->tempDir.'/public/foo');
645645

646-
$this->assertInstanceOf(StaticFileResponse::class, (new RadicleHttpEventHandler($logger, $process, $this->tempDir))->handle($event));
646+
$this->assertInstanceOf(StaticFileHttpResponse::class, (new RadicleHttpEventHandler($logger, $process, $this->tempDir))->handle($event));
647647

648648
@unlink($this->tempDir.'/bedrock/application.php');
649649
@unlink($this->tempDir.'/public/content/mu-plugins/bedrock-autoloader.php');

tests/Unit/Lambda/Response/Http/StaticFileResponseTest.php renamed to tests/Unit/Lambda/Response/Http/StaticFileHttpResponseTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,25 @@
1414
namespace Ymir\Runtime\Tests\Unit\Lambda\Response\Http;
1515

1616
use PHPUnit\Framework\TestCase;
17-
use Ymir\Runtime\Lambda\Response\Http\StaticFileResponse;
17+
use Ymir\Runtime\Lambda\Response\Http\StaticFileHttpResponse;
1818

19-
class StaticFileResponseTest extends TestCase
19+
class StaticFileHttpResponseTest extends TestCase
2020
{
2121
public function testGetResponseDataWithCorrectFileExtensionMimeType(): void
2222
{
2323
$filePath = stream_get_meta_data(tmpfile())['uri'].'.png';
2424

2525
file_put_contents($filePath, 'foo');
2626

27-
$response = new StaticFileResponse($filePath);
27+
$response = new StaticFileHttpResponse($filePath);
2828

2929
$this->assertSame([
3030
'isBase64Encoded' => true,
3131
'statusCode' => 200,
32+
'body' => 'Zm9v',
3233
'headers' => [
3334
'Content-Type' => 'image/png',
3435
],
35-
'body' => 'Zm9v',
3636
], $response->getResponseData());
3737
}
3838

@@ -42,15 +42,15 @@ public function testGetResponseDataWithFileWithNoExtension(): void
4242

4343
file_put_contents($filePath, 'foo');
4444

45-
$response = new StaticFileResponse($filePath);
45+
$response = new StaticFileHttpResponse($filePath);
4646

4747
$this->assertSame([
4848
'isBase64Encoded' => true,
4949
'statusCode' => 200,
50+
'body' => 'Zm9v',
5051
'headers' => [
5152
'Content-Type' => 'text/plain',
5253
],
53-
'body' => 'Zm9v',
5454
], $response->getResponseData());
5555
}
5656
}

0 commit comments

Comments
 (0)