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')); } }