From 07cb69570aab7c522e18d5a45f53fe3c50e80add Mon Sep 17 00:00:00 2001 From: Albert Chen Date: Wed, 24 Dec 2025 19:51:51 +0800 Subject: [PATCH] fix: add missing options to handleMiddlewareResponse --- src/api-client/src/PendingRequest.php | 2 +- tests/ApiClient/PendingRequestTest.php | 46 +++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/api-client/src/PendingRequest.php b/src/api-client/src/PendingRequest.php index 4e545ce9..c838fe2a 100644 --- a/src/api-client/src/PendingRequest.php +++ b/src/api-client/src/PendingRequest.php @@ -301,7 +301,7 @@ protected function handleMiddlewareRequest(ApiRequest $request): ApiRequest protected function handleMiddlewareResponse(ApiResponse $response): ApiResponse { return $this->pipeline - ->send($response) + ->send($response->withContext('options', $this->middlewareOptions)) ->through($this->createMiddleware($this->responseMiddleware)) ->thenReturn(); } diff --git a/tests/ApiClient/PendingRequestTest.php b/tests/ApiClient/PendingRequestTest.php index 40e330f0..04efd3cd 100644 --- a/tests/ApiClient/PendingRequestTest.php +++ b/tests/ApiClient/PendingRequestTest.php @@ -171,20 +171,36 @@ public function testMiddlewareCanBeEnabled(): void TestRequestMiddleware::reset(); } - public function testWithMiddlewareOptionsPassesOptionsToMiddleware(): void + public function testWithMiddlewareOptionsPassesOptionsToRequestMiddleware(): void { $client = new ApiClient(); $options = ['key' => 'value', 'timeout' => 30]; $pending = $client ->withMiddlewareOptions($options) - ->withRequestMiddleware([OptionsCheckingMiddleware::class]); + ->withRequestMiddleware([RequestOptionsCheckingMiddleware::class]); Http::fake(['test' => Http::response('{"success": true}')]); $pending->get('test'); - $this->assertEquals($options, OptionsCheckingMiddleware::$receivedOptions); - OptionsCheckingMiddleware::reset(); + $this->assertEquals($options, RequestOptionsCheckingMiddleware::$receivedOptions); + RequestOptionsCheckingMiddleware::reset(); + } + + public function testWithMiddlewareOptionsPassesOptionsToResponseMiddleware(): void + { + $client = new ApiClient(); + $options = ['key' => 'value', 'timeout' => 30]; + + $pending = $client + ->withMiddlewareOptions($options) + ->withResponseMiddleware([ResponseOptionsCheckingMiddleware::class]); + + Http::fake(['test' => Http::response('{"success": true}')]); + $pending->get('test'); + + $this->assertEquals($options, ResponseOptionsCheckingMiddleware::$receivedOptions); + ResponseOptionsCheckingMiddleware::reset(); } public function testMiddlewareCaching(): void @@ -462,7 +478,7 @@ public function handle(ApiRequest $request, callable $next): ApiRequest } } -class OptionsCheckingMiddleware +class RequestOptionsCheckingMiddleware { public static ?array $receivedOptions = null; @@ -482,6 +498,26 @@ public static function reset(): void } } +class ResponseOptionsCheckingMiddleware +{ + public static ?array $receivedOptions = null; + + public function __construct(protected ?array $config = null) + { + } + + public function handle(ApiResponse $response, callable $next): ApiResponse + { + self::$receivedOptions = $response->context('options'); + return $next($response); + } + + public static function reset(): void + { + self::$receivedOptions = null; + } +} + class CachingTestMiddleware { public static ?string $instanceId = null;