/**
  * {@inheritdoc}
  */
 public function download($hash, array $chunks, $mimetype, $size)
 {
     $file = new ChunkFile();
     $file->setHash($hash);
     $file->setMimetype($mimetype);
     $file->setSize($size);
     $result = array();
     foreach ($chunks as $chunkHash) {
         $result[] = $this->chunkManager->downloadProxy($chunkHash);
     }
     $file->setChunks($result);
     return $file;
 }
 public function testDownload()
 {
     $mimeType = 'application/json';
     $size = 999;
     $data = $this->generateString(200);
     $fileName = tempnam('', 'splitter-test-file');
     file_put_contents($fileName, $data);
     $fileHash = 'my-hash';
     $chunk1 = new Chunk();
     $chunk1->setHash('hash1');
     $chunk1->setData(substr($data, 0, 100));
     $chunk2 = new Chunk();
     $chunk2->setHash('hash2');
     $chunk2->setData(substr($data, 100, 100));
     $file = new ChunkFile();
     $file->setHash($fileHash);
     $file->setChunks(array($chunk1, $chunk2));
     $file->setMimeType($mimeType);
     $file->setSize($size);
     $fileSplitter = new FileSplitter(100);
     $chunkManager = $this->prophesize(ChunkManagerInterface::class);
     $factory = $this->prophesize(FactoryInterface::class);
     $proxyFactory = new LazyLoadingValueHolderFactory();
     $chunkManager->upload()->should(new NoCallsPrediction());
     $chunkManager->download()->should(new NoCallsPrediction());
     $chunkManager->downloadProxy($chunk1->getHash())->willReturn($chunk1);
     $chunkManager->downloadProxy($chunk2->getHash())->willReturn($chunk2);
     $factory->createHash()->should(new NoCallsPrediction());
     $factory->createFileHash()->should(new NoCallsPrediction());
     $factory->createProxy(Argument::type('string'), Argument::type('callable'))->will(function ($args) use($proxyFactory) {
         return $proxyFactory->createProxy($args[0], $args[1]);
     });
     $manager = new ChunkFileManager($fileSplitter, $chunkManager->reveal(), $factory->reveal());
     $result = $manager->download($fileHash, array($chunk1->getHash(), $chunk2->getHash()), $mimeType, $size);
     $this->assertEquals($file->getHash(), $result->getHash());
     $this->assertEquals($file->getChunks(), $result->getChunks());
     $this->assertEquals($mimeType, $result->getMimeType());
     $this->assertEquals($size, $result->getSize());
 }