123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- 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\Filesystem;
- use Magento\Framework\Filesystem\Directory\ReadInterface as DirReadInterface;
- use Magento\Framework\Filesystem\File\ReadInterface as FileReadInterface;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class DownloadTest extends \PHPUnit\Framework\TestCase
- {
- /** @var DownloadHelper */
- protected $_helper;
- /** @var Filesystem|\PHPUnit_Framework_MockObject_MockObject */
- protected $_filesystemMock;
- /** @var FileReadInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_handleMock;
- /** @var DirReadInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_workingDirectoryMock;
- /** @var DownloadableFile|\PHPUnit_Framework_MockObject_MockObject */
- protected $_downloadableFileMock;
- /** @var \Magento\Framework\Session\SessionManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $sessionManager;
- /** @var \Magento\Framework\Filesystem\File\ReadFactory|\PHPUnit_Framework_MockObject_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';
- protected function setUp()
- {
- require_once __DIR__ . '/../_files/download_mock.php';
- self::$functionExists = true;
- self::$mimeContentType = self::MIME_TYPE;
- $this->_filesystemMock = $this->createMock(\Magento\Framework\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(
- \Magento\Framework\Session\SessionManagerInterface::class
- );
- $this->fileReadFactory = $this->createMock(\Magento\Framework\Filesystem\File\ReadFactory::class);
- $this->_helper = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))->getObject(
- \Magento\Downloadable\Helper\Download::class,
- [
- 'downloadableFile' => $this->_downloadableFileMock,
- 'filesystem' => $this->_filesystemMock,
- 'session' => $this->sessionManager,
- 'fileReadFactory' => $this->fileReadFactory,
- ]
- );
- }
- /**
- * @expectedException \InvalidArgumentException
- */
- public function testSetResourceInvalidPath()
- {
- $this->_helper->setResource('/some/path/../file', DownloadHelper::LINK_TYPE_FILE);
- }
- /**
- * @expectedException \Magento\Framework\Exception\LocalizedException
- * @expectedExceptionMessage Please set resource file and link type.
- */
- public function testGetFileSizeNoResource()
- {
- $this->_helper->getFileSize();
- }
- /**
- * @expectedException \Magento\Framework\Exception\LocalizedException
- * @expectedExceptionMessage Invalid download link type.
- */
- public function testGetFileSizeInvalidLinkType()
- {
- $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());
- }
- /**
- * @expectedException \Magento\Framework\Exception\LocalizedException
- * @expectedExceptionMessage Invalid download link type.
- */
- public function testGetFileSizeNoFile()
- {
- $this->_setupFileMocks(false);
- $this->_helper->getFileSize();
- }
- public function testGetContentType()
- {
- $this->_setupFileMocks();
- $this->_downloadableFileMock->expects($this->never())->method('getFileType');
- $this->assertEquals(self::MIME_TYPE, $this->_helper->getContentType());
- }
- /**
- * @dataProvider dataProviderForTestGetContentTypeThroughHelper
- */
- public function testGetContentTypeThroughHelper($functionExistsResult, $mimeContentTypeResult)
- {
- $this->_setupFileMocks();
- self::$functionExists = $functionExistsResult;
- self::$mimeContentType = $mimeContentTypeResult;
- $this->_downloadableFileMock->expects(
- $this->once()
- )->method(
- 'getFileType'
- )->will(
- $this->returnValue(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')->will($this->returnValue(['size' => $size]));
- $this->_downloadableFileMock->expects($this->any())->method('ensureFileInFilesystem')->with($path)
- ->will($this->returnValue($doesExist));
- $this->_workingDirectoryMock->expects($doesExist ? $this->once() : $this->never())->method('openFile')
- ->will($this->returnValue($this->_handleMock));
- $this->_filesystemMock->expects($this->any())->method('getDirectoryRead')->with(DirectoryList::MEDIA)
- ->will($this->returnValue($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'
- )->will(
- $this->returnValue(array_merge(['size' => $size, 'type' => self::MIME_TYPE], $additionalStatData))
- );
- $this->fileReadFactory->expects(
- $this->once()
- )->method(
- 'create'
- )->will(
- $this->returnValue($this->_handleMock)
- );
- $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();
- }
- }
|