diff --git a/src/Downloader/Middleware/ExecuteJavascriptMiddleware.php b/src/Downloader/Middleware/ExecuteJavascriptMiddleware.php index 6e1495a..ed01e8b 100644 --- a/src/Downloader/Middleware/ExecuteJavascriptMiddleware.php +++ b/src/Downloader/Middleware/ExecuteJavascriptMiddleware.php @@ -13,12 +13,14 @@ namespace RoachPHP\Downloader\Middleware; +use GuzzleHttp\Psr7\Response as Psr7Response; use Psr\Log\LoggerInterface; +use RoachPHP\Http\Request; use RoachPHP\Http\Response; use RoachPHP\Support\Configurable; use Spatie\Browsershot\Browsershot; -final class ExecuteJavascriptMiddleware implements ResponseMiddlewareInterface +final class ExecuteJavascriptMiddleware implements RequestMiddlewareInterface { use Configurable; @@ -37,10 +39,10 @@ public function __construct( $this->getBrowsershot = $getBrowsershot ?? static fn (string $uri): Browsershot => Browsershot::url($uri)->waitUntilNetworkIdle(); } - public function handleResponse(Response $response): Response + public function handleRequest(Request $request): Request { $browsershot = $this->configureBrowsershot( - $response->getRequest()->getUri(), + $request->getUri(), ); try { @@ -51,10 +53,20 @@ public function handleResponse(Response $response): Response 'trace' => $e->getTraceAsString(), ]); - return $response->drop('Error while executing javascript'); + return $request->drop('Error while executing javascript'); } - return $response->withBody($body); + return $request->withResponse( + $this->makeResponse($request, $body), + ); + } + + private function makeResponse(Request $request, string $body): Response + { + return new Response( + new Psr7Response(200, [], $body), + $request, + ); } /** diff --git a/tests/Downloader/Middleware/ExecuteJavascriptMiddlewareTest.php b/tests/Downloader/Middleware/ExecuteJavascriptMiddlewareTest.php index c935d09..6791e67 100644 --- a/tests/Downloader/Middleware/ExecuteJavascriptMiddlewareTest.php +++ b/tests/Downloader/Middleware/ExecuteJavascriptMiddlewareTest.php @@ -28,12 +28,11 @@ final class ExecuteJavascriptMiddlewareTest extends IntegrationTestCase public function testUpdateResponseBodyWithHtmlAfterExecutingJavascript(): void { - $response = $this->makeResponse( - $this->makeRequest('http://localhost:8000/javascript'), - ); + $request = $this->makeRequest('http://localhost:8000/javascript'); $middleware = new ExecuteJavascriptMiddleware(new FakeLogger()); - $processedResponse = $middleware->handleResponse($response); + $processedRequest = $middleware->handleRequest($request); + $processedResponse = $processedRequest->getResponse(); self::assertSame('Headline', $processedResponse->filter('#content h1')->text('')); self::assertSame('I was loaded via Javascript!', $processedResponse->filter('#content p')->text('')); @@ -52,9 +51,9 @@ public function bodyHtml(): string static fn (string $uri): Browsershot => $throwingBrowsershot->setUrl($uri), ); - $processedResponse = $middleware->handleResponse($this->makeResponse()); + $processedRequest = $middleware->handleRequest($this->makeRequest('http://fake-url.com')); - self::assertTrue($processedResponse->wasDropped()); + self::assertTrue($processedRequest->wasDropped()); } public function testLogErrors(): void @@ -71,7 +70,7 @@ public function bodyHtml(): string static fn (string $uri): Browsershot => $throwingBrowsershot->setUrl($uri), ); - $middleware->handleResponse($this->makeResponse()); + $middleware->handleRequest($this->makeRequest('http://fake-url.com')); self::assertTrue( $logger->messageWasLogged( @@ -84,19 +83,14 @@ public function bodyHtml(): string public function testUsesTheProvidedUserAgentOption(): void { $mockBrowserShot = $this->createMock(Browsershot::class); - $response = $this->makeResponse( - $this->makeRequest('http://localhost:8000/javascript'), - ); - $middleware = new ExecuteJavascriptMiddleware( - new FakeLogger(), - static fn (string $uri): Browsershot => $mockBrowserShot, - ); + $request = $this->makeRequest('http://localhost:8000/javascript'); + $middleware = new ExecuteJavascriptMiddleware(new FakeLogger(), static fn (string $uri): Browsershot => $mockBrowserShot); $middleware->configure(['userAgent' => 'custom']); $mockBrowserShot->expects(self::once()) ->method('userAgent') ->with(self::equalTo('custom')); - $middleware->handleResponse($response); + $middleware->handleRequest($request); } }