diff --git a/app/src/Handlers/DirectoryHandler.php b/app/src/Handlers/DirectoryHandler.php index 57e9a75..f153618 100644 --- a/app/src/Handlers/DirectoryHandler.php +++ b/app/src/Handlers/DirectoryHandler.php @@ -51,14 +51,16 @@ class DirectoryHandler try { $files = $this->finder->in($path)->depth(0); } catch (DirectoryNotFoundException $exception) { - return $this->view->render($response->withStatus(404), '404.twig'); + return $this->view->render($response->withStatus(404), 'error.twig', [ + 'code' => 404, + 'message' => 'Not Found', + ]); } return $this->view->render($response, 'index.twig', [ 'files' => $files, 'path' => $path, 'readme' => $this->readme($files), - 'title' => $path == '.' ? 'Home' : $path, ]); } diff --git a/app/src/Handlers/SearchHandler.php b/app/src/Handlers/SearchHandler.php index 8b67528..13aca69 100644 --- a/app/src/Handlers/SearchHandler.php +++ b/app/src/Handlers/SearchHandler.php @@ -40,6 +40,13 @@ class SearchHandler { $search = $request->getQueryParams()['search']; + if (empty($search)) { + return $this->view->render($response->withStatus(422), 'error.twig', [ + 'code' => 422, + 'message' => 'Unprocessable Entity', + ]); + } + $files = $this->finder->in('.')->name( sprintf('/(?:.*)%s(?:.*)/i', preg_quote($search, '/')) ); @@ -47,7 +54,6 @@ class SearchHandler return $this->view->render($response, 'index.twig', [ 'files' => $files, 'search' => $search, - 'title' => $search, ]); } } diff --git a/app/views/404.twig b/app/views/error.twig similarity index 82% rename from app/views/404.twig rename to app/views/error.twig index d0e2fad..cf81e9c 100644 --- a/app/views/404.twig +++ b/app/views/error.twig @@ -1,11 +1,12 @@ {% extends 'layouts/app.twig' %} +{% set title = message %} {% block content %} {% include 'components/header.twig' %}

- 404 • Not Found + {{ code }} • {{ message }}

diff --git a/app/views/index.twig b/app/views/index.twig index e8d7e95..13b7783 100644 --- a/app/views/index.twig +++ b/app/views/index.twig @@ -1,4 +1,5 @@ {% extends "layouts/app.twig" %} +{% set title = path == '.' ? 'Home' : path %} {% block content %} {% include "components/header.twig" %} diff --git a/tests/Handlers/SearchHandlerTest.php b/tests/Handlers/SearchHandlerTest.php index cf556c4..a7aa5ea 100644 --- a/tests/Handlers/SearchHandlerTest.php +++ b/tests/Handlers/SearchHandlerTest.php @@ -27,4 +27,19 @@ class SearchHandlerTest extends TestCase $this->assertInstanceOf(ResponseInterface::class, $response); $this->assertEquals(200, $response->getStatusCode()); } + + public function test_it_returns_an_error_for_a_blank_search(): void + { + $this->container->call(TwigProvider::class); + + $handler = new SearchHandler(new Finder, $this->container->get(Twig::class)); + + $request = $this->createMock(Request::class); + $request->method('getQueryParams')->willReturn(['search' => '']); + + $response = $handler($request, new Response); + + $this->assertInstanceOf(ResponseInterface::class, $response); + $this->assertEquals(422, $response->getStatusCode()); + } }