Skip to content

Commit 523e1ee

Browse files
committed
Fixed Pest Tests
1 parent c4db95a commit 523e1ee

File tree

3 files changed

+180
-222
lines changed

3 files changed

+180
-222
lines changed
Lines changed: 90 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -1,139 +1,92 @@
11
<?php
22

3-
namespace CodebarAg\LaravelPrerender\Tests\Feature;
4-
5-
use CodebarAg\LaravelPrerender\Tests\TestCase;
6-
use GuzzleHttp\Client;
7-
8-
class PrerenderMiddlewareTest extends TestCase
9-
{
10-
/** @test */
11-
public function it_should_prerender_page_on_get_request()
12-
{
13-
$this->allowSymfonyUserAgent();
14-
15-
$this->get('/test-middleware')
16-
->assertHeader('prerender.io-mock', true)
17-
->assertSuccessful();
18-
}
19-
20-
/** @test */
21-
public function it_should_not_prerender_page_when_user_agent_does_not_in_list()
22-
{
23-
$this->get('/test-middleware')
24-
->assertSuccessful()
25-
->assertHeaderMissing('prerender.io-mock')
26-
->assertSee('GET - Success');
27-
}
28-
29-
/** @test */
30-
public function it_should_prerender_page_with_escaped_fragment_in_query_string()
31-
{
32-
$this->get('/test-middleware?_escaped_fragment_')
33-
->assertHeader('prerender.io-mock', true)
34-
->assertSuccessful();
35-
}
36-
37-
/** @test */
38-
public function it_should_prerender_when_user_agent_is_part_of_crawler_user_agents()
39-
{
40-
$this->get('/test-middleware', ['User-Agent' => 'Googlebot/2.1 (+http://www.google.com/bot.html)'])
41-
->assertHeader('prerender.io-mock', true)
42-
->assertSuccessful();
43-
}
44-
45-
/** @test */
46-
public function it_should_prerender_page_with_url_in_whitelist()
47-
{
48-
config()->set('prerender.whitelist', ['/test-middleware*']);
49-
50-
$this->get('/test-middleware?_escaped_fragment_')
51-
->assertHeader('prerender.io-mock', true)
52-
->assertSuccessful();
53-
}
54-
55-
/** @test */
56-
public function is_should_not_prerender_page_in_blacklist()
57-
{
58-
config()->set('prerender.blacklist', ['/test-middleware*']);
59-
60-
$this->get('/test-middleware?_escaped_fragment_')
61-
->assertSuccessful()
62-
->assertHeaderMissing('prerender.io-mock')
63-
->assertSee('GET - Success');
64-
}
65-
66-
/** @test */
67-
public function it_should_not_prerender_page_on_non_get_request()
68-
{
69-
$this->allowSymfonyUserAgent();
70-
71-
$this->post('/test-middleware')
72-
->assertSuccessful()
73-
->assertSee('Success');
74-
}
75-
76-
/** @test */
77-
public function it_should_not_prerender_page_when_missing_user_agent()
78-
{
79-
$this->get('/test-middleware', ['User-Agent' => null])
80-
->assertHeaderMissing('prerender.io-mock')
81-
->assertSee('GET - Success');
82-
}
83-
84-
/** @test */
85-
public function it_should_not_prerender_page_if_request_times_out()
86-
{
87-
$this->app->bind(Client::class, function () {
88-
return $this->createMockTimeoutClient();
89-
});
90-
91-
$this->allowSymfonyUserAgent();
92-
93-
$this->get('/test-middleware')
94-
->assertHeaderMissing('prerender.io-mock')
95-
->assertSee('GET - Success');
96-
}
97-
98-
/** @test */
99-
public function it_does_not_send_query_strings_to_prerender_by_default()
100-
{
101-
$this->app->bind(Client::class, function () {
102-
return $this->createMockUrlTrackingClient();
103-
});
104-
105-
$this->allowSymfonyUserAgent();
106-
107-
$this->get('/test-middleware?withQueryParam=true')
108-
->assertHeader('prerender.io-mock', true)
109-
->assertSuccessful()
110-
->assertSee(urlencode('/test-middleware'))
111-
->assertDontSee('withQueryParam');
112-
}
113-
114-
/** @test */
115-
public function it_sends_full_query_string_to_prerender()
116-
{
117-
$this->app->bind(Client::class, function () {
118-
return $this->createMockUrlTrackingClient();
119-
});
120-
121-
$this->allowSymfonyUserAgent();
122-
$this->allowQueryParams();
123-
124-
$this->get('/test-middleware?withQueryParam=true')
125-
->assertHeader('prerender.io-mock', true)
126-
->assertSuccessful()
127-
->assertSee(urlencode('/test-middleware?withQueryParam=true'));
128-
}
129-
130-
private function allowSymfonyUserAgent()
131-
{
132-
config()->set('prerender.crawler_user_agents', ['symfony']);
133-
}
134-
135-
private function allowQueryParams()
136-
{
137-
config()->set('prerender.full_url', true);
138-
}
139-
}
3+
test('it should prerender page on get request', function () {
4+
allowSymfonyUserAgent();
5+
6+
$this->get('/test-middleware')
7+
->assertHeader('prerender.io-mock', true)
8+
->assertSuccessful();
9+
});
10+
11+
test('it should not prerender page when user agent does not in list', function () {
12+
$this->get('/test-middleware')
13+
->assertHeaderMissing('prerender.io-mock')
14+
->assertSee('GET - Success');
15+
});
16+
17+
test('it should prerender page with escaped fragment in query string', function () {
18+
$this->get('/test-middleware?_escaped_fragment_')
19+
->assertHeader('prerender.io-mock', true)
20+
->assertSuccessful();
21+
});
22+
23+
test('it should prerender when user agent is part of crawler user agents', function () {
24+
$this->get('/test-middleware', ['User-Agent' => 'Googlebot/2.1 (+http://www.google.com/bot.html)'])
25+
->assertHeader('prerender.io-mock', true)
26+
->assertSuccessful();
27+
});
28+
29+
test('it should prerender page with url in whitelist', function () {
30+
config()->set('prerender.whitelist', ['/test-middleware*']);
31+
32+
$this->get('/test-middleware?_escaped_fragment_')
33+
->assertHeader('prerender.io-mock', true)
34+
->assertSuccessful();
35+
});
36+
37+
test('it should not prerender page in blacklist', function () {
38+
config()->set('prerender.blacklist', ['/test-middleware*']);
39+
40+
$this->get('/test-middleware?_escaped_fragment_')
41+
->assertSuccessful()
42+
->assertHeaderMissing('prerender.io-mock')
43+
->assertSee('GET - Success');
44+
});
45+
46+
test('it should not prerender page on non-get request', function () {
47+
allowSymfonyUserAgent();
48+
49+
$this->post('/test-middleware')
50+
->assertSuccessful()
51+
->assertSee('Success');
52+
});
53+
54+
test('it should not prerender page when missing user agent', function () {
55+
$this->get('/test-middleware', ['User-Agent' => null])
56+
->assertHeaderMissing('prerender.io-mock')
57+
->assertSee('GET - Success');
58+
});
59+
60+
test('it should not prerender page if request times out', function () {
61+
$this->app->bind(\GuzzleHttp\Client::class, fn () => createMockTimeoutClient());
62+
63+
allowSymfonyUserAgent();
64+
65+
$this->get('/test-middleware')
66+
->assertHeaderMissing('prerender.io-mock')
67+
->assertSee('GET - Success');
68+
});
69+
70+
test('it does not send query strings to prerender by default', function () {
71+
$this->app->bind(\GuzzleHttp\Client::class, fn () => createMockUrlTrackingClient());
72+
73+
allowSymfonyUserAgent();
74+
75+
$this->get('/test-middleware?withQueryParam=true')
76+
->assertHeader('prerender.io-mock', true)
77+
->assertSuccessful()
78+
->assertSee(urlencode('/test-middleware'))
79+
->assertDontSee('withQueryParam');
80+
});
81+
82+
test('it sends full query string to prerender', function () {
83+
$this->app->bind(\GuzzleHttp\Client::class, fn () => createMockUrlTrackingClient());
84+
85+
allowSymfonyUserAgent();
86+
allowQueryParams();
87+
88+
$this->get('/test-middleware?withQueryParam=true')
89+
->assertHeader('prerender.io-mock', true)
90+
->assertSuccessful()
91+
->assertSee(urlencode('/test-middleware?withQueryParam=true'));
92+
});

tests/Pest.php

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,59 @@
11
<?php
22

33
use CodebarAg\LaravelPrerender\Tests\TestCase;
4+
use GuzzleHttp\Client;
5+
use GuzzleHttp\Exception\ConnectException;
6+
use GuzzleHttp\Handler\MockHandler;
7+
use GuzzleHttp\HandlerStack;
8+
use GuzzleHttp\Psr7\Request;
9+
use GuzzleHttp\Psr7\Response;
10+
use Psr\Http\Message\RequestInterface;
411

5-
uses(TestCase::class)
6-
->in(__DIR__);
12+
uses(TestCase::class)->in(__DIR__);
13+
14+
function createMockPrerenderClient(): Client
15+
{
16+
$mock = new MockHandler([
17+
new Response(200, ['prerender.io-mock' => 'true'], 'Mocked Prerender Response'),
18+
]);
19+
20+
$stack = HandlerStack::create($mock);
21+
22+
return new Client(['handler' => $stack]);
23+
}
24+
25+
function createMockTimeoutClient(): Client
26+
{
27+
$mock = new MockHandler([
28+
new ConnectException('Could not connect', new Request('GET', 'test')),
29+
]);
30+
31+
$stack = HandlerStack::create($mock);
32+
33+
return new Client(['handler' => $stack]);
34+
}
35+
36+
function createMockUrlTrackingClient(): Client
37+
{
38+
$mock = new MockHandler([
39+
fn (RequestInterface $request) => new Response(
40+
200,
41+
['prerender.io-mock' => 'true'],
42+
(string) $request->getUri()
43+
),
44+
]);
45+
46+
$stack = HandlerStack::create($mock);
47+
48+
return new Client(['handler' => $stack]);
49+
}
50+
51+
function allowSymfonyUserAgent()
52+
{
53+
config()->set('prerender.crawler_user_agents', ['symfony']);
54+
}
55+
56+
function allowQueryParams()
57+
{
58+
config()->set('prerender.full_url', true);
59+
}

0 commit comments

Comments
 (0)