/
InvalidationListenerTest.php
102 lines (88 loc) · 2.91 KB
/
InvalidationListenerTest.php
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
97
98
99
100
101
102
<?php
/*
* This file is part of the FOSHttpCacheBundle package.
*
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace FOS\HttpCacheBundle\Tests\Functional\EventListener;
use FOS\HttpCacheBundle\CacheManager;
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
use PHPUnit\Framework\Attributes as PHPUnit;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class InvalidationListenerTest extends WebTestCase
{
use MockeryPHPUnitIntegration;
public function testInvalidateRoute(): void
{
$client = static::createClient();
$mock = \Mockery::mock(CacheManager::class);
$mock->shouldReceive('supports')
->zeroOrMoreTimes()
->andReturnTrue()
;
$mock->shouldReceive('invalidateRoute')
->once()
->with('test_noncached', [])
;
$mock->shouldReceive('invalidateRoute')
->once()
->with('test_cached', ['id' => 'myhardcodedid'])
;
$mock->shouldReceive('invalidateRoute')
->once()
->with('tag_one', ['id' => 42])
;
$mock->shouldReceive('flush')
->once()
->andReturn(3)
;
$client->getContainer()->set('fos_http_cache.cache_manager', $mock);
$client->request('POST', '/invalidate/route/42');
}
#[PHPUnit\DataProvider('getStatusCodesThatTriggerInvalidation')]
public function testInvalidatePath($statusCode): void
{
$client = static::createClient();
$mock = \Mockery::mock(CacheManager::class);
$mock->shouldReceive('supports')
->zeroOrMoreTimes()
->andReturnTrue()
;
$mock->shouldReceive('invalidatePath')
->once()
->with('/cached')
;
$mock->shouldReceive('invalidatePath')
->once()
->with(sprintf('/invalidate/path/%s', $statusCode))
;
$mock->shouldReceive('flush')
->once()
->andReturn(2)
;
$client->getContainer()->set('fos_http_cache.cache_manager', $mock);
$client->request('POST', sprintf('/invalidate/path/%s', $statusCode));
}
public function testErrorIsNotInvalidated(): void
{
$client = static::createClient();
$mock = \Mockery::mock(CacheManager::class);
$mock->shouldReceive('supports')
->zeroOrMoreTimes()
->andReturnTrue()
;
$mock->shouldReceive('flush')
->once()
->andReturn(0)
;
$client->getContainer()->set('fos_http_cache.cache_manager', $mock);
$client->request('POST', '/invalidate/error');
}
public static function getStatusCodesThatTriggerInvalidation(): array
{
return [[200], [204], [302]];
}
}