-
-
Notifications
You must be signed in to change notification settings - Fork 83
Expand file tree
/
Copy pathExecuteJavascriptMiddlewareTest.php
More file actions
96 lines (79 loc) · 3.18 KB
/
ExecuteJavascriptMiddlewareTest.php
File metadata and controls
96 lines (79 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
declare(strict_types=1);
/**
* Copyright (c) 2024 Kai Sassnowski
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*
* @see https://github.com/roach-php/roach
*/
namespace RoachPHP\Tests\Downloader\Middleware;
use RoachPHP\Downloader\Middleware\ExecuteJavascriptMiddleware;
use RoachPHP\Testing\Concerns\InteractsWithRequestsAndResponses;
use RoachPHP\Testing\FakeLogger;
use RoachPHP\Tests\IntegrationTestCase;
use Spatie\Browsershot\Browsershot;
/**
* @internal
*/
final class ExecuteJavascriptMiddlewareTest extends IntegrationTestCase
{
use InteractsWithRequestsAndResponses;
public function testUpdateResponseBodyWithHtmlAfterExecutingJavascript(): void
{
$request = $this->makeRequest('http://localhost:8000/javascript');
$middleware = new ExecuteJavascriptMiddleware(new FakeLogger());
$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(''));
}
public function testDropResponseIfExceptionOccursWhileExecutingJavascript(): void
{
$throwingBrowsershot = new class() extends Browsershot {
public function bodyHtml(): string
{
throw new \Exception('::exception-message::');
}
};
$middleware = new ExecuteJavascriptMiddleware(
new FakeLogger(),
static fn (string $uri): Browsershot => $throwingBrowsershot->setUrl($uri),
);
$processedRequest = $middleware->handleRequest($this->makeRequest('http://fake-url.com'));
self::assertTrue($processedRequest->wasDropped());
}
public function testLogErrors(): void
{
$throwingBrowsershot = new class() extends Browsershot {
public function bodyHtml(): string
{
throw new \Exception('::exception-message::');
}
};
$logger = new FakeLogger();
$middleware = new ExecuteJavascriptMiddleware(
$logger,
static fn (string $uri): Browsershot => $throwingBrowsershot->setUrl($uri),
);
$middleware->handleRequest($this->makeRequest('http://fake-url.com'));
self::assertTrue(
$logger->messageWasLogged(
'info',
'[ExecuteJavascriptMiddleware] Error while executing javascript',
),
);
}
public function testUsesTheProvidedUserAgentOption(): void
{
$mockBrowserShot = $this->createMock(Browsershot::class);
$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->handleRequest($request);
}
}