150 lines
4.2 KiB
PHP
150 lines
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'));
|
||
|
|
}
|
||
|
|
}
|