![]() 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-sample-data/Test/Unit/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types = 1); namespace Magento\SampleData\Test\Unit\Model; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Component\ComponentRegistrarInterface; use Magento\Framework\Composer\ComposerInformation; use Magento\Framework\Config\Composer\Package; use Magento\Framework\Config\Composer\PackageFactory; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\Directory\ReadFactory; use Magento\Framework\Filesystem\Directory\ReadInterface; use Magento\Framework\Filesystem\DriverPool; use Magento\Framework\Phrase; use Magento\SampleData\Model\Dependency; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Provides tests for Dependency model of SampleData module * * @covers \Magento\SampleData\Model\Dependency * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class DependencyTest extends TestCase { /** * @param string[] $moduleDirectories * @param callable $composerJsonGenerator * @param string[] $suggestionsFromLockFile * @param string[] $expectedPackages * @return void * @throws FileSystemException * * @dataProvider dataPackagesFromComposerSuggest */ public function testPackagesFromComposerSuggest( array $moduleDirectories, callable $composerJsonGenerator, array $suggestionsFromLockFile, array $expectedPackages ): void { /** @var ComposerInformation|MockObject $composerInformation */ $composerInformation = $this->getMockBuilder(ComposerInformation::class) ->disableOriginalConstructor() ->getMock(); $composerInformation->method('getSuggestedPackages') ->willReturn($suggestionsFromLockFile); /** @var Filesystem|MockObject $filesystem */ $filesystem = $this->getMockBuilder(Filesystem::class) ->disableOriginalConstructor() ->getMock(); /** @var PackageFactory|MockObject $packageFactory */ $packageFactory = $this->getMockBuilder(PackageFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $packageFactory->method('create') ->willReturnCallback(function ($args) { return new Package($args['json']); }); /** @var ComponentRegistrarInterface|MockObject $componentRegistrar */ $componentRegistrar = $this->getMockBuilder( ComponentRegistrarInterface::class )->getMockForAbstractClass(); $componentRegistrar->method('getPaths') ->with(ComponentRegistrar::MODULE) ->willReturn($moduleDirectories); $directoryReadFactory = $this->getMockBuilder(ReadFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $directoryReadFactory->method('create') ->willReturnMap($composerJsonGenerator($this)); $dependency = new Dependency( $composerInformation, $filesystem, $packageFactory, $componentRegistrar, $directoryReadFactory ); $this->assertEquals($expectedPackages, $dependency->getSampleDataPackages()); } /** * Data provider for testPackagesFromComposerSuggest * * @return array */ public static function dataPackagesFromComposerSuggest(): array { return [ [ 'moduleDirectories' => [ 'app/code/LocalModule', 'app/code/LocalModuleWithoutComposerJson', 'vendor/company/module', 'vendor/company2/module/src' ], 'composerJsonGenerator' => function (DependencyTest $test) { return [ [ 'app/code/LocalModule', DriverPool::FILE, $test->stubComposerJsonReader( [ 'name' => 'local/module', 'suggest' => [ 'local/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '0.1.0' ] ] ) ], [ 'app/code/LocalModuleWithoutComposerJson', DriverPool::FILE, $test->stubFileNotFoundReader() ], [ 'vendor/company/module', DriverPool::FILE, $test->stubComposerJsonReader( [ 'name' => 'company/module', 'suggest' => [ 'company/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.0.0-beta' ] ] ) ], [ 'vendor/company2/module/src/..', DriverPool::FILE, $test->stubComposerJsonReader( [ 'name' => 'company2/module', 'suggest' => [ 'company2/module-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . '1.10' ] ] ) ], [ 'vendor/company2/module/src', DriverPool::FILE, $test->stubFileNotFoundReader() ], [ 'vendor/company/module/..', DriverPool::FILE, $test->stubFileNotFoundReader() ], [ 'app/code/LocalModuleWithoutComposerJson/..', DriverPool::FILE, $test->stubFileNotFoundReader() ], [ 'app/code/LocalModule/..', DriverPool::FILE, $test->stubFileNotFoundReader() ], ]; }, 'suggestions' => [ 'magento/foo-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . ' 100.0.0', 'thirdparty/bar-sample-data' => Dependency::SAMPLE_DATA_SUGGEST . ' 1.2.3', 'thirdparty/something-else' => 'Just a suggested package', ], 'expectedPackages' => [ 'magento/foo-sample-data' => '100.0.0', 'thirdparty/bar-sample-data' => '1.2.3', 'local/module-sample-data' => '0.1.0', 'company/module-sample-data' => '1.0.0-beta', 'company2/module-sample-data' => '1.10', ] ] ]; } /** * @param array $composerJsonContent * @return ReadInterface|MockObject */ public function stubComposerJsonReader(array $composerJsonContent): MockObject { $stub = $this->getMockBuilder(ReadInterface::class) ->getMockForAbstractClass(); $stub->method('isExist') ->with('composer.json') ->willReturn(true); $stub->method('isReadable') ->with('composer.json') ->willReturn(true); $stub->method('readFile') ->with('composer.json') ->willReturn(json_encode($composerJsonContent)); return $stub; } /** * @return ReadInterface|MockObject */ public function stubFileNotFoundReader(): MockObject { $stub = $this->getMockBuilder(ReadInterface::class) ->getMockForAbstractClass(); $stub->method('isExist') ->with('composer.json') ->willReturn(false); $stub->method('readFile') ->with('composer.json') ->willThrowException(new FileSystemException(new Phrase('File not found'))); return $stub; } }