diff --git a/src/Http/Faking/FakeResponse.php b/src/Http/Faking/FakeResponse.php index 9c532edf..8d930459 100644 --- a/src/Http/Faking/FakeResponse.php +++ b/src/Http/Faking/FakeResponse.php @@ -124,7 +124,7 @@ public function createPsrResponse(ResponseFactoryInterface $responseFactory, Str $response = $responseFactory->createResponse($this->status()); foreach ($this->headers()->all() as $headerName => $headerValue) { - $response = $response->withHeader($headerName, $headerValue); + $response = $response->withHeader($headerName, $headerValue ?? ''); } return $response->withBody($this->body()->toStream($streamFactory)); diff --git a/src/Traits/PendingRequest/ManagesPsrRequests.php b/src/Traits/PendingRequest/ManagesPsrRequests.php index 1cd8e155..1d966450 100644 --- a/src/Traits/PendingRequest/ManagesPsrRequests.php +++ b/src/Traits/PendingRequest/ManagesPsrRequests.php @@ -48,7 +48,7 @@ public function createPsrRequest(): RequestInterface ); foreach ($this->headers()->all() as $headerName => $headerValue) { - $request = $request->withHeader($headerName, $headerValue); + $request = $request->withHeader($headerName, $headerValue ?? ''); } if ($this->body() instanceof BodyRepository) { diff --git a/tests/Feature/PsrTest.php b/tests/Feature/PsrTest.php index 4d990323..1ceb027e 100644 --- a/tests/Feature/PsrTest.php +++ b/tests/Feature/PsrTest.php @@ -5,6 +5,8 @@ use GuzzleHttp\Psr7\Uri; use Saloon\Http\Faking\MockClient; use Saloon\Http\Faking\MockResponse; +use Saloon\Tests\Fixtures\Connectors\TestConnector; +use Saloon\Tests\Fixtures\Requests\NullHeaderRequest; use Saloon\Tests\Fixtures\Requests\ModifiedPsrUserRequest; use Saloon\Tests\Fixtures\Connectors\ModifiedPsrRequestConnector; @@ -26,3 +28,20 @@ expect($response->getPsrRequest()->getHeaders())->toHaveKey('X-Howdy', ['Yeehaw']); }); + +test('The psr request headers must be converted to empty string', function () { + $mockClient = new MockClient([ + MockResponse::make(headers: ['X-Null-Header' => null]), + ]); + + $connector = new TestConnector(); + $connector->withMockClient($mockClient); + + $response = $connector->send(new NullHeaderRequest()); + + // The request will convert null to empty string + expect($response->getPsrRequest()->getHeader('X-Null-Header')[0])->toBe(''); + + // The response will convert null header to empty string + expect($response->headers()->get('X-Null-Header'))->toBe(''); +}); diff --git a/tests/Fixtures/Requests/NullHeaderRequest.php b/tests/Fixtures/Requests/NullHeaderRequest.php new file mode 100644 index 00000000..7d70fe29 --- /dev/null +++ b/tests/Fixtures/Requests/NullHeaderRequest.php @@ -0,0 +1,33 @@ + null, + ]; + } +}