Files
php-flasher/tests/Laravel/Middleware/SessionMiddlewareTest.php
T
Younes ENNAJI 6de67f7fb3 chore: Refactor middleware to use Symfony's base response class
This commit updates the FlasherMiddleware and SessionMiddleware to utilize Symfony's base response class instead of Laravel's. This change ensures broader compatibility and addresses the issue with flash message rendering after page refreshes as identified by the community. Preparing for release in v2.0.2.
2024-05-26 13:20:48 +01:00

79 lines
2.7 KiB
PHP

<?php
declare(strict_types=1);
namespace Flasher\Tests\Laravel\Middleware;
use Flasher\Laravel\Http\Request;
use Flasher\Laravel\Http\Response;
use Flasher\Laravel\Middleware\SessionMiddleware;
use Flasher\Prime\Http\RequestExtensionInterface;
use Illuminate\Http\JsonResponse as LaravelJsonResponse;
use Illuminate\Http\Request as LaravelRequest;
use Illuminate\Http\Response as LaravelResponse;
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
use Mockery\MockInterface;
use PHPUnit\Framework\TestCase;
/**
* This TestCase is designed to test handle method of SessionMiddleware
* which wraps the given request into a Flasher Request and Flasher Response,
* and attaches them into Extension.
*/
final class SessionMiddlewareTest extends TestCase
{
use MockeryPHPUnitIntegration;
private MockInterface&RequestExtensionInterface $requestExtensionMock;
private SessionMiddleware $sessionMiddleware;
protected function setUp(): void
{
$this->requestExtensionMock = \Mockery::mock(RequestExtensionInterface::class);
$this->sessionMiddleware = new SessionMiddleware($this->requestExtensionMock);
}
public function testHandleWithLaravelResponse(): void
{
$requestMock = \Mockery::mock(LaravelRequest::class);
$responseMock = \Mockery::mock(LaravelResponse::class);
$this->requestExtensionMock->expects('flash')
->withArgs(function ($flasherRequest, $flasherResponse) {
return $flasherRequest instanceof Request && $flasherResponse instanceof Response;
});
$handle = $this->sessionMiddleware->handle($requestMock, fn () => $responseMock);
$this->assertSame($responseMock, $handle);
}
public function testHandleWithLaravelJsonResponse(): void
{
$requestMock = \Mockery::mock(LaravelRequest::class);
$responseMock = \Mockery::mock(LaravelJsonResponse::class);
$this->requestExtensionMock->expects('flash')
->withArgs(function ($flasherRequest, $flasherResponse) {
return $flasherRequest instanceof Request && $flasherResponse instanceof Response;
});
$handle = $this->sessionMiddleware->handle($requestMock, fn () => $responseMock);
$this->assertSame($responseMock, $handle);
}
public function testHandleWithOtherResponses(): void
{
$requestMock = \Mockery::mock(LaravelRequest::class);
$responseMock = \Mockery::mock(\Symfony\Component\HttpFoundation\Response::class);
$this->requestExtensionMock->allows('flash')->once();
$handle = $this->sessionMiddleware->handle($requestMock, fn () => $responseMock);
$this->assertSame($responseMock, $handle);
}
}