|
19 | 19 | use PHPUnit\Framework\TestCase;
|
20 | 20 | use Symfony\Component\HttpFoundation\Request;
|
21 | 21 | use Symfony\Component\HttpFoundation\Response;
|
22 |
| -use Symfony\Component\HttpFoundation\ResponseHeaderBag; |
23 | 22 |
|
24 | 23 | class AddHeadersProcessorTest extends TestCase
|
25 | 24 | {
|
26 |
| - public function testAddHeaders(): void |
| 25 | + public function testAddHeadersFromGlobalConfiguration(): void |
27 | 26 | {
|
28 | 27 | $operation = new Get();
|
29 |
| - $response = $this->createMock(Response::class); |
30 |
| - $response->expects($this->once())->method('setEtag'); |
31 |
| - $response->method('getContent')->willReturn('{}'); |
32 |
| - $response->method('isSuccessful')->willReturn(true); |
33 |
| - $response->headers = $this->createMock(ResponseHeaderBag::class); |
34 |
| - $response->headers->method('hasCacheControlDirective')->with($this->logicalOr( |
35 |
| - $this->identicalTo('public'), |
36 |
| - $this->identicalTo('s-maxage'), |
37 |
| - $this->identicalTo('max-age'), |
38 |
| - $this->identicalTo('stale-while-revalidate'), |
39 |
| - $this->identicalTo('stale-if-error'), |
40 |
| - ))->willReturn(false); |
41 |
| - $response->headers->expects($this->exactly(2))->method('addCacheControlDirective')->with($this->logicalOr( |
42 |
| - $this->identicalTo('stale-while-revalidate'), |
43 |
| - $this->identicalTo('stale-if-error'), |
44 |
| - ), '10'); |
45 |
| - $response->expects($this->once())->method('setPublic'); |
46 |
| - $response->expects($this->once())->method('setMaxAge'); |
47 |
| - $response->expects($this->once())->method('setSharedMaxAge'); |
48 |
| - $request = $this->createMock(Request::class); |
49 |
| - $request->method('isMethodCacheable')->willReturn(true); |
| 28 | + $response = new Response('content'); |
| 29 | + $request = new Request(); |
50 | 30 | $context = ['request' => $request];
|
51 | 31 | $decorated = $this->createMock(ProcessorInterface::class);
|
52 | 32 | $decorated->method('process')->willReturn($response);
|
53 | 33 | $processor = new AddHeadersProcessor($decorated, etag: true, maxAge: 100, sharedMaxAge: 200, vary: ['Accept', 'Accept-Encoding'], public: true, staleWhileRevalidate: 10, staleIfError: 10);
|
| 34 | + |
54 | 35 | $processor->process($response, $operation, [], $context);
|
| 36 | + |
| 37 | + self::assertSame('max-age=100, public, s-maxage=200, stale-if-error=10, stale-while-revalidate=10', $response->headers->get('cache-control')); |
| 38 | + self::assertSame('"55f2b31a6acfaa64"', $response->headers->get('etag')); |
| 39 | + self::assertSame(['Accept', 'Accept-Encoding'], $response->headers->all('vary')); |
| 40 | + } |
| 41 | + |
| 42 | + public function testAddHeadersFromOperationConfiguration(): void |
| 43 | + { |
| 44 | + $operation = new Get( |
| 45 | + cacheHeaders: [ |
| 46 | + 'public' => false, |
| 47 | + 'max_age' => 250, |
| 48 | + 'shared_max_age' => 500, |
| 49 | + 'stale_while_revalidate' => 30, |
| 50 | + 'stale_if_error' => 15, |
| 51 | + 'vary' => ['Authorization', 'Accept-Language'], |
| 52 | + 'must_revalidate' => true, |
| 53 | + 'proxy_revalidate' => true, |
| 54 | + 'no_cache' => true, |
| 55 | + 'no_store' => true, |
| 56 | + 'no_transform' => true, |
| 57 | + 'immutable' => true, |
| 58 | + ], |
| 59 | + ); |
| 60 | + $response = new Response('content'); |
| 61 | + $request = new Request(); |
| 62 | + $context = ['request' => $request]; |
| 63 | + $decorated = $this->createMock(ProcessorInterface::class); |
| 64 | + $decorated->method('process')->willReturn($response); |
| 65 | + $processor = new AddHeadersProcessor($decorated); |
| 66 | + |
| 67 | + $processor->process($response, $operation, [], $context); |
| 68 | + |
| 69 | + self::assertSame('immutable, max-age=250, must-revalidate, no-store, no-transform, private, proxy-revalidate, stale-if-error=15, stale-while-revalidate=30', $response->headers->get('cache-control')); |
| 70 | + self::assertSame(['Authorization', 'Accept-Language'], $response->headers->all('vary')); |
55 | 71 | }
|
56 | 72 | }
|
0 commit comments