fedi-feed-router/backend/tests/Unit/Http/Middleware/HandleAppearanceTest.php
2025-08-15 22:09:55 +02:00

150 lines
No EOL
4.2 KiB
PHP

<?php
namespace Tests\Unit\Http\Middleware;
use App\Http\Middleware\HandleAppearance;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\View;
use Tests\TestCase;
class HandleAppearanceTest extends TestCase
{
protected HandleAppearance $middleware;
protected function setUp(): void
{
parent::setUp();
$this->middleware = new HandleAppearance();
}
public function test_handle_shares_appearance_from_cookie(): void
{
View::shouldReceive('share')
->once()
->with('appearance', 'dark');
$request = Request::create('/test');
$request->cookies->set('appearance', 'dark');
$next = function ($request) {
return new Response();
};
$response = $this->middleware->handle($request, $next);
$this->assertInstanceOf(Response::class, $response);
}
public function test_handle_uses_system_as_default_when_no_cookie(): void
{
View::shouldReceive('share')
->once()
->with('appearance', 'system');
$request = Request::create('/test');
$next = function ($request) {
return new Response();
};
$response = $this->middleware->handle($request, $next);
$this->assertInstanceOf(Response::class, $response);
}
public function test_handle_shares_light_appearance(): void
{
View::shouldReceive('share')
->once()
->with('appearance', 'light');
$request = Request::create('/test');
$request->cookies->set('appearance', 'light');
$next = function ($request) {
return new Response();
};
$response = $this->middleware->handle($request, $next);
$this->assertInstanceOf(Response::class, $response);
}
public function test_handle_passes_request_to_next_middleware(): void
{
View::shouldReceive('share')
->once()
->with('appearance', 'system');
$request = Request::create('/test');
$expectedResponse = new Response('Test content', 200);
$next = function ($passedRequest) use ($request, $expectedResponse) {
$this->assertSame($request, $passedRequest);
return $expectedResponse;
};
$response = $this->middleware->handle($request, $next);
$this->assertSame($expectedResponse, $response);
}
public function test_handle_with_custom_appearance_value(): void
{
View::shouldReceive('share')
->once()
->with('appearance', 'custom-theme');
$request = Request::create('/test');
$request->cookies->set('appearance', 'custom-theme');
$next = function ($request) {
return new Response();
};
$response = $this->middleware->handle($request, $next);
$this->assertInstanceOf(Response::class, $response);
}
public function test_handle_with_empty_cookie_value(): void
{
View::shouldReceive('share')
->once()
->with('appearance', '');
$request = Request::create('/test');
$request->cookies->set('appearance', '');
$next = function ($request) {
return new Response();
};
$response = $this->middleware->handle($request, $next);
$this->assertInstanceOf(Response::class, $response);
}
public function test_handle_preserves_response_status_and_headers(): void
{
View::shouldReceive('share')
->once()
->with('appearance', 'system');
$request = Request::create('/test');
$expectedHeaders = ['X-Test-Header' => 'test-value'];
$next = function ($request) use ($expectedHeaders) {
$response = new Response('Test content', 201);
$response->headers->add($expectedHeaders);
return $response;
};
$response = $this->middleware->handle($request, $next);
$this->assertEquals(201, $response->getStatusCode());
$this->assertEquals('Test content', $response->getContent());
$this->assertEquals('test-value', $response->headers->get('X-Test-Header'));
}
}