From 99e749b8c613841ebd3dd605c665d157810945a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Deruss=C3=A9?= Date: Tue, 23 Feb 2021 00:48:31 +0100 Subject: [PATCH] Restore undetermined state in Cache configuration --- src/Configuration/Cache.php | 13 ++++++++----- tests/EventListener/HttpCacheListenerTest.php | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/Configuration/Cache.php b/src/Configuration/Cache.php index 5e23b1e8..a79f56ed 100644 --- a/src/Configuration/Cache.php +++ b/src/Configuration/Cache.php @@ -114,11 +114,11 @@ public function __construct( string $expires = null, $maxage = null, $smaxage = null, - bool $public = false, - bool $mustRevalidate = false, - array $vary = [], - ?string $lastModified = null, - ?string $etag = null, + bool $public = null, + bool $mustRevalidate = null, + array $vary = null, + string $lastModified = null, + string $etag = null, $maxstale = null, $staleWhileRevalidate = null, $staleIfError = null @@ -135,6 +135,9 @@ public function __construct( $values['staleWhileRevalidate'] = $values['staleWhileRevalidate'] ?? $staleWhileRevalidate; $values['staleIfError'] = $values['staleIfError'] ?? $staleIfError; + $values = array_filter($values, function ($v) { + return $v !== null; + }); parent::__construct($values); } diff --git a/tests/EventListener/HttpCacheListenerTest.php b/tests/EventListener/HttpCacheListenerTest.php index e07c2098..bc0366ec 100644 --- a/tests/EventListener/HttpCacheListenerTest.php +++ b/tests/EventListener/HttpCacheListenerTest.php @@ -50,6 +50,18 @@ public function testWontReassignResponseWhenNoConfigurationIsPresent() $this->assertSame($response, $this->event->getResponse()); } + public function testResponseIsPublicIfSharedMaxAgeSetAndPublicNotOverridden() + { + $request = $this->createRequest(new Cache([ + 'smaxage' => 1, + ])); + + $this->listener->onKernelResponse($this->createEventMock($request, $this->response)); + + $this->assertTrue($this->response->headers->hasCacheControlDirective('public')); + $this->assertFalse($this->response->headers->hasCacheControlDirective('private')); + } + public function testResponseIsPublicIfConfigurationIsPublicTrue() { $request = $this->createRequest(new Cache([ @@ -65,8 +77,8 @@ public function testResponseIsPublicIfConfigurationIsPublicTrue() public function testResponseIsPrivateIfConfigurationIsPublicFalse() { $request = $this->createRequest(new Cache([ - 'public' => false, - ])); + 'public' => false, + ])); $this->listener->onKernelResponse($this->createEventMock($request, $this->response));