123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\SampleData\Test\Unit\Console\Command;
- use Magento\Framework\App\Filesystem\DirectoryList;
- use Magento\SampleData\Console\Command\SampleDataDeployCommand;
- use Magento\Setup\Model\PackagesAuth;
- use Symfony\Component\Console\Tester\CommandTester;
- class SampleDataDeployCommandTest extends AbstractSampleDataCommandTest
- {
- /**
- * @param bool $authExist True to test with existing auth.json, false without
- */
- protected function setupMocksForAuthFile($authExist)
- {
- $this->directoryWriteMock->expects($this->once())
- ->method('isExist')
- ->with(PackagesAuth::PATH_TO_AUTH_FILE)
- ->willReturn($authExist);
- $this->directoryWriteMock->expects($authExist ? $this->never() : $this->once())->method('writeFile')->with(
- PackagesAuth::PATH_TO_AUTH_FILE,
- '{}'
- );
- $this->filesystemMock->expects($this->once())
- ->method('getDirectoryWrite')
- ->with(DirectoryList::COMPOSER_HOME)
- ->willReturn($this->directoryWriteMock);
- }
- /**
- * @param array $sampleDataPackages
- * @param int $appRunResult - int 0 if everything went fine, or an error code
- * @param string $expectedMsg
- * @param bool $authExist
- * @return void
- *
- * @dataProvider processDataProvider
- */
- public function testExecute(array $sampleDataPackages, $appRunResult, $expectedMsg, $authExist)
- {
- $this->setupMocks($sampleDataPackages, '/path/to/composer.json', $appRunResult);
- $this->setupMocksForAuthFile($authExist);
- $commandTester = $this->createCommandTester();
- $commandTester->execute([]);
- $this->assertEquals($expectedMsg, $commandTester->getDisplay());
- }
- /**
- * @param array $sampleDataPackages
- * @param int $appRunResult - int 0 if everything went fine, or an error code
- * @param string $expectedMsg
- * @param bool $authExist
- * @return void
- *
- * @dataProvider processDataProvider
- */
- public function testExecuteWithNoUpdate(array $sampleDataPackages, $appRunResult, $expectedMsg, $authExist)
- {
- $this->setupMocks(
- $sampleDataPackages,
- '/path/to/composer.json',
- $appRunResult,
- ['--no-update' => 1]
- );
- $this->setupMocksForAuthFile($authExist);
- $commandInput = ['--no-update' => 1];
- $commandTester = $this->createCommandTester();
- $commandTester->execute($commandInput);
- $this->assertEquals($expectedMsg, $commandTester->getDisplay());
- }
- /**
- * @return array
- */
- public function processDataProvider()
- {
- return [
- 'No sample data found' => [
- 'sampleDataPackages' => [],
- 'appRunResult' => 1,
- 'expectedMsg' => 'There is no sample data for current set of modules.' . PHP_EOL,
- 'authExist' => true,
- ],
- 'No auth.json found' => [
- 'sampleDataPackages' => [
- 'magento/module-cms-sample-data' => '1.0.0-beta',
- ],
- 'appRunResult' => 1,
- 'expectedMsg' => 'There is an error during sample data deployment. Composer file will be reverted.'
- . PHP_EOL,
- 'authExist' => false,
- ],
- 'Successful sample data installation' => [
- 'sampleDataPackages' => [
- 'magento/module-cms-sample-data' => '1.0.0-beta',
- ],
- 'appRunResult' => 0,
- 'expectedMsg' => '',
- 'authExist' => true,
- ],
- ];
- }
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage Error in writing Auth file path/to/auth.json. Please check permissions for writing.
- * @return void
- */
- public function testExecuteWithException()
- {
- $this->directoryReadMock->expects($this->once())
- ->method('readFile')
- ->with('composer.json')
- ->willReturn('{"version": "0.0.1"}');
- $this->filesystemMock->expects($this->once())
- ->method('getDirectoryRead')
- ->with(DirectoryList::ROOT)
- ->willReturn($this->directoryReadMock);
-
- $this->directoryWriteMock->expects($this->once())
- ->method('isExist')
- ->with(PackagesAuth::PATH_TO_AUTH_FILE)
- ->willReturn(false);
- $this->directoryWriteMock->expects($this->once())
- ->method('writeFile')
- ->with(PackagesAuth::PATH_TO_AUTH_FILE, '{}')
- ->willThrowException(new \Exception('Something went wrong...'));
- $this->directoryWriteMock->expects($this->once())
- ->method('getAbsolutePath')
- ->with(PackagesAuth::PATH_TO_AUTH_FILE)
- ->willReturn('path/to/auth.json');
- $this->filesystemMock->expects($this->once())
- ->method('getDirectoryWrite')
- ->with(DirectoryList::COMPOSER_HOME)
- ->willReturn($this->directoryWriteMock);
- $this->createCommandTester()->execute([]);
- }
- /**
- * @return CommandTester
- */
- private function createCommandTester(): CommandTester
- {
- $commandTester = new CommandTester(
- new SampleDataDeployCommand(
- $this->filesystemMock,
- $this->sampleDataDependencyMock,
- $this->arrayInputFactoryMock,
- $this->applicationFactoryMock
- )
- );
- return $commandTester;
- }
- /**
- * @param $sampleDataPackages
- * @param $pathToComposerJson
- * @return array
- */
- protected function expectedComposerArguments(
- array $sampleDataPackages,
- string $pathToComposerJson
- ) : array {
- return [
- 'command' => 'require',
- '--working-dir' => $pathToComposerJson,
- '--no-progress' => 1,
- 'packages' => $this->packageVersionStrings($sampleDataPackages),
- ];
- }
- /**
- * @param array $sampleDataPackages
- * @return array
- */
- private function packageVersionStrings(array $sampleDataPackages): array
- {
- array_walk($sampleDataPackages, function (&$v, $k) {
- $v = "$k:$v";
- });
- return array_values($sampleDataPackages);
- }
- }
|