From d52ab0b1e99aa0c494f389092dce1e926296032d Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Sat, 12 Sep 2020 12:42:19 +0200 Subject: Properly handle 404 errors Use 404 template instead of default Slim error page if the route is not found. Fixes #827 --- .../visitor/ErrorNotFoundControllerTest.php | 81 ++++++++++++++++++++++ .../visitor/FrontControllerMockHelper.php | 1 - 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 tests/front/controller/visitor/ErrorNotFoundControllerTest.php (limited to 'tests/front') diff --git a/tests/front/controller/visitor/ErrorNotFoundControllerTest.php b/tests/front/controller/visitor/ErrorNotFoundControllerTest.php new file mode 100644 index 00000000..625467b1 --- /dev/null +++ b/tests/front/controller/visitor/ErrorNotFoundControllerTest.php @@ -0,0 +1,81 @@ +createContainer(); + + $this->controller = new ErrorNotFoundController($this->container); + } + + /** + * Test displaying 404 error + */ + public function testDisplayNotFoundError(): void + { + $request = $this->createMock(Request::class); + $request->expects(static::once())->method('getRequestTarget')->willReturn('/'); + $request->method('getUri')->willReturnCallback(function (): Uri { + $uri = $this->createMock(Uri::class); + $uri->method('getBasePath')->willReturn('/subfolder'); + + return $uri; + }); + + $response = new Response(); + + // Save RainTPL assigned variables + $assignedVariables = []; + $this->assignTemplateVars($assignedVariables); + + $result = ($this->controller)( + $request, + $response + ); + + static::assertSame(404, $result->getStatusCode()); + static::assertSame('404', (string) $result->getBody()); + static::assertSame('Requested page could not be found.', $assignedVariables['error_message']); + } + + /** + * Test displaying 404 error from REST API + */ + public function testDisplayNotFoundErrorFromAPI(): void + { + $request = $this->createMock(Request::class); + $request->expects(static::once())->method('getRequestTarget')->willReturn('/sufolder/api/v1/links'); + $request->method('getUri')->willReturnCallback(function (): Uri { + $uri = $this->createMock(Uri::class); + $uri->method('getBasePath')->willReturn('/subfolder'); + + return $uri; + }); + + $response = new Response(); + + // Save RainTPL assigned variables + $assignedVariables = []; + $this->assignTemplateVars($assignedVariables); + + $result = ($this->controller)($request, $response); + + static::assertSame(404, $result->getStatusCode()); + static::assertSame([], $assignedVariables); + } +} diff --git a/tests/front/controller/visitor/FrontControllerMockHelper.php b/tests/front/controller/visitor/FrontControllerMockHelper.php index e0bd4ecf..927e7f0a 100644 --- a/tests/front/controller/visitor/FrontControllerMockHelper.php +++ b/tests/front/controller/visitor/FrontControllerMockHelper.php @@ -94,7 +94,6 @@ trait FrontControllerMockHelper protected function assignTemplateVars(array &$variables): void { $this->container->pageBuilder - ->expects(static::atLeastOnce()) ->method('assign') ->willReturnCallback(function ($key, $value) use (&$variables) { $variables[$key] = $value; -- cgit v1.2.3