diff --git a/src/api-client/src/PendingRequest.php b/src/api-client/src/PendingRequest.php index 4e545ce9c..c838fe2aa 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 40e330f04..04efd3cd0 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;