/**
  * Upload a file
  *
  * @param ProductMediaInterface $media     ProductMediaInterface entity
  * @param string                $filename  Filename
  * @param bool                  $overwrite Overwrite file or not
  */
 protected function upload(ProductMediaInterface $media, $filename, $overwrite = false)
 {
     if ($file = $media->getFile()) {
         if ($file instanceof UploadedFile && UPLOAD_ERR_OK !== $file->getError()) {
             return;
         }
         $pathname = $file->getPathname();
         $this->write($filename, file_get_contents($pathname), $overwrite);
         if ($file instanceof UploadedFile) {
             $originalFilename = $file->getClientOriginalName();
             $media->resetFile();
         } elseif (false !== strpos($file->getFilename(), $media->getOriginalFilename())) {
             $originalFilename = $media->getOriginalFilename();
         } elseif (null !== $media->getOriginalFilename() && '' !== $media->getOriginalFilename()) {
             $originalFilename = $media->getOriginalFilename();
             $media->resetFile();
         } else {
             $originalFilename = $file->getFilename();
             $media->resetFile();
         }
         $media->setOriginalFilename($originalFilename);
         $media->setFilename($filename);
         $media->setMimeType($file->getMimeType());
     }
 }
 function it_duplicates_product_media($filesystem, ProductMediaInterface $source, ProductMediaInterface $target, File $newFile)
 {
     $target->setFile(Argument::any())->shouldBeCalled();
     $source->getOriginalFilename()->willReturn('akeneo.jpg');
     // upload
     $target->getFile()->willReturn($newFile);
     $newFile->getPathname()->willReturn('/tmp/tmp-phpspec');
     // write a fake file in tmp
     $adapter = new LocalAdapter('/tmp');
     $fs = new Filesystem($adapter);
     $fs->write('tmp-phpspec', '', true);
     $source->getFilename()->willReturn('akeneo.jpg');
     $newFile->getFilename()->willReturn('akeneo.jpg');
     $filesystem->write('prefix-akeneo.jpg', '', false)->shouldBeCalled();
     $target->setOriginalFilename('akeneo.jpg')->shouldBeCalled();
     $target->setFilename('prefix-akeneo.jpg')->shouldBeCalled();
     $filesystem->has('akeneo.jpg')->willReturn(true);
     $target->getFilename()->willReturn('akeneo.jpg');
     $newFile->getMimeType()->willReturn('jpg');
     $target->setMimeType('jpg')->shouldBeCalled();
     $target->resetFile()->shouldBeCalled();
     // update original file name
     $source->getOriginalFilename()->willReturn('akeneo.jpg');
     $target->setOriginalFilename('akeneo.jpg')->shouldBeCalled();
     $this->duplicate($source, $target, 'prefix');
 }