Skip to content

Commit eb515a0

Browse files
committed
add test and refactoring
1 parent 305720a commit eb515a0

4 files changed

Lines changed: 44 additions & 26 deletions

File tree

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Flowpack\SeoRouting\Exceptions\Http;
6+
7+
use Throwable;
8+
9+
/**
10+
* An exception where the HTTP status code can be set.
11+
*/
12+
class Exception extends \Neos\Flow\Http\Exception
13+
{
14+
public function __construct(int $statusCode, string $message = "", int $code = 0, ?Throwable $previous = null)
15+
{
16+
parent::__construct($message, $code, $previous);
17+
18+
$this->statusCode = $statusCode;
19+
}
20+
}

Classes/Helper/ExceptionHelper.php

Lines changed: 0 additions & 19 deletions
This file was deleted.

Classes/RoutingMiddleware.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
namespace Flowpack\SeoRouting;
66

77
use Flowpack\SeoRouting\Enum\TrailingSlashModeEnum;
8+
use Flowpack\SeoRouting\Exceptions\Http\Exception as HttpException;
89
use Flowpack\SeoRouting\Helper\BlocklistHelper;
910
use Flowpack\SeoRouting\Helper\ConfigurationHelper;
10-
use Flowpack\SeoRouting\Helper\ExceptionHelper;
1111
use Flowpack\SeoRouting\Helper\LowerCaseHelper;
1212
use Flowpack\SeoRouting\Helper\TrailingSlashHelper;
1313
use Neos\Flow\Annotations as Flow;
@@ -34,6 +34,9 @@ class RoutingMiddleware implements MiddlewareInterface
3434
#[Flow\Inject]
3535
protected LowerCaseHelper $lowerCaseHelper;
3636

37+
/**
38+
* @throws HttpException
39+
*/
3740
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
3841
{
3942
$isTrailingSlashEnabled = $this->configurationHelper->isTrailingSlashEnabled();
@@ -71,9 +74,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
7174
$statusCode = $this->configurationHelper->getStatusCode();
7275

7376
if ($statusCode >= 400) {
74-
$exception = new ExceptionHelper();
75-
$exception->setStatusCode($statusCode);
76-
throw $exception;
77+
throw new HttpException($statusCode);
7778
}
7879

7980
return $this->responseFactory->createResponse($statusCode)

Tests/Unit/RoutingMiddlewareTest.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Flowpack\SeoRouting\Tests\Unit;
66

77
use Flowpack\SeoRouting\Enum\TrailingSlashModeEnum;
8+
use Flowpack\SeoRouting\Exceptions\Http\Exception as HttpException;
89
use Flowpack\SeoRouting\Helper\BlocklistHelper;
910
use Flowpack\SeoRouting\Helper\ConfigurationHelper;
1011
use Flowpack\SeoRouting\Helper\LowerCaseHelper;
@@ -23,6 +24,7 @@
2324
use ReflectionClass;
2425

2526
#[CoversClass(RoutingMiddleware::class)]
27+
#[CoversClass(HttpException::class)]
2628
class RoutingMiddlewareTest extends TestCase
2729
{
2830
private readonly RoutingMiddleware $routingMiddleware;
@@ -82,6 +84,7 @@ public function testProcessShouldHandleUrlsCorrectly(
8284
int $statusCode,
8385
TrailingSlashModeEnum $trailingSlashMode,
8486
int $handlerStatusCode = 200,
87+
?string $expectedException = null,
8588
): void {
8689
$originalUri = new Uri($originalUrl);
8790
$expectedUri = new Uri($expectedUrl);
@@ -98,8 +101,12 @@ public function testProcessShouldHandleUrlsCorrectly(
98101
$this->requestMock->expects($this->once())->method('getUri')->willReturn($originalUri);
99102

100103
$pathChanged = $originalUrl !== $expectedUrl;
101-
102-
if (!$pathChanged) {
104+
if (is_string($expectedException)) {
105+
$this->expectException($expectedException);
106+
$this->responseFactoryMock->expects($this->never())->method('createResponse');
107+
$this->routingMiddleware->process($this->requestMock, $this->requestHandlerMock);
108+
return;
109+
} elseif (!$pathChanged) {
103110
$this->requestHandlerMock->method('handle')->willReturn($this->responseMock);
104111
} elseif ($handlerStatusCode >= 400) {
105112
$this->responseMock->method('getStatusCode')->willReturn($handlerStatusCode);
@@ -122,7 +129,6 @@ public function testProcessShouldHandleUrlsCorrectly(
122129
->with('Location', (string)$expectedUri)
123130
->willReturnSelf();
124131
}
125-
126132
self::assertSame(
127133
$this->responseMock,
128134
$this->routingMiddleware->process($this->requestMock, $this->requestHandlerMock)
@@ -190,6 +196,16 @@ public static function urlsDataProvider(): array
190196
'trailingSlashMode' => TrailingSlashModeEnum::ADD,
191197
'handlerStatusCode' => 404,
192198
],
199+
[
200+
'originalUrl' => 'https://local.dev',
201+
'expectedUrl' => 'https://local.dev/',
202+
'isTrailingSlashEnabledResult' => true,
203+
'isToLowerCaseEnabledResult' => false,
204+
'isUriInBlocklistResult' => false,
205+
'statusCode' => 404,
206+
'trailingSlashMode' => TrailingSlashModeEnum::ADD,
207+
'expectedException' => HttpException::class
208+
],
193209
];
194210
}
195211
}

0 commit comments

Comments
 (0)