123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- 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\Phrase;
- use Magento\SampleData\Model\Dependency;
- use Magento\Framework\Filesystem\DriverPool;
- /**
- * Class DependencyTest
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class DependencyTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @dataProvider dataPackagesFromComposerSuggest
- * @param string[] $moduleDirectories
- * @param callable $composerJsonGenerator
- * @param string[] $suggestionsFromLockFile
- * @param string[] $expectedPackages
- */
- public function testPackagesFromComposerSuggest(
- array $moduleDirectories,
- callable $composerJsonGenerator,
- array $suggestionsFromLockFile,
- array $expectedPackages
- ) {
- /** @var ComposerInformation|\PHPUnit_Framework_MockObject_MockObject $composerInformation */
- $composerInformation = $this->getMockBuilder(ComposerInformation::class)
- ->disableOriginalConstructor()
- ->getMock();
- $composerInformation->method('getSuggestedPackages')
- ->willReturn($suggestionsFromLockFile);
- /** @var Filesystem|\PHPUnit_Framework_MockObject_MockObject $filesystem */
- $filesystem = $this->getMockBuilder(Filesystem::class)->disableOriginalConstructor()->getMock();
- /** @var PackageFactory|\PHPUnit_Framework_MockObject_MockObject $packageFactory */
- $packageFactory = $this->getMockBuilder(PackageFactory::class)
- ->disableOriginalConstructor()
- ->setMethods(['create'])
- ->getMock();
- $packageFactory->method('create')
- ->willReturnCallback(function ($args) {
- return new Package($args['json']);
- });
- /** @var ComponentRegistrarInterface|\PHPUnit_Framework_MockObject_MockObject $componentRegistrar */
- $componentRegistrar = $this->getMockBuilder(ComponentRegistrarInterface::class)
- ->getMockForAbstractClass();
- $componentRegistrar->method('getPaths')
- ->with(ComponentRegistrar::MODULE)
- ->willReturn(
- $moduleDirectories
- );
- $directoryReadFactory = $this->getMockBuilder(Filesystem\Directory\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());
- }
- /**
- * @return array
- */
- public static function dataPackagesFromComposerSuggest()
- {
- 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 \PHPUnit_Framework_MockObject_MockObject
- */
- public function stubComposerJsonReader(array $composerJsonContent)
- {
- $stub = $this->getMockBuilder(Filesystem\Directory\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 \PHPUnit_Framework_MockObject_MockObject
- */
- public function stubFileNotFoundReader()
- {
- $stub = $this->getMockBuilder(Filesystem\Directory\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;
- }
- }
|