diff --git a/src/bundle/IO/BinaryStreamResponse.php b/src/bundle/IO/BinaryStreamResponse.php index 3365bb8456..f1e799a07f 100644 --- a/src/bundle/IO/BinaryStreamResponse.php +++ b/src/bundle/IO/BinaryStreamResponse.php @@ -245,7 +245,7 @@ private function processRangeRequest(Request $request): void $this->setStatusCode(Response::HTTP_PARTIAL_CONTENT); $this->headers->set('Content-Range', sprintf('bytes %s-%s/%s', $start, $end, $fileSize)); - $this->headers->set('Content-Length', $end - $start + 1); + $this->headers->set('Content-Length', (string) ($end - $start + 1)); } } } diff --git a/tests/bundle/IO/BinaryStreamResponseTest.php b/tests/bundle/IO/BinaryStreamResponseTest.php index 1ebc485080..45de5fca8f 100644 --- a/tests/bundle/IO/BinaryStreamResponseTest.php +++ b/tests/bundle/IO/BinaryStreamResponseTest.php @@ -26,7 +26,8 @@ final class BinaryStreamResponseTest extends TestCase public function testSendContent(): void { $ioServiceMock = $this->createMock(IOServiceInterface::class); - $binaryStreamResponse = $this->prepareBinaryStreamResponse($ioServiceMock); + $request = $this->prepareRequest(); + $binaryStreamResponse = $this->prepareBinaryStreamResponse($ioServiceMock, $request); file_put_contents('php://input', 'test data'); $in = fopen('php://input', 'rb'); @@ -40,10 +41,42 @@ public function testSendContent(): void $binaryStreamResponse->sendContent(); } - private function prepareBinaryStreamResponse(IOServiceInterface & MockObject $ioServiceMock): BinaryStreamResponse + /** + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException + */ + public function testSendRangeContent(): void + { + $ioServiceMock = $this->createMock(IOServiceInterface::class); + $request = $this->prepareRequest(['Range' => 'bytes=0-499']); + $binaryStreamResponse = $this->prepareBinaryStreamResponse($ioServiceMock, $request); + + file_put_contents('php://input', 'test data'); + $in = fopen('php://input', 'rb'); + + $ioServiceMock + ->expects(self::once()) + ->method('getFileInputStream') + ->with($binaryStreamResponse->getFile()) + ->willReturn($in); + + $binaryStreamResponse->sendContent(); + } + + /** + * @param array $headers + */ + private function prepareRequest(array $headers = []): Request { $request = new Request(); + foreach ($headers as $name => $value) { + $request->headers->set($name, $value); + } + return $request; + } + + private function prepareBinaryStreamResponse(IOServiceInterface & MockObject $ioServiceMock, Request $request): BinaryStreamResponse + { $binaryFile = new BinaryFile(['id' => 'foo.jpg', 'size' => 5321]); $binaryStreamResponse = new BinaryStreamResponse($binaryFile, $ioServiceMock);