ConfigShowCommandTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Config\Console\Command;
  7. use Magento\Framework\App\DeploymentConfig\FileReader;
  8. use Magento\Framework\App\DeploymentConfig\Writer;
  9. use Magento\Framework\App\Filesystem\DirectoryList;
  10. use Magento\Framework\Config\File\ConfigFilePool;
  11. use Magento\Framework\Console\Cli;
  12. use Magento\Framework\Filesystem;
  13. use Magento\Framework\ObjectManagerInterface;
  14. use Magento\Store\Model\ScopeInterface;
  15. use Magento\TestFramework\Helper\Bootstrap;
  16. use Symfony\Component\Console\Tester\CommandTester;
  17. class ConfigShowCommandTest extends \PHPUnit\Framework\TestCase
  18. {
  19. /**
  20. * @var ObjectManagerInterface
  21. */
  22. private $objectManager;
  23. /**
  24. * @var CommandTester
  25. */
  26. private $commandTester;
  27. /**
  28. * @var Filesystem
  29. */
  30. private $filesystem;
  31. /**
  32. * @var ConfigFilePool
  33. */
  34. private $configFilePool;
  35. /**
  36. * @var FileReader
  37. */
  38. private $reader;
  39. /**
  40. * @var Writer
  41. */
  42. private $writer;
  43. /**
  44. * @var array
  45. */
  46. private $env;
  47. /**
  48. * @var array
  49. */
  50. private $config;
  51. /**
  52. * @var array
  53. */
  54. private $envConfig;
  55. /**
  56. * @inheritdoc
  57. */
  58. public function setUp()
  59. {
  60. $this->objectManager = Bootstrap::getObjectManager();
  61. $this->configFilePool = $this->objectManager->get(ConfigFilePool::class);
  62. $this->filesystem = $this->objectManager->get(Filesystem::class);
  63. $this->reader = $this->objectManager->get(FileReader::class);
  64. $this->writer = $this->objectManager->get(Writer::class);
  65. $this->config = $this->loadConfig();
  66. $this->envConfig = $this->loadEnvConfig();
  67. $this->env = $_ENV;
  68. $config = include __DIR__ . '/../../_files/config.php';
  69. $this->writer->saveConfig([ConfigFilePool::APP_CONFIG => $config]);
  70. $config = include __DIR__ . '/../../_files/env.php';
  71. $this->writer->saveConfig([ConfigFilePool::APP_ENV => $config]);
  72. $_ENV['CONFIG__DEFAULT__WEB__TEST2__TEST_VALUE_4'] = 'value4.env.default.test';
  73. $_ENV['CONFIG__WEBSITES__BASE__WEB__TEST2__TEST_VALUE_4'] = 'value4.env.website_base.test';
  74. $_ENV['CONFIG__STORES__DEFAULT__WEB__TEST2__TEST_VALUE_4'] = 'value4.env.store_default.test';
  75. $command = $this->objectManager->create(ConfigShowCommand::class);
  76. $this->commandTester = new CommandTester($command);
  77. }
  78. /**
  79. * @param string $scope
  80. * @param string $scopeCode
  81. * @param int $resultCode
  82. * @param array $configs
  83. * @magentoDbIsolation enabled
  84. * @magentoDataFixture Magento/Config/_files/config_data.php
  85. * @dataProvider executeDataProvider
  86. */
  87. public function testExecute($scope, $scopeCode, $resultCode, array $configs)
  88. {
  89. foreach ($configs as $inputPath => $configValue) {
  90. $arguments = [
  91. ConfigShowCommand::INPUT_ARGUMENT_PATH => $inputPath
  92. ];
  93. if ($scope !== null) {
  94. $arguments['--' . ConfigShowCommand::INPUT_OPTION_SCOPE] = $scope;
  95. }
  96. if ($scopeCode !== null) {
  97. $arguments['--' . ConfigShowCommand::INPUT_OPTION_SCOPE_CODE] = $scopeCode;
  98. }
  99. $this->commandTester->execute($arguments);
  100. $this->assertEquals(
  101. $resultCode,
  102. $this->commandTester->getStatusCode()
  103. );
  104. $commandOutput = $this->commandTester->getDisplay();
  105. foreach ($configValue as $value) {
  106. $this->assertContains($value, $commandOutput);
  107. }
  108. }
  109. }
  110. /**
  111. * @return array
  112. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  113. */
  114. public function executeDataProvider()
  115. {
  116. return [
  117. [
  118. null,
  119. null,
  120. Cli::RETURN_SUCCESS,
  121. [
  122. 'web/test/test_value_1' => ['value1.db.default.test'],
  123. 'web/test/test_value_2' => ['value2.local_config.default.test'],
  124. 'web/test2/test_value_3' => ['value3.config.default.test'],
  125. 'web/test2/test_value_4' => ['value4.env.default.test'],
  126. 'carriers/fedex/account' => ['******'],
  127. 'paypal/fetch_reports/ftp_password' => ['******'],
  128. 'web/test' => [
  129. 'web/test/test_value_1 - value1.db.default.test',
  130. 'web/test/test_value_2 - value2.local_config.default.test',
  131. ],
  132. 'web/test2' => [
  133. 'web/test2/test_value_3 - value3.config.default.test',
  134. 'web/test2/test_value_4 - value4.env.default.test',
  135. ],
  136. 'web' => [
  137. 'web/test/test_value_1 - value1.db.default.test',
  138. 'web/test/test_value_2 - value2.local_config.default.test',
  139. 'web/test2/test_value_3 - value3.config.default.test',
  140. 'web/test2/test_value_4 - value4.env.default.test',
  141. ],
  142. '' => [
  143. 'web/test/test_value_1 - value1.db.default.test',
  144. 'web/test/test_value_2 - value2.local_config.default.test',
  145. 'web/test2/test_value_3 - value3.config.default.test',
  146. 'web/test2/test_value_4 - value4.env.default.test',
  147. 'carriers/fedex/account - ******',
  148. 'paypal/fetch_reports/ftp_password - ******',
  149. ],
  150. ]
  151. ],
  152. [
  153. ScopeInterface::SCOPE_WEBSITES,
  154. 'base',
  155. Cli::RETURN_SUCCESS,
  156. [
  157. 'web/test/test_value_1' => ['value1.db.website_base.test'],
  158. 'web/test/test_value_2' => ['value2.local_config.website_base.test'],
  159. 'web/test2/test_value_3' => ['value3.config.website_base.test'],
  160. 'web/test2/test_value_4' => ['value4.env.website_base.test'],
  161. 'web/test' => [
  162. 'web/test/test_value_1 - value1.db.website_base.test',
  163. 'web/test/test_value_2 - value2.local_config.website_base.test',
  164. ],
  165. 'web/test2' => [
  166. 'web/test2/test_value_3 - value3.config.website_base.test',
  167. 'web/test2/test_value_4 - value4.env.website_base.test',
  168. ],
  169. 'web' => [
  170. 'web/test/test_value_1 - value1.db.website_base.test',
  171. 'web/test/test_value_2 - value2.local_config.website_base.test',
  172. 'web/test2/test_value_3 - value3.config.website_base.test',
  173. 'web/test2/test_value_4 - value4.env.website_base.test',
  174. ],
  175. '' => [
  176. 'web/test/test_value_1 - value1.db.website_base.test',
  177. 'web/test/test_value_2 - value2.local_config.website_base.test',
  178. 'web/test2/test_value_3 - value3.config.website_base.test',
  179. 'web/test2/test_value_4 - value4.env.website_base.test',
  180. ],
  181. ]
  182. ],
  183. [
  184. ScopeInterface::SCOPE_STORES,
  185. 'default',
  186. Cli::RETURN_SUCCESS,
  187. [
  188. 'web/test/test_value_1' => ['value1.db.store_default.test'],
  189. 'web/test/test_value_2' => ['value2.local_config.store_default.test'],
  190. 'web/test2/test_value_3' => ['value3.config.store_default.test'],
  191. 'web/test2/test_value_4' => ['value4.env.store_default.test'],
  192. 'web/test' => [
  193. 'web/test/test_value_1 - value1.db.store_default.test',
  194. 'web/test/test_value_2 - value2.local_config.store_default.test',
  195. ],
  196. 'web/test2' => [
  197. 'web/test2/test_value_3 - value3.config.store_default.test',
  198. 'web/test2/test_value_4 - value4.env.store_default.test',
  199. ],
  200. 'web' => [
  201. 'web/test/test_value_1 - value1.db.store_default.test',
  202. 'web/test/test_value_2 - value2.local_config.store_default.test',
  203. 'web/test2/test_value_3 - value3.config.store_default.test',
  204. 'web/test2/test_value_4 - value4.env.store_default.test',
  205. ],
  206. '' => [
  207. 'web/test/test_value_1 - value1.db.store_default.test',
  208. 'web/test/test_value_2 - value2.local_config.store_default.test',
  209. 'web/test2/test_value_3 - value3.config.store_default.test',
  210. 'web/test2/test_value_4 - value4.env.store_default.test',
  211. ],
  212. ]
  213. ],
  214. [
  215. null,
  216. null,
  217. Cli::RETURN_FAILURE,
  218. [
  219. 'web/test/test_wrong_value' => [
  220. 'Configuration for path: "web/test/test_wrong_value" doesn\'t exist'
  221. ],
  222. ]
  223. ],
  224. [
  225. 'default',
  226. null,
  227. Cli::RETURN_FAILURE,
  228. [
  229. 'web/test/test_wrong_value' => [
  230. 'Configuration for path: "web/test/test_wrong_value" doesn\'t exist'
  231. ],
  232. ]
  233. ],
  234. [
  235. 'default',
  236. 'scope_code',
  237. Cli::RETURN_FAILURE,
  238. [
  239. 'web/test/test_wrong_value' => [
  240. 'The "default" scope can\'t include a scope code. Try again without entering a scope code.'
  241. ],
  242. ]
  243. ],
  244. [
  245. 'some_scope',
  246. 'scope_code',
  247. Cli::RETURN_FAILURE,
  248. [
  249. 'web/test/test_wrong_value' => [
  250. 'The "some_scope" value doesn\'t exist. Enter another value and try again.'
  251. ],
  252. ]
  253. ],
  254. [
  255. 'websites',
  256. 'scope_code',
  257. Cli::RETURN_FAILURE,
  258. [
  259. 'web/test/test_wrong_value' => [
  260. 'The "scope_code" value doesn\'t exist. Enter another value and try again.'
  261. ],
  262. ]
  263. ],
  264. ];
  265. }
  266. /**
  267. * @return array
  268. */
  269. private function loadConfig()
  270. {
  271. return $this->reader->load(ConfigFilePool::APP_CONFIG);
  272. }
  273. /**
  274. * @return array
  275. */
  276. private function loadEnvConfig()
  277. {
  278. return $this->reader->load(ConfigFilePool::APP_ENV);
  279. }
  280. public function tearDown()
  281. {
  282. $_ENV = $this->env;
  283. $this->filesystem->getDirectoryWrite(DirectoryList::CONFIG)->writeFile(
  284. $this->configFilePool->getPath(ConfigFilePool::APP_CONFIG),
  285. "<?php\n return array();\n"
  286. );
  287. $this->filesystem->getDirectoryWrite(DirectoryList::CONFIG)->writeFile(
  288. $this->configFilePool->getPath(ConfigFilePool::APP_ENV),
  289. "<?php\n return array();\n"
  290. );
  291. $this->writer->saveConfig([ConfigFilePool::APP_CONFIG => $this->config]);
  292. $this->writer->saveConfig([ConfigFilePool::APP_ENV => $this->envConfig]);
  293. }
  294. }