![]() 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-analytics/Test/Unit/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Analytics\Test\Unit\Model; use Magento\Analytics\Model\EncodedContext; use Magento\Analytics\Model\FileInfo; use Magento\Analytics\Model\FileInfoFactory; use Magento\Analytics\Model\FileInfoManager; use Magento\Analytics\Model\FileRecorder; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\Directory\WriteInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class FileRecorderTest extends TestCase { /** * @var FileInfoManager|MockObject */ private $fileInfoManagerMock; /** * @var FileInfoFactory|MockObject */ private $fileInfoFactoryMock; /** * @var Filesystem|MockObject */ private $filesystemMock; /** * @var FileInfo|MockObject */ private $fileInfoMock; /** * @var WriteInterface|MockObject */ private $directoryMock; /** * @var EncodedContext|MockObject */ private $encodedContextMock; /** * @var ObjectManagerHelper */ private $objectManagerHelper; /** * @var FileRecorder */ private $fileRecorder; /** * @var string */ private $fileSubdirectoryPath = 'analytics_subdir/'; /** * @var string */ private $encodedFileName = 'filename.tgz'; /** * @return void */ protected function setUp(): void { $this->fileInfoManagerMock = $this->createMock(FileInfoManager::class); $this->fileInfoFactoryMock = $this->getMockBuilder(FileInfoFactory::class) ->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); $this->filesystemMock = $this->createMock(Filesystem::class); $this->fileInfoMock = $this->createMock(FileInfo::class); $this->directoryMock = $this->getMockForAbstractClass(WriteInterface::class); $this->encodedContextMock = $this->createMock(EncodedContext::class); $this->objectManagerHelper = new ObjectManagerHelper($this); $this->fileRecorder = $this->objectManagerHelper->getObject( FileRecorder::class, [ 'fileInfoManager' => $this->fileInfoManagerMock, 'fileInfoFactory' => $this->fileInfoFactoryMock, 'filesystem' => $this->filesystemMock, 'fileSubdirectoryPath' => $this->fileSubdirectoryPath, 'encodedFileName' => $this->encodedFileName, ] ); } /** * @param string $pathToExistingFile * @dataProvider recordNewFileDataProvider */ public function testRecordNewFile($pathToExistingFile) { $content = openssl_random_pseudo_bytes(200); $this->filesystemMock ->expects($this->once()) ->method('getDirectoryWrite') ->with(DirectoryList::MEDIA) ->willReturn($this->directoryMock); $this->encodedContextMock ->expects($this->once()) ->method('getContent') ->with() ->willReturn($content); $hashLength = 64; $fileRelativePathPattern = '#' . preg_quote($this->fileSubdirectoryPath, '#') . '.{' . $hashLength . '}/' . preg_quote($this->encodedFileName, '#') . '#'; $this->directoryMock ->expects($this->once()) ->method('writeFile') ->with($this->matchesRegularExpression($fileRelativePathPattern), $content) ->willReturn($this->directoryMock); $this->fileInfoManagerMock ->expects($this->once()) ->method('load') ->with() ->willReturn($this->fileInfoMock); $this->encodedContextMock ->expects($this->once()) ->method('getInitializationVector') ->with() ->willReturn('init_vector***'); /** register file */ $this->fileInfoFactoryMock ->expects($this->once()) ->method('create') ->with($this->callback( function ($parameters) { return !empty($parameters['path']) && ('init_vector***' === $parameters['initializationVector']); } )) ->willReturn($this->fileInfoMock); $this->fileInfoManagerMock ->expects($this->once()) ->method('save') ->with($this->fileInfoMock); /** remove old file */ $this->fileInfoMock ->expects($this->exactly($pathToExistingFile ? 3 : 1)) ->method('getPath') ->with() ->willReturn($pathToExistingFile); $directoryName = dirname($pathToExistingFile); if ($directoryName === '.') { $this->directoryMock ->expects($this->once()) ->method('delete') ->with($pathToExistingFile); } elseif ($directoryName) { $this->directoryMock ->expects($this->exactly(2)) ->method('delete') ->withConsecutive( [$pathToExistingFile], [$directoryName] ); } $this->assertTrue($this->fileRecorder->recordNewFile($this->encodedContextMock)); } /** * @return array */ public function recordNewFileDataProvider() { return [ 'File doesn\'t exist' => [''], 'Existing file into subdirectory' => ['dir_name/file.txt'], 'Existing file doesn\'t into subdirectory' => ['file.txt'], ]; } }