![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-downloadable/Test/Unit/Helper/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Downloadable\Test\Unit\Helper; use Magento\Downloadable\Helper\Download as DownloadHelper; use Magento\Downloadable\Helper\File as DownloadableFile; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\File\Mime; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\Directory\ReadInterface as DirReadInterface; use Magento\Framework\Filesystem\File\ReadFactory; use Magento\Framework\Filesystem\File\ReadInterface as FileReadInterface; use Magento\Framework\Session\SessionManagerInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class DownloadTest extends TestCase { /** @var array Result of get_headers() function */ public static $headers; /** @var DownloadHelper */ protected $_helper; /** @var Filesystem|MockObject */ protected $_filesystemMock; /** @var FileReadInterface|MockObject */ protected $_handleMock; /** @var DirReadInterface|MockObject */ protected $_workingDirectoryMock; /** @var DownloadableFile|MockObject */ protected $_downloadableFileMock; /** @var SessionManagerInterface|MockObject */ protected $sessionManager; /** @var ReadFactory|MockObject */ protected $fileReadFactory; /** @var bool Result of function_exists() */ public static $functionExists; /** @var string Result of mime_content_type() */ public static $mimeContentType; const FILE_SIZE = 4096; const FILE_PATH = '/some/path'; const MIME_TYPE = 'image/png'; const URL = 'http://example.com'; /** * @var Mime|MockObject */ private $mime; protected function setUp(): void { require_once __DIR__ . '/../_files/download_mock.php'; self::$functionExists = true; self::$mimeContentType = self::MIME_TYPE; $this->_filesystemMock = $this->createMock(Filesystem::class); $this->_handleMock = $this->createMock(\Magento\Framework\Filesystem\File\ReadInterface::class); $this->_workingDirectoryMock = $this->createMock(\Magento\Framework\Filesystem\Directory\ReadInterface::class); $this->_downloadableFileMock = $this->createMock(\Magento\Downloadable\Helper\File::class); $this->sessionManager = $this->getMockForAbstractClass( SessionManagerInterface::class ); $this->fileReadFactory = $this->createMock(ReadFactory::class); $this->mime = $this->createMock(Mime::class); $this->_helper = (new ObjectManager($this))->getObject( \Magento\Downloadable\Helper\Download::class, [ 'downloadableFile' => $this->_downloadableFileMock, 'filesystem' => $this->_filesystemMock, 'session' => $this->sessionManager, 'fileReadFactory' => $this->fileReadFactory, 'mime' => $this->mime ] ); } public function testSetResourceInvalidPath() { $this->expectException('InvalidArgumentException'); $this->_helper->setResource('/some/path/../file', DownloadHelper::LINK_TYPE_FILE); } public function testGetFileSizeNoResource() { $this->expectException('Magento\Framework\Exception\LocalizedException'); $this->expectExceptionMessage('Please set resource file and link type.'); $this->_helper->getFileSize(); } public function testGetFileSizeInvalidLinkType() { $this->expectException('Magento\Framework\Exception\LocalizedException'); $this->expectExceptionMessage('Invalid download link type.'); $this->_helper->setResource(self::FILE_PATH, 'The link type is invalid. Verify and try again.'); $this->_helper->getFileSize(); } public function testGetFileSizeUrl() { $this->_setupUrlMocks(); $this->assertEquals(self::FILE_SIZE, $this->_helper->getFileSize()); } public function testGetFileSize() { $this->_setupFileMocks(); $this->assertEquals(self::FILE_SIZE, $this->_helper->getFileSize()); } public function testGetFileSizeNoFile() { $this->expectException('Magento\Framework\Exception\LocalizedException'); $this->expectExceptionMessage('Invalid download link type.'); $this->_setupFileMocks(false); $this->_helper->getFileSize(); } public function testGetContentType() { $this->mime->expects( self::once() )->method( 'getMimeType' )->willReturn( self::MIME_TYPE ); $this->_setupFileMocks(); $this->_downloadableFileMock->expects($this->never())->method('getFileType'); $this->_workingDirectoryMock->expects($this->once())->method('getAbsolutePath') ->willReturn('/path/to/file.txt'); $this->assertEquals(self::MIME_TYPE, $this->_helper->getContentType()); } /** * @dataProvider dataProviderForTestGetContentTypeThroughHelper */ public function testGetContentTypeThroughHelper($functionExistsResult, $mimeContentTypeResult) { $this->_setupFileMocks(); self::$functionExists = $functionExistsResult; self::$mimeContentType = $mimeContentTypeResult; $this->mime->expects( self::once() )->method( 'getMimeType' )->willReturn( self::MIME_TYPE ); $this->assertEquals(self::MIME_TYPE, $this->_helper->getContentType()); } /** * @return array */ public function dataProviderForTestGetContentTypeThroughHelper() { return [[false, ''], [true, false]]; } public function testGetContentTypeUrl() { $this->_setupUrlMocks(); $this->assertEquals(self::MIME_TYPE, $this->_helper->getContentType()); } public function testGetFilename() { $baseName = 'base_name.file'; $path = TESTS_TEMP_DIR . '/' . $baseName; $this->_setupFileMocks(true, self::FILE_SIZE, $path); $this->assertEquals($baseName, $this->_helper->getFilename()); } public function testGetFileNameUrl() { $this->_setupUrlMocks(); $this->assertEquals('example.com', $this->_helper->getFilename()); } public function testGetFileNameUrlWithContentDisposition() { $fileName = 'some_other.file'; $this->_setupUrlMocks(self::FILE_SIZE, self::URL, ['disposition' => "inline; filename={$fileName}"]); $this->assertEquals($fileName, $this->_helper->getFilename()); } /** * @param bool $doesExist * @param int $size * @param string $path */ protected function _setupFileMocks($doesExist = true, $size = self::FILE_SIZE, $path = self::FILE_PATH) { $this->_handleMock->expects($this->any())->method('stat')->willReturn(['size' => $size]); $this->_downloadableFileMock->expects($this->any())->method('ensureFileInFilesystem')->with($path) ->willReturn($doesExist); $this->_workingDirectoryMock->expects($doesExist ? $this->once() : $this->never())->method('openFile') ->willReturn($this->_handleMock); $this->_filesystemMock->expects($this->any())->method('getDirectoryRead')->with(DirectoryList::MEDIA) ->willReturn($this->_workingDirectoryMock); $this->_helper->setResource($path, DownloadHelper::LINK_TYPE_FILE); } /** * @param int $size * @param string $url * @param array $additionalStatData */ protected function _setupUrlMocks($size = self::FILE_SIZE, $url = self::URL, $additionalStatData = []) { $this->_handleMock->expects( $this->any() )->method( 'stat' )->willReturn( array_merge(['size' => $size, 'type' => self::MIME_TYPE], $additionalStatData) ); $this->fileReadFactory->expects( $this->once() )->method( 'create' )->willReturn( $this->_handleMock ); self::$headers = ['200 OK']; $this->_helper->setResource($url, DownloadHelper::LINK_TYPE_URL); } public function testOutput() { $this->sessionManager ->expects($this->once())->method('writeClose'); $this->_setupUrlMocks(self::FILE_SIZE, self::URL, ['disposition' => "inline; filename=test.txt"]); $this->_helper->output(); } }