diff --git a/app/config/cache.php b/app/config/cache.php index 025a0de..903eb3c 100644 --- a/app/config/cache.php +++ b/app/config/cache.php @@ -109,8 +109,8 @@ return [ * ] */ 'http_cache' => [ - 'application/json' => '300', - 'application/zip' => '300', + 'application/json' => 300, + 'application/zip' => 300, ], ]; diff --git a/app/src/Middlewares/ThemeMiddleware.php b/app/src/Middlewares/ThemeMiddleware.php index 6d09faf..a5a37b0 100644 --- a/app/src/Middlewares/ThemeMiddleware.php +++ b/app/src/Middlewares/ThemeMiddleware.php @@ -31,14 +31,16 @@ class ThemeMiddleware /** Determine the theme from the request. */ private function getThemeFromRequest(Request $request): string { - if (! isset($request->getCookieParams()['theme'])) { + $cookies = $request->getCookieParams(); + + if (! isset($cookies['theme'])) { return 'light'; } - if (! in_array($request->getCookieParams()['theme'], self::VALID_THEMES)) { + if (! in_array($cookies['theme'], self::VALID_THEMES)) { return 'light'; } - return $request->getCookieParams()['theme']; + return $cookies['theme']; } } diff --git a/tests/Middlewares/CacheMiddlewareTest.php b/tests/Middlewares/CacheMiddlewareTest.php new file mode 100644 index 0000000..1e08c4c --- /dev/null +++ b/tests/Middlewares/CacheMiddlewareTest.php @@ -0,0 +1,53 @@ +request = $this->createMock(ServerRequestInterface::class); + $this->handler = $this->createMock(RequestHandlerInterface::class); + } + + public function test_it_adds_a_response_cache_header_with_age_of_zero_by_defualt(): void + { + $this->handler->expects($this->once())->method('handle')->willReturn( + new Response(StatusCodeInterface::STATUS_OK, new Headers([ + 'Content-Type' => 'text/html', + ])) + ); + + $response = (new CacheMiddleware($this->config))($this->request, $this->handler); + + $this->assertEquals(['max-age=0, must-revalidate'], $response->getHeader('Cache-Control')); + } + + public function test_it_adds_a_response_cache_header_for_a_pre_configured_http_cache_option(): void + { + $this->handler->expects($this->once())->method('handle')->willReturn( + new Response(StatusCodeInterface::STATUS_OK, new Headers([ + 'Content-Type' => 'application/json', + ])) + ); + + $response = (new CacheMiddleware($this->config))($this->request, $this->handler); + + $this->assertEquals(['max-age=300'], $response->getHeader('Cache-Control')); + } +} diff --git a/tests/Middlewares/ThemeMiddlewareTest.php b/tests/Middlewares/ThemeMiddlewareTest.php new file mode 100644 index 0000000..1fcb2cc --- /dev/null +++ b/tests/Middlewares/ThemeMiddlewareTest.php @@ -0,0 +1,72 @@ +view = $this->container->get(Twig::class); + $this->request = $this->createMock(ServerRequestInterface::class); + $this->handler = $this->createMock(RequestHandlerInterface::class); + } + + public function test_it_sets_the_theme_view_variabe_to_light_by_default(): void + { + (new ThemeMiddleware($this->view))($this->request, $this->handler); + + $this->assertEquals(['theme' => 'light'], $this->view->getEnvironment()->getGlobals()); + } + + public function test_it_sets_the_theme_view_variabe_to_dark_when_the_theme_cookie_is_dark(): void + { + $this->request->expects($this->once())->method('getCookieParams')->willReturn([ + 'theme' => 'dark', + ]); + + (new ThemeMiddleware($this->view))($this->request, $this->handler); + + $this->assertEquals(['theme' => 'dark'], $this->view->getEnvironment()->getGlobals()); + } + + public function test_it_sets_the_theme_view_variabe_to_light_when_the_theme_cookie_is_light(): void + { + $this->request->expects($this->once())->method('getCookieParams')->willReturn([ + 'theme' => 'dark', + ]); + + (new ThemeMiddleware($this->view))($this->request, $this->handler); + + $this->assertEquals(['theme' => 'dark'], $this->view->getEnvironment()->getGlobals()); + } + + public function test_it_sets_the_theme_view_variabe_to_light_for_an_unknown_value(): void + { + $this->request->expects($this->once())->method('getCookieParams')->willReturn([ + 'theme' => 'dim', + ]); + + (new ThemeMiddleware($this->view))($this->request, $this->handler); + + $this->assertEquals(['theme' => 'light'], $this->view->getEnvironment()->getGlobals()); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php index e708c79..2c2e6df 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -22,8 +22,10 @@ class TestCase extends BaseTestCase protected $testFilesPath = __DIR__ . '/_files'; /** This method is called before each test. */ - public function setUp(): void + protected function setUp(): void { + parent::setUp(); + Dotenv::createUnsafeImmutable(__DIR__)->safeLoad(); $this->container = BootManager::createContainer(