369 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			369 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
 | 
						|
namespace Magento\Config\Console\Command;
 | 
						|
 | 
						|
use Magento\Config\Model\Config\Structure;
 | 
						|
use Magento\Framework\App\DeploymentConfig\FileReader;
 | 
						|
use Magento\Framework\App\DeploymentConfig\Writer;
 | 
						|
use Magento\Framework\App\Filesystem\DirectoryList;
 | 
						|
use Magento\Framework\Config\File\ConfigFilePool;
 | 
						|
use Magento\Framework\Console\Cli;
 | 
						|
use Magento\Framework\Filesystem;
 | 
						|
use Magento\Store\Model\ScopeInterface;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
use Symfony\Component\Console\Tester\CommandTester;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test for \Magento\Config\Console\Command\ConfigShowCommand.
 | 
						|
 */
 | 
						|
class ConfigShowCommandTest extends TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var CommandTester
 | 
						|
     */
 | 
						|
    private $commandTester;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var Filesystem
 | 
						|
     */
 | 
						|
    private $filesystem;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var ConfigFilePool
 | 
						|
     */
 | 
						|
    private $configFilePool;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var FileReader
 | 
						|
     */
 | 
						|
    private $reader;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var Writer
 | 
						|
     */
 | 
						|
    private $writer;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    private $env;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    private $config;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    private $envConfig;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var Structure
 | 
						|
     */
 | 
						|
    private $structure;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->configFilePool = $objectManager->get(ConfigFilePool::class);
 | 
						|
        $this->filesystem = $objectManager->get(Filesystem::class);
 | 
						|
        $this->reader = $objectManager->get(FileReader::class);
 | 
						|
        $this->writer = $objectManager->get(Writer::class);
 | 
						|
        $this->structure = $objectManager->get(Structure::class);
 | 
						|
 | 
						|
        $this->config = $this->loadConfig();
 | 
						|
        $this->envConfig = $this->loadEnvConfig();
 | 
						|
        $this->env = $_ENV;
 | 
						|
 | 
						|
        $config = include __DIR__ . '/../../_files/config.php';
 | 
						|
        $this->writer->saveConfig([ConfigFilePool::APP_CONFIG => $config]);
 | 
						|
 | 
						|
        $config = include __DIR__ . '/../../_files/env.php';
 | 
						|
        $this->writer->saveConfig([ConfigFilePool::APP_ENV => $config]);
 | 
						|
 | 
						|
        $_ENV['CONFIG__DEFAULT__WEB__TEST2__TEST_VALUE_4'] = 'value4.env.default.test';
 | 
						|
        $_ENV['CONFIG__WEBSITES__BASE__WEB__TEST2__TEST_VALUE_4'] = 'value4.env.website_base.test';
 | 
						|
        $_ENV['CONFIG__STORES__DEFAULT__WEB__TEST2__TEST_VALUE_4'] = 'value4.env.store_default.test';
 | 
						|
 | 
						|
        $command = $objectManager->create(ConfigShowCommand::class);
 | 
						|
        $this->commandTester = new CommandTester($command);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Test execute config show command
 | 
						|
     *
 | 
						|
     * @param string $scope
 | 
						|
     * @param string $scopeCode
 | 
						|
     * @param int $resultCode
 | 
						|
     * @param array $configs
 | 
						|
     * @return void
 | 
						|
     *
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     * @magentoDataFixture Magento/Config/_files/config_data.php
 | 
						|
     * @dataProvider executeDataProvider
 | 
						|
     */
 | 
						|
    public function testExecute($scope, $scopeCode, $resultCode, array $configs): void
 | 
						|
    {
 | 
						|
        $this->setConfigPaths();
 | 
						|
 | 
						|
        foreach ($configs as $inputPath => $configValue) {
 | 
						|
            $arguments = [
 | 
						|
                ConfigShowCommand::INPUT_ARGUMENT_PATH => $inputPath
 | 
						|
            ];
 | 
						|
 | 
						|
            if ($scope !== null) {
 | 
						|
                $arguments['--' . ConfigShowCommand::INPUT_OPTION_SCOPE] = $scope;
 | 
						|
            }
 | 
						|
            if ($scopeCode !== null) {
 | 
						|
                $arguments['--' . ConfigShowCommand::INPUT_OPTION_SCOPE_CODE] = $scopeCode;
 | 
						|
            }
 | 
						|
 | 
						|
            $this->commandTester->execute($arguments);
 | 
						|
 | 
						|
            $this->assertEquals(
 | 
						|
                $resultCode,
 | 
						|
                $this->commandTester->getStatusCode()
 | 
						|
            );
 | 
						|
 | 
						|
            $commandOutput = $this->commandTester->getDisplay();
 | 
						|
            foreach ($configValue as $value) {
 | 
						|
                $this->assertStringContainsString($value, $commandOutput);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set config paths to structure
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    private function setConfigPaths(): void
 | 
						|
    {
 | 
						|
        $reflection = new \ReflectionClass(Structure::class);
 | 
						|
        $mappedPaths = $reflection->getProperty('mappedPaths');
 | 
						|
        $mappedPaths->setAccessible(true);
 | 
						|
        $mappedPaths->setValue($this->structure, $this->getConfigPaths());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns config paths
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function getConfigPaths(): array
 | 
						|
    {
 | 
						|
        $configs = [
 | 
						|
            'web/test/test_value_1',
 | 
						|
            'web/test/test_value_2',
 | 
						|
            'web/test2/test_value_3',
 | 
						|
            'web/test2/test_value_4',
 | 
						|
            'carriers/fedex/account',
 | 
						|
            'paypal/fetch_reports/ftp_password',
 | 
						|
            'web/test',
 | 
						|
            'web/test2',
 | 
						|
            'web',
 | 
						|
        ];
 | 
						|
 | 
						|
        return array_flip($configs);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
 | 
						|
     */
 | 
						|
    public function executeDataProvider()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            [
 | 
						|
                null,
 | 
						|
                null,
 | 
						|
                Cli::RETURN_SUCCESS,
 | 
						|
                [
 | 
						|
                    'web/test/test_value_1' => ['value1.db.default.test'],
 | 
						|
                    'web/test/test_value_2' => ['value2.local_config.default.test'],
 | 
						|
                    'web/test2/test_value_3' => ['value3.config.default.test'],
 | 
						|
                    'web/test2/test_value_4' => ['value4.env.default.test'],
 | 
						|
                    'carriers/fedex/account' => ['******'],
 | 
						|
                    'paypal/fetch_reports/ftp_password' => ['******'],
 | 
						|
                    'web/test' => [
 | 
						|
                        'web/test/test_value_1 - value1.db.default.test',
 | 
						|
                        'web/test/test_value_2 - value2.local_config.default.test',
 | 
						|
                    ],
 | 
						|
                    'web/test2' => [
 | 
						|
                        'web/test2/test_value_3 - value3.config.default.test',
 | 
						|
                        'web/test2/test_value_4 - value4.env.default.test',
 | 
						|
                    ],
 | 
						|
                    'web' => [
 | 
						|
                        'web/test/test_value_1 - value1.db.default.test',
 | 
						|
                        'web/test/test_value_2 - value2.local_config.default.test',
 | 
						|
                        'web/test2/test_value_3 - value3.config.default.test',
 | 
						|
                        'web/test2/test_value_4 - value4.env.default.test',
 | 
						|
                    ],
 | 
						|
                    '' => [
 | 
						|
                        'web/test/test_value_1 - value1.db.default.test',
 | 
						|
                        'web/test/test_value_2 - value2.local_config.default.test',
 | 
						|
                        'web/test2/test_value_3 - value3.config.default.test',
 | 
						|
                        'web/test2/test_value_4 - value4.env.default.test',
 | 
						|
                        'carriers/fedex/account - ******',
 | 
						|
                        'paypal/fetch_reports/ftp_password - ******',
 | 
						|
                    ],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                ScopeInterface::SCOPE_WEBSITES,
 | 
						|
                'base',
 | 
						|
                Cli::RETURN_SUCCESS,
 | 
						|
                [
 | 
						|
                    'web/test/test_value_1' => ['value1.db.website_base.test'],
 | 
						|
                    'web/test/test_value_2' => ['value2.local_config.website_base.test'],
 | 
						|
                    'web/test2/test_value_3' => ['value3.config.website_base.test'],
 | 
						|
                    'web/test2/test_value_4' => ['value4.env.website_base.test'],
 | 
						|
                    'web/test' => [
 | 
						|
                        'web/test/test_value_1 - value1.db.website_base.test',
 | 
						|
                        'web/test/test_value_2 - value2.local_config.website_base.test',
 | 
						|
                    ],
 | 
						|
                    'web/test2' => [
 | 
						|
                        'web/test2/test_value_3 - value3.config.website_base.test',
 | 
						|
                        'web/test2/test_value_4 - value4.env.website_base.test',
 | 
						|
                    ],
 | 
						|
                    'web' => [
 | 
						|
                        'web/test/test_value_1 - value1.db.website_base.test',
 | 
						|
                        'web/test/test_value_2 - value2.local_config.website_base.test',
 | 
						|
                        'web/test2/test_value_3 - value3.config.website_base.test',
 | 
						|
                        'web/test2/test_value_4 - value4.env.website_base.test',
 | 
						|
                    ],
 | 
						|
                    '' => [
 | 
						|
                        'web/test/test_value_1 - value1.db.website_base.test',
 | 
						|
                        'web/test/test_value_2 - value2.local_config.website_base.test',
 | 
						|
                        'web/test2/test_value_3 - value3.config.website_base.test',
 | 
						|
                        'web/test2/test_value_4 - value4.env.website_base.test',
 | 
						|
                    ],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                ScopeInterface::SCOPE_STORES,
 | 
						|
                'default',
 | 
						|
                Cli::RETURN_SUCCESS,
 | 
						|
                [
 | 
						|
                    'web/test/test_value_1' => ['value1.db.store_default.test'],
 | 
						|
                    'web/test/test_value_2' => ['value2.local_config.store_default.test'],
 | 
						|
                    'web/test2/test_value_3' => ['value3.config.store_default.test'],
 | 
						|
                    'web/test2/test_value_4' => ['value4.env.store_default.test'],
 | 
						|
                    'web/test' => [
 | 
						|
                        'web/test/test_value_1 - value1.db.store_default.test',
 | 
						|
                        'web/test/test_value_2 - value2.local_config.store_default.test',
 | 
						|
                    ],
 | 
						|
                    'web/test2' => [
 | 
						|
                        'web/test2/test_value_3 - value3.config.store_default.test',
 | 
						|
                        'web/test2/test_value_4 - value4.env.store_default.test',
 | 
						|
                    ],
 | 
						|
                    'web' => [
 | 
						|
                        'web/test/test_value_1 - value1.db.store_default.test',
 | 
						|
                        'web/test/test_value_2 - value2.local_config.store_default.test',
 | 
						|
                        'web/test2/test_value_3 - value3.config.store_default.test',
 | 
						|
                        'web/test2/test_value_4 - value4.env.store_default.test',
 | 
						|
                    ],
 | 
						|
                    '' => [
 | 
						|
                        'web/test/test_value_1 - value1.db.store_default.test',
 | 
						|
                        'web/test/test_value_2 - value2.local_config.store_default.test',
 | 
						|
                        'web/test2/test_value_3 - value3.config.store_default.test',
 | 
						|
                        'web/test2/test_value_4 - value4.env.store_default.test',
 | 
						|
                    ],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                null,
 | 
						|
                null,
 | 
						|
                Cli::RETURN_FAILURE,
 | 
						|
                [
 | 
						|
                    'web/test/test_wrong_value' => [
 | 
						|
                        'The "web/test/test_wrong_value" path doesn\'t exist. Verify and try again.'
 | 
						|
                    ],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'default',
 | 
						|
                null,
 | 
						|
                Cli::RETURN_FAILURE,
 | 
						|
                [
 | 
						|
                    'web/test/test_wrong_value' => [
 | 
						|
                        'The "web/test/test_wrong_value" path doesn\'t exist. Verify and try again.'
 | 
						|
                    ],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'default',
 | 
						|
                'scope_code',
 | 
						|
                Cli::RETURN_FAILURE,
 | 
						|
                [
 | 
						|
                    'web/test/test_wrong_value' => [
 | 
						|
                        'The "default" scope can\'t include a scope code. Try again without entering a scope code.'
 | 
						|
                    ],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'some_scope',
 | 
						|
                'scope_code',
 | 
						|
                Cli::RETURN_FAILURE,
 | 
						|
                [
 | 
						|
                    'web/test/test_wrong_value' => [
 | 
						|
                        'The "some_scope" value doesn\'t exist. Enter another value and try again.'
 | 
						|
                    ],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'websites',
 | 
						|
                'scope_code',
 | 
						|
                Cli::RETURN_FAILURE,
 | 
						|
                [
 | 
						|
                    'web/test/test_wrong_value' => [
 | 
						|
                        'The "scope_code" value doesn\'t exist. Enter another value and try again.'
 | 
						|
                    ],
 | 
						|
                ]
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function loadConfig()
 | 
						|
    {
 | 
						|
        return $this->reader->load(ConfigFilePool::APP_CONFIG);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function loadEnvConfig()
 | 
						|
    {
 | 
						|
        return $this->reader->load(ConfigFilePool::APP_ENV);
 | 
						|
    }
 | 
						|
 | 
						|
    protected function tearDown(): void
 | 
						|
    {
 | 
						|
        $_ENV = $this->env;
 | 
						|
 | 
						|
        $this->filesystem->getDirectoryWrite(DirectoryList::CONFIG)->writeFile(
 | 
						|
            $this->configFilePool->getPath(ConfigFilePool::APP_CONFIG),
 | 
						|
            "<?php\n return array();\n"
 | 
						|
        );
 | 
						|
        $this->filesystem->getDirectoryWrite(DirectoryList::CONFIG)->writeFile(
 | 
						|
            $this->configFilePool->getPath(ConfigFilePool::APP_ENV),
 | 
						|
            "<?php\n return array();\n"
 | 
						|
        );
 | 
						|
 | 
						|
        $this->writer->saveConfig([ConfigFilePool::APP_CONFIG => $this->config]);
 | 
						|
        $this->writer->saveConfig([ConfigFilePool::APP_ENV => $this->envConfig]);
 | 
						|
    }
 | 
						|
}
 |