123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Deploy\Console\Command\App;
- use Magento\Config\Model\Config\Export\ExcludeList;
- use Magento\Config\Model\Config\TypePool;
- use Magento\Deploy\Model\DeploymentConfig\Hash;
- use Magento\Framework\App\DeploymentConfig;
- use Magento\Framework\App\Filesystem\DirectoryList;
- use Magento\Framework\Config\File\ConfigFilePool;
- use Magento\Framework\Filesystem;
- use Magento\Framework\ObjectManagerInterface;
- use Magento\TestFramework\Helper\Bootstrap;
- use Symfony\Component\Console\Input\InputInterface;
- use Symfony\Component\Console\Output\OutputInterface;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class ApplicationDumpCommandTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var ObjectManagerInterface
- */
- private $objectManager;
- /**
- * @var DeploymentConfig\FileReader
- */
- private $reader;
- /**
- * @var ConfigFilePool
- */
- private $configFilePool;
- /**
- * @var Filesystem
- */
- private $filesystem;
- /**
- * @var DeploymentConfig\Writer
- */
- private $writer;
- /**
- * @var array
- */
- private $envConfig;
- /**
- * @var array
- */
- private $config;
- /**
- * @var Hash
- */
- private $hash;
- /**
- * @inheritdoc
- */
- public function setUp()
- {
- $this->objectManager = Bootstrap::getObjectManager();
- $this->reader = $this->objectManager->get(DeploymentConfig\FileReader::class);
- $this->filesystem = $this->objectManager->get(Filesystem::class);
- $this->configFilePool = $this->objectManager->get(ConfigFilePool::class);
- $this->reader = $this->objectManager->get(DeploymentConfig\Reader::class);
- $this->writer = $this->objectManager->get(DeploymentConfig\Writer::class);
- $this->configFilePool = $this->objectManager->get(ConfigFilePool::class);
- $this->hash = $this->objectManager->get(Hash::class);
- // Snapshot of configuration.
- $this->config = $this->loadConfig();
- $this->envConfig = $this->loadEnvConfig();
- $this->writer->saveConfig(
- [
- ConfigFilePool::APP_CONFIG => [
- 'system' => [
- 'default' => [
- 'web' => [
- 'test' => [
- 'test_value_3' => 'value from the file'
- ]
- ]
- ]
- ]
- ]
- ],
- true
- );
- }
- /**
- * @return array
- */
- private function loadConfig()
- {
- return $this->reader->load(ConfigFilePool::APP_CONFIG);
- }
- /**
- * @return array
- */
- private function loadEnvConfig()
- {
- return $this->reader->load(ConfigFilePool::APP_ENV);
- }
- /**
- * @return string
- */
- private function loadRawConfig()
- {
- return $this->filesystem->getDirectoryRead(DirectoryList::CONFIG)
- ->readFile($this->configFilePool->getPath(ConfigFilePool::APP_CONFIG));
- }
- /**
- * @magentoDbIsolation enabled
- * @magentoDataFixture Magento/Deploy/_files/config_data.php
- */
- public function testExecute()
- {
- $this->objectManager->configure([
- ExcludeList::class => [
- 'arguments' => [
- 'configs' => [
- 'web/test/test_value_1' => '',
- 'web/test/test_value_2' => '0',
- 'web/test/test_sensitive' => '1',
- ],
- ],
- ],
- TypePool::class => [
- 'arguments' => [
- 'sensitive' => [
- 'web/test/test_sensitive1' => '',
- 'web/test/test_sensitive2' => '0',
- 'web/test/test_sensitive3' => '1',
- 'web/test/test_sensitive_environment4' => '1',
- 'web/test/test_sensitive_environment5' => '1',
- 'web/test/test_sensitive_environment6' => '0',
- ],
- 'environment' => [
- 'web/test/test_sensitive_environment4' => '1',
- 'web/test/test_sensitive_environment5' => '0',
- 'web/test/test_sensitive_environment6' => '1',
- 'web/test/test_environment7' => '',
- 'web/test/test_environment8' => '0',
- 'web/test/test_environment9' => '1',
- ],
- ]
- ]
- ]);
- $comment = implode(PHP_EOL, [
- 'Shared configuration was written to config.php and system-specific configuration to env.php.',
- 'Shared configuration file (config.php) doesn\'t contain sensitive data for security reasons.',
- 'Sensitive data can be stored in the following environment variables:',
- 'CONFIG__DEFAULT__WEB__TEST__TEST_SENSITIVE for web/test/test_sensitive',
- 'CONFIG__DEFAULT__WEB__TEST__TEST_SENSITIVE3 for web/test/test_sensitive3',
- 'CONFIG__DEFAULT__WEB__TEST__TEST_SENSITIVE_ENVIRONMENT4 for web/test/test_sensitive_environment4',
- 'CONFIG__DEFAULT__WEB__TEST__TEST_SENSITIVE_ENVIRONMENT5 for web/test/test_sensitive_environment5'
- ]);
- $outputMock = $this->createMock(OutputInterface::class);
- $outputMock->expects($this->at(0))
- ->method('writeln')
- ->with(['system' => $comment]);
- $outputMock->expects($this->at(1))
- ->method('writeln')
- ->with($this->matchesRegularExpression('/<info>Done. Config types dumped: [a-z0-9,\s]+<\/info>/'));
- /** @var ApplicationDumpCommand command */
- $command = $this->objectManager->create(ApplicationDumpCommand::class);
- $command->run($this->createMock(InputInterface::class), $outputMock);
- $config = $this->loadConfig();
- $this->validateSystemSection($config);
- $this->validateThemesSection($config);
- $configEnv = $this->loadEnvConfig();
- $this->validateSystemEnvSection($configEnv);
- $this->assertNotEmpty($this->hash->get());
- $this->assertContains('For the section: system', $this->loadRawConfig());
- }
- /**
- * Validates 'system' section in configuration data.
- *
- * @param array $config The configuration array
- * @return void
- */
- private function validateSystemSection(array $config)
- {
- $this->assertArrayHasKey('test_value_1', $config['system']['default']['web']['test']);
- $this->assertArrayHasKey('test_value_2', $config['system']['default']['web']['test']);
- $this->assertArrayHasKey('test_sensitive1', $config['system']['default']['web']['test']);
- $this->assertArrayHasKey('test_sensitive2', $config['system']['default']['web']['test']);
- $this->assertArrayHasKey('test_environment7', $config['system']['default']['web']['test']);
- $this->assertArrayHasKey('test_environment8', $config['system']['default']['web']['test']);
- $this->assertArrayNotHasKey('test_sensitive', $config['system']['default']['web']['test']);
- $this->assertArrayNotHasKey('test_sensitive3', $config['system']['default']['web']['test']);
- $this->assertArrayNotHasKey('test_sensitive_environment4', $config['system']['default']['web']['test']);
- $this->assertArrayNotHasKey('test_sensitive_environment5', $config['system']['default']['web']['test']);
- $this->assertArrayNotHasKey('test_sensitive_environment6', $config['system']['default']['web']['test']);
- $this->assertArrayNotHasKey('test_environment9', $config['system']['default']['web']['test']);
- /** @see Magento/Deploy/_files/config_data.php */
- $this->assertEquals(
- 'frontend/Magento/blank',
- $config['system']['default']['design']['theme']['theme_id']
- );
- $this->assertEquals(
- 'frontend/Magento/luma',
- $config['system']['stores']['default']['design']['theme']['theme_id']
- );
- $this->assertEquals(
- 'frontend/Magento/luma',
- $config['system']['websites']['base']['design']['theme']['theme_id']
- );
- $this->assertEquals('value from the file', $config['system']['default']['web']['test']['test_value_3']);
- $this->assertEquals('GB', $config['system']['default']['general']['country']['default']);
- $this->assertEquals(
- 'HK,IE,MO,PA,GB',
- $config['system']['default']['general']['country']['optional_zip_countries']
- );
- }
- /**
- * Validates 'system' section in environment configuration data.
- *
- * @param array $config The configuration array
- * @return void
- */
- private function validateSystemEnvSection(array $config)
- {
- $envTestKeys = [
- 'test_sensitive',
- 'test_sensitive3',
- 'test_sensitive_environment4',
- 'test_sensitive_environment5',
- 'test_sensitive_environment6',
- 'test_environment9'
- ];
- $this->assertEmpty(
- array_diff($envTestKeys, array_keys($config['system']['default']['web']['test']))
- );
- }
- /**
- * Validates 'themes' section in configuration data.
- *
- * @param array $config The configuration array
- * @return void
- */
- private function validateThemesSection(array $config)
- {
- $this->assertEquals(
- [
- 'parent_id' => null,
- 'theme_path' => 'Magento/backend',
- 'theme_title' => 'Magento 2 backend',
- 'is_featured' => '0',
- 'area' => 'adminhtml',
- 'type' => '0',
- 'code' => 'Magento/backend',
- ],
- $config['themes']['adminhtml/Magento/backend']
- );
- $this->assertEquals(
- [
- 'parent_id' => null,
- 'theme_path' => 'Magento/blank',
- 'theme_title' => 'Magento Blank',
- 'is_featured' => '0',
- 'area' => 'frontend',
- 'type' => '0',
- 'code' => 'Magento/blank',
- ],
- $config['themes']['frontend/Magento/blank']
- );
- $this->assertEquals(
- [
- 'parent_id' => 'Magento/blank',
- 'theme_path' => 'Magento/luma',
- 'theme_title' => 'Magento Luma',
- 'is_featured' => '0',
- 'area' => 'frontend',
- 'type' => '0',
- 'code' => 'Magento/luma',
- ],
- $config['themes']['frontend/Magento/luma']
- );
- }
- /**
- * @inheritdoc
- */
- public function tearDown()
- {
- $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"
- );
- /** @var DeploymentConfig\Writer $writer */
- $writer = $this->objectManager->get(DeploymentConfig\Writer::class);
- $writer->saveConfig([ConfigFilePool::APP_CONFIG => $this->config]);
- /** @var DeploymentConfig\Writer $writer */
- $writer = $this->objectManager->get(DeploymentConfig\Writer::class);
- $writer->saveConfig([ConfigFilePool::APP_ENV => $this->envConfig]);
- /** @var DeploymentConfig $deploymentConfig */
- $deploymentConfig = $this->objectManager->get(DeploymentConfig::class);
- $deploymentConfig->resetData();
- }
- }
|