Skip to content

Commit 16e2dbc

Browse files
Fadarrizzksassnowski
authored andcommitted
Make ExecuteJavascriptMiddleware handle requests
1 parent 725955e commit 16e2dbc

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

src/Downloader/Middleware/ExecuteJavascriptMiddleware.php

+17-5
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313

1414
namespace RoachPHP\Downloader\Middleware;
1515

16+
use GuzzleHttp\Psr7\Response as Psr7Response;
1617
use Psr\Log\LoggerInterface;
18+
use RoachPHP\Http\Request;
1719
use RoachPHP\Http\Response;
1820
use RoachPHP\Support\Configurable;
1921
use Spatie\Browsershot\Browsershot;
2022

21-
final class ExecuteJavascriptMiddleware implements ResponseMiddlewareInterface
23+
final class ExecuteJavascriptMiddleware implements RequestMiddlewareInterface
2224
{
2325
use Configurable;
2426

@@ -37,10 +39,10 @@ public function __construct(
3739
$this->getBrowsershot = $getBrowsershot ?? static fn (string $uri): Browsershot => Browsershot::url($uri)->waitUntilNetworkIdle();
3840
}
3941

40-
public function handleResponse(Response $response): Response
42+
public function handleRequest(Request $request): Request
4143
{
4244
$browsershot = $this->configureBrowsershot(
43-
$response->getRequest()->getUri(),
45+
$request->getUri(),
4446
);
4547

4648
try {
@@ -51,10 +53,20 @@ public function handleResponse(Response $response): Response
5153
'trace' => $e->getTraceAsString(),
5254
]);
5355

54-
return $response->drop('Error while executing javascript');
56+
return $request->drop('Error while executing javascript');
5557
}
5658

57-
return $response->withBody($body);
59+
return $request->withResponse(
60+
$this->makeResponse($request, $body),
61+
);
62+
}
63+
64+
private function makeResponse(Request $request, string $body): Response
65+
{
66+
return new Response(
67+
new Psr7Response(200, [], $body),
68+
$request,
69+
);
5870
}
5971

6072
/**

tests/Downloader/Middleware/ExecuteJavascriptMiddlewareTest.php

+9-15
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,11 @@ final class ExecuteJavascriptMiddlewareTest extends IntegrationTestCase
2828

2929
public function testUpdateResponseBodyWithHtmlAfterExecutingJavascript(): void
3030
{
31-
$response = $this->makeResponse(
32-
$this->makeRequest('http://localhost:8000/javascript'),
33-
);
31+
$request = $this->makeRequest('http://localhost:8000/javascript');
3432
$middleware = new ExecuteJavascriptMiddleware(new FakeLogger());
3533

36-
$processedResponse = $middleware->handleResponse($response);
34+
$processedRequest = $middleware->handleRequest($request);
35+
$processedResponse = $processedRequest->getResponse();
3736

3837
self::assertSame('Headline', $processedResponse->filter('#content h1')->text(''));
3938
self::assertSame('I was loaded via Javascript!', $processedResponse->filter('#content p')->text(''));
@@ -52,9 +51,9 @@ public function bodyHtml(): string
5251
static fn (string $uri): Browsershot => $throwingBrowsershot->setUrl($uri),
5352
);
5453

55-
$processedResponse = $middleware->handleResponse($this->makeResponse());
54+
$processedRequest = $middleware->handleRequest($this->makeRequest('http://fake-url.com'));
5655

57-
self::assertTrue($processedResponse->wasDropped());
56+
self::assertTrue($processedRequest->wasDropped());
5857
}
5958

6059
public function testLogErrors(): void
@@ -71,7 +70,7 @@ public function bodyHtml(): string
7170
static fn (string $uri): Browsershot => $throwingBrowsershot->setUrl($uri),
7271
);
7372

74-
$middleware->handleResponse($this->makeResponse());
73+
$middleware->handleRequest($this->makeRequest('http://fake-url.com'));
7574

7675
self::assertTrue(
7776
$logger->messageWasLogged(
@@ -84,19 +83,14 @@ public function bodyHtml(): string
8483
public function testUsesTheProvidedUserAgentOption(): void
8584
{
8685
$mockBrowserShot = $this->createMock(Browsershot::class);
87-
$response = $this->makeResponse(
88-
$this->makeRequest('http://localhost:8000/javascript'),
89-
);
90-
$middleware = new ExecuteJavascriptMiddleware(
91-
new FakeLogger(),
92-
static fn (string $uri): Browsershot => $mockBrowserShot,
93-
);
86+
$request = $this->makeRequest('http://localhost:8000/javascript');
87+
$middleware = new ExecuteJavascriptMiddleware(new FakeLogger(), static fn (string $uri): Browsershot => $mockBrowserShot);
9488
$middleware->configure(['userAgent' => 'custom']);
9589

9690
$mockBrowserShot->expects(self::once())
9791
->method('userAgent')
9892
->with(self::equalTo('custom'));
9993

100-
$middleware->handleResponse($response);
94+
$middleware->handleRequest($request);
10195
}
10296
}

0 commit comments

Comments
 (0)