Update CrossDomainMiddleware test

This commit is contained in:
Alejandro Celaya 2025-07-08 13:17:46 +02:00
parent cd4fcc9b0a
commit 1d96cc0279

View File

@ -8,6 +8,7 @@ use Laminas\Diactoros\Response;
use Laminas\Diactoros\ServerRequest;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\Attributes\TestWith;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Http\Server\RequestHandlerInterface;
@ -16,12 +17,10 @@ use Shlinkio\Shlink\Rest\Middleware\CrossDomainMiddleware;
class CrossDomainMiddlewareTest extends TestCase
{
private CrossDomainMiddleware $middleware;
private MockObject & RequestHandlerInterface $handler;
protected function setUp(): void
{
$this->middleware = new CrossDomainMiddleware(new CorsOptions(maxAge: 1000));
$this->handler = $this->createMock(RequestHandlerInterface::class);
}
@ -31,7 +30,7 @@ class CrossDomainMiddlewareTest extends TestCase
$originalResponse = (new Response())->withStatus(404);
$this->handler->expects($this->once())->method('handle')->willReturn($originalResponse);
$response = $this->middleware->process(new ServerRequest(), $this->handler);
$response = $this->middleware()->process(new ServerRequest(), $this->handler);
$headers = $response->getHeaders();
self::assertSame($originalResponse, $response);
@ -48,7 +47,7 @@ class CrossDomainMiddlewareTest extends TestCase
$originalResponse = new Response();
$this->handler->expects($this->once())->method('handle')->willReturn($originalResponse);
$response = $this->middleware->process((new ServerRequest())->withHeader('Origin', 'local'), $this->handler);
$response = $this->middleware()->process((new ServerRequest())->withHeader('Origin', 'local'), $this->handler);
self::assertNotSame($originalResponse, $response);
$headers = $response->getHeaders();
@ -69,7 +68,7 @@ class CrossDomainMiddlewareTest extends TestCase
->withHeader('Access-Control-Request-Headers', 'foo, bar, baz');
$this->handler->expects($this->once())->method('handle')->willReturn($originalResponse);
$response = $this->middleware->process($request, $this->handler);
$response = $this->middleware()->process($request, $this->handler);
self::assertNotSame($originalResponse, $response);
$headers = $response->getHeaders();
@ -94,7 +93,7 @@ class CrossDomainMiddlewareTest extends TestCase
->withMethod('OPTIONS');
$this->handler->expects($this->once())->method('handle')->willReturn($originalResponse);
$response = $this->middleware->process($request, $this->handler);
$response = $this->middleware()->process($request, $this->handler);
self::assertEquals($response->getHeaderLine('Access-Control-Allow-Methods'), $expectedAllowedMethods);
self::assertEquals(204, $response->getStatusCode());
@ -118,7 +117,7 @@ class CrossDomainMiddlewareTest extends TestCase
->withHeader('Origin', 'local');
$this->handler->expects($this->once())->method('handle')->willReturn($originalResponse);
$response = $this->middleware->process($request, $this->handler);
$response = $this->middleware()->process($request, $this->handler);
self::assertEquals($expectedStatus, $response->getStatusCode());
}
@ -141,4 +140,30 @@ class CrossDomainMiddlewareTest extends TestCase
yield 'OPTIONS 400' => ['OPTIONS', 400, 204];
yield 'OPTIONS 500' => ['OPTIONS', 500, 204];
}
#[Test]
#[TestWith([true])]
#[TestWith([false])]
public function credentialsAreAllowedIfConfiguredSo(bool $allowCredentials): void
{
$originalResponse = new Response();
$request = (new ServerRequest())
->withMethod('OPTIONS')
->withHeader('Origin', 'local');
$this->handler->method('handle')->willReturn($originalResponse);
$response = $this->middleware(allowCredentials: $allowCredentials)->process($request, $this->handler);
$headers = $response->getHeaders();
if ($allowCredentials) {
self::assertArrayHasKey('Access-Control-Allow-Credentials', $headers);
} else {
self::assertArrayNotHasKey('Access-Control-Allow-Credentials', $headers);
}
}
private function middleware(bool $allowCredentials = false): CrossDomainMiddleware
{
return new CrossDomainMiddleware(new CorsOptions(allowCredentials: $allowCredentials, maxAge: 1000));
}
}