Skip to content

Commit 2715b99

Browse files
committed
Don't try to decode empty bodies
1 parent a592935 commit 2715b99

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/JsonDecodeMiddleware.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use ApiClients\Foundation\Middleware\MiddlewareInterface;
88
use ApiClients\Foundation\Middleware\PreTrait;
99
use ApiClients\Tools\Json\JsonDecodeService;
10+
use GuzzleHttp\Psr7\BufferStream;
1011
use Psr\Http\Message\ResponseInterface;
1112
use React\Promise\CancellablePromiseInterface;
1213
use React\Stream\ReadableStreamInterface;
@@ -47,7 +48,14 @@ public function post(
4748
return resolve($response);
4849
}
4950

50-
return $this->jsonDecodeService->decode((string)$response->getBody())->then(function ($json) use ($response) {
51+
$body = (string)$response->getBody();
52+
if ($body === '') {
53+
$stream = new BufferStream(0);
54+
$stream->write($body);
55+
return resolve($response->withBody($stream));
56+
}
57+
58+
return $this->jsonDecodeService->decode($body)->then(function ($json) use ($response) {
5159
$body = new JsonStream($json);
5260
return resolve($response->withBody($body));
5361
});

tests/JsonDecodeMiddlewareTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,20 @@ public function testPostNoJson()
4949
)
5050
);
5151
}
52+
53+
public function testPostEmpty()
54+
{
55+
$loop = Factory::create();
56+
$service = new JsonDecodeService($loop);
57+
$middleware = new JsonDecodeMiddleware($service);
58+
$response = new Response(200, [], '');
59+
60+
self::assertSame(
61+
'',
62+
(string)await(
63+
$middleware->post($response, 'abc'),
64+
$loop
65+
)->getBody()
66+
);
67+
}
5268
}

0 commit comments

Comments
 (0)