![]() 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/cartforge.co/setup/src/Magento/Setup/Test/Unit/Console/Command/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Backend\Setup\ConfigOptionsList as BackendConfigOptionsList; use Magento\Deploy\Console\Command\App\ConfigImportCommand; use Magento\Framework\Config\ConfigOptionsListConstants as SetupConfigOptionsList; use Magento\Framework\Console\Cli; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Console\Command\AdminUserCreateCommand; use Magento\Setup\Console\Command\InstallCommand; use Magento\Setup\Console\Command\InstallStoreConfigurationCommand; use Magento\Setup\Model\AdminAccount; use Magento\Setup\Model\ConfigModel; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use Magento\Setup\Model\SearchConfigOptionsList; use Magento\Setup\Model\StoreConfigurationDataMapper; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Application; use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Tester\CommandTester; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InstallCommandTest extends TestCase { /** * @var array */ private $input; /** * @var MockObject|InstallCommand */ private $command; /** * @var MockObject|InstallerFactory */ private $installerFactory; /** * @var MockObject|Installer */ private $installer; /** * @var Application|MockObject */ private $applicationMock; /** * @var HelperSet|MockObject */ private $helperSetMock; /** * @var InputDefinition|MockObject */ private $definitionMock; /** * @var ConfigImportCommand|MockObject */ private $configImportMock; /** * @var AdminUserCreateCommand|MockObject */ private $adminUserMock; /** * @var QuestionHelper */ private $questionHelperMock; protected function setUp(): void { $this->input = [ '--' . SetupConfigOptionsList::INPUT_KEY_DB_HOST => 'localhost', '--' . SetupConfigOptionsList::INPUT_KEY_DB_NAME => 'magento', '--' . SetupConfigOptionsList::INPUT_KEY_DB_USER => 'root', '--' . BackendConfigOptionsList::INPUT_KEY_BACKEND_FRONTNAME => 'admin', '--' . StoreConfigurationDataMapper::KEY_BASE_URL => 'http://127.0.0.1/magento2ce/', '--' . StoreConfigurationDataMapper::KEY_LANGUAGE => 'en_US', '--' . StoreConfigurationDataMapper::KEY_TIMEZONE => 'America/Chicago', '--' . StoreConfigurationDataMapper::KEY_CURRENCY => 'USD', ]; $configModel = $this->createMock(ConfigModel::class); $configModel ->expects($this->exactly(2)) ->method('getAvailableOptions') ->willReturn($this->getOptionsListDeployConfig()); $configModel ->expects($this->once()) ->method('validate') ->willReturn([]); $userConfig = $this->createMock(InstallStoreConfigurationCommand::class); $userConfig ->expects($this->atLeastOnce()) ->method('getOptionsList') ->willReturn($this->getOptionsListUserConfig()); $userConfig ->expects($this->once()) ->method('validate') ->willReturn([]); $this->adminUserMock = $this->createMock(AdminUserCreateCommand::class); $this->adminUserMock ->expects($this->atLeastOnce()) ->method('getOptionsList') ->willReturn($this->getOptionsListAdminUser()); $searchConfigOptionsList = new SearchConfigOptionsList(); $this->installerFactory = $this->createMock(InstallerFactory::class); $this->installer = $this->createMock(Installer::class); $this->applicationMock = $this->getMockBuilder(Application::class) ->disableOriginalConstructor() ->getMock(); $this->helperSetMock = $this->getMockBuilder(HelperSet::class) ->disableOriginalConstructor() ->getMock(); $this->definitionMock = $this->getMockBuilder(InputDefinition::class) ->disableOriginalConstructor() ->getMock(); $this->configImportMock = $this->getMockBuilder(ConfigImportCommand::class) ->disableOriginalConstructor() ->getMock(); $this->applicationMock->expects($this->any()) ->method('getHelperSet') ->willReturn($this->helperSetMock); $this->applicationMock->expects($this->any()) ->method('getDefinition') ->willReturn($this->definitionMock); $this->definitionMock->expects($this->any()) ->method('getOptions') ->willReturn([]); $this->definitionMock->expects($this->any()) ->method('getArguments') ->willReturn([]); $this->applicationMock->expects($this->any()) ->method('find') ->with(ConfigImportCommand::COMMAND_NAME) ->willReturn($this->configImportMock); $this->questionHelperMock = $this->getMockBuilder(QuestionHelper::class) ->disableOriginalConstructor() ->getMock(); $this->command = new InstallCommand( $this->installerFactory, $configModel, $userConfig, $this->adminUserMock, $searchConfigOptionsList ); $this->command->setApplication( $this->applicationMock ); } public function testExecute() { $this->input['--' . AdminAccount::KEY_USER] = 'user'; $this->input['--' . AdminAccount::KEY_PASSWORD] = '123123q'; $this->input['--' . AdminAccount::KEY_EMAIL] = '[email protected]'; $this->input['--' . AdminAccount::KEY_FIRST_NAME] = 'John'; $this->input['--' . AdminAccount::KEY_LAST_NAME] = 'Doe'; $this->adminUserMock ->expects($this->once()) ->method('validate') ->willReturn([]); $this->installerFactory->expects($this->once()) ->method('create') ->willReturn($this->installer); $this->installer->expects($this->once())->method('install'); $this->configImportMock->expects($this->once()) ->method('run') ->willReturn(Cli::RETURN_SUCCESS); $commandTester = new CommandTester($this->command); $commandTester->execute($this->input); } public function testInteractiveExecute(): void { $this->installerFactory ->expects($this->once()) ->method('create') ->willReturn($this->installer); $this->installer ->expects($this->once()) ->method('install'); $this->questionHelperMock->method('ask'); $this->helperSetMock ->method('get') ->with('question') ->willReturn($this->questionHelperMock); $this->command->setHelperSet($this->helperSetMock); $this->configImportMock->expects($this->once()) ->method('run') ->willReturn(Cli::RETURN_SUCCESS); $commandTester = new CommandTester($this->command); $commandTester->execute(['--' . InstallCommand::INPUT_KEY_INTERACTIVE_SETUP => true]); $this->assertEquals(Cli::RETURN_SUCCESS, $commandTester->getStatusCode()); } /** * Get list of options for deployment configuration * * @return array */ private function getOptionsListDeployConfig() { $option1 = $this->createMock(TextConfigOption::class); $option1 ->expects($this->any()) ->method('getName') ->willReturn(SetupConfigOptionsList::INPUT_KEY_DB_HOST); $option2 = $this->createMock(TextConfigOption::class); $option2 ->expects($this->any()) ->method('getName') ->willReturn(SetupConfigOptionsList::INPUT_KEY_DB_NAME); $option3 = $this->createMock(TextConfigOption::class); $option3 ->expects($this->any()) ->method('getName') ->willReturn(SetupConfigOptionsList::INPUT_KEY_DB_USER); $option4 = $this->createMock(TextConfigOption::class); $option4 ->expects($this->any()) ->method('getName') ->willReturn(BackendConfigOptionsList::INPUT_KEY_BACKEND_FRONTNAME); return [$option1, $option2, $option3, $option4]; } /** * Get list of options for user configuration * * @return array */ private function getOptionsListUserConfig() { $option1 = $this->createMock(TextConfigOption::class); $option1 ->expects($this->any()) ->method('getName') ->willReturn(StoreConfigurationDataMapper::KEY_BASE_URL); $option2 = $this->createMock(TextConfigOption::class); $option2 ->expects($this->any()) ->method('getName') ->willReturn(StoreConfigurationDataMapper::KEY_LANGUAGE); $option3 = $this->createMock(TextConfigOption::class); $option3 ->expects($this->any()) ->method('getName') ->willReturn(StoreConfigurationDataMapper::KEY_TIMEZONE); $option4 = $this->createMock(TextConfigOption::class); $option4 ->expects($this->any()) ->method('getName') ->willReturn(StoreConfigurationDataMapper::KEY_CURRENCY); return [$option1, $option2, $option3, $option4]; } /** * Get list of options for admin user * * @return array */ private function getOptionsListAdminUser() { $option1 = $this->createMock(TextConfigOption::class); $option1 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_USER); $option2 = $this->createMock(TextConfigOption::class); $option2 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_PASSWORD); $option3 = $this->createMock(TextConfigOption::class); $option3 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_EMAIL); $option4 = $this->createMock(TextConfigOption::class); $option4 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_FIRST_NAME); $option5 = $this->createMock(TextConfigOption::class); $option5 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_LAST_NAME); return [$option1, $option2, $option3, $option4, $option5]; } /** * Test install command with valid sales_order_increment_prefix value * * @dataProvider validateDataProvider * @param $prefixValue */ public function testValidate($prefixValue) { $this->adminUserMock ->expects($this->never()) ->method('validate'); $this->installerFactory->expects($this->once()) ->method('create') ->willReturn($this->installer); $this->installer->expects($this->once())->method('install'); $this->input['--' . InstallCommand::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX] = $prefixValue; $this->configImportMock->expects($this->once()) ->method('run') ->willReturn(Cli::RETURN_SUCCESS); $commandTester = new CommandTester($this->command); $commandTester->execute($this->input); } /** * Test install command with invalid sales_order_increment_prefix value * * @dataProvider validateWithExceptionDataProvider * @param $prefixValue */ public function testValidateWithException($prefixValue) { $this->expectException('InvalidArgumentException'); $this->adminUserMock ->expects($this->never()) ->method('validate'); $this->installerFactory->expects($this->never()) ->method('create') ->willReturn($this->installer); $this->installer->expects($this->never())->method('install'); $this->input['--' . InstallCommand::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX] = $prefixValue; $commandTester = new CommandTester($this->command); $commandTester->execute($this->input); } /** * @return array */ public function validateDataProvider() { return [ 'without option' => ['', ''], 'normal case' => ['abcde', ''], '20 chars' => ['12345678901234567890', ''], ]; } /** * @return array */ public function validateWithExceptionDataProvider() { return [ ['123456789012345678901', 'InvalidArgumentException'], ['abcdefghijk12345678fdgsdfgsdfgsdfsgsdfg90abcdefgdfddgsdfg', 'InvalidArgumentException'], ]; } }