objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var \Magento\Framework\Filesystem $filesystem */ $this->filesystem = $this->objectManager->get(\Magento\Framework\Filesystem::class); $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); /** @var $uploader \Magento\MediaStorage\Model\File\Uploader */ $this->imageUploader = $this->objectManager->create( \Magento\Catalog\Model\ImageUploader::class, [ 'baseTmpPath' => $this->mediaDirectory->getRelativePath('tmp'), 'basePath' => __DIR__, 'allowedExtensions' => ['jpg', 'jpeg', 'gif', 'png'], 'allowedMimeTypes' => ['image/jpg', 'image/jpeg', 'image/gif', 'image/png'] ] ); } /** * @return void */ public function testSaveFileToTmpDir(): void { $fileName = 'magento_small_image.jpg'; $tmpDirectory = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::SYS_TMP); $fixtureDir = realpath(__DIR__ . '/../_files'); $filePath = $tmpDirectory->getAbsolutePath($fileName); copy($fixtureDir . DIRECTORY_SEPARATOR . $fileName, $filePath); $_FILES['image'] = [ 'name' => $fileName, 'type' => 'image/jpeg', 'tmp_name' => $filePath, 'error' => 0, 'size' => 12500, ]; $this->imageUploader->saveFileToTmpDir('image'); $filePath = $this->imageUploader->getBaseTmpPath() . DIRECTORY_SEPARATOR. $fileName; $this->assertTrue(is_file($this->mediaDirectory->getAbsolutePath($filePath))); } /** * @expectedException \Magento\Framework\Exception\LocalizedException * @expectedExceptionMessage File validation failed. * @return void */ public function testSaveFileToTmpDirWithWrongExtension(): void { $fileName = 'text.txt'; $tmpDirectory = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::SYS_TMP); $filePath = $tmpDirectory->getAbsolutePath($fileName); $file = fopen($filePath, "wb"); fwrite($file, 'just a text'); $_FILES['image'] = [ 'name' => $fileName, 'type' => 'text/plain', 'tmp_name' => $filePath, 'error' => 0, 'size' => 12500, ]; $this->imageUploader->saveFileToTmpDir('image'); $filePath = $this->imageUploader->getBaseTmpPath() . DIRECTORY_SEPARATOR. $fileName; $this->assertFalse(is_file($this->mediaDirectory->getAbsolutePath($filePath))); } /** * @expectedException \Magento\Framework\Exception\LocalizedException * @expectedExceptionMessage File validation failed. * @return void */ public function testSaveFileToTmpDirWithWrongFile(): void { $fileName = 'file.gif'; $tmpDirectory = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::SYS_TMP); $filePath = $tmpDirectory->getAbsolutePath($fileName); $file = fopen($filePath, "wb"); fwrite($file, 'just a text'); $_FILES['image'] = [ 'name' => $fileName, 'type' => 'image/gif', 'tmp_name' => $filePath, 'error' => 0, 'size' => 12500, ]; $this->imageUploader->saveFileToTmpDir('image'); $filePath = $this->imageUploader->getBaseTmpPath() . DIRECTORY_SEPARATOR. $fileName; $this->assertFalse(is_file($this->mediaDirectory->getAbsolutePath($filePath))); } /** * @inheritdoc */ public static function tearDownAfterClass() { parent::tearDownAfterClass(); $filesystem = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( \Magento\Framework\Filesystem::class ); /** @var \Magento\Framework\Filesystem\Directory\WriteInterface $mediaDirectory */ $mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA); $mediaDirectory->delete('tmp'); } }