magento2-docker/dev/tests/integration/testsuite/Magento/Config/Model/ConfigTest.php

193 lines
6.5 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Config\Model;
use Magento\Backend\App\Area\FrontNameResolver;
use Magento\Config\Model\ResourceModel\Config\Data\Collection;
use Magento\Config\Model\ResourceModel\Config\Data\CollectionFactory;
use Magento\Framework\Config\ScopeInterface;
use Magento\Framework\Encryption\EncryptorInterface;
use Magento\TestFramework\Helper\Bootstrap;
use PHPUnit\Framework\TestCase;
/**
* @magentoAppArea adminhtml
*/
class ConfigTest extends TestCase
{
/**
* @covers \Magento\Config\Model\Config::save
* @param array $groups
* @magentoDbIsolation enabled
* @dataProvider saveWithSingleStoreModeEnabledDataProvider
* @magentoConfigFixture current_store general/single_store_mode/enabled 1
*/
public function testSaveWithSingleStoreModeEnabled($groups)
{
Bootstrap::getObjectManager()->get(
ScopeInterface::class
)->setCurrentScope(
FrontNameResolver::AREA_CODE
);
/** @var $_configDataObject Config */
$_configDataObject = Bootstrap::getObjectManager()->create(Config::class);
$_configData = $_configDataObject->setSection('dev')->setWebsite('base')->load();
$this->assertEmpty($_configData);
$_configDataObject = Bootstrap::getObjectManager()->create(Config::class);
$_configDataObject->setSection('dev')->setGroups($groups)->save();
/** @var $_configDataObject Config */
$_configDataObject = Bootstrap::getObjectManager()->create(Config::class);
$_configData = $_configDataObject->setSection('dev')->load();
$this->assertArrayHasKey('dev/debug/template_hints_admin', $_configData);
$this->assertArrayHasKey('dev/debug/template_hints_blocks', $_configData);
$_configDataObject = Bootstrap::getObjectManager()->create(Config::class);
$_configData = $_configDataObject->setSection('dev')->setWebsite('base')->load();
$this->assertArrayNotHasKey('dev/debug/template_hints_admin', $_configData);
$this->assertArrayNotHasKey('dev/debug/template_hints_blocks', $_configData);
}
public function saveWithSingleStoreModeEnabledDataProvider()
{
return require __DIR__ . '/_files/config_groups.php';
}
/**
* @covers \Magento\Config\Model\Config::save
* @param string $section
* @param array $groups
* @param array $expected
* @magentoDbIsolation enabled
* @dataProvider saveDataProvider
*/
public function testSave($section, $groups, $expected)
{
$objectManager = Bootstrap::getObjectManager();
/** @var $_configDataObject Config */
$_configDataObject = $objectManager->create(Config::class);
$_configDataObject->setSection($section)->setWebsite('base')->setGroups($groups)->save();
foreach ($expected as $group => $expectedData) {
$_configDataObject = $objectManager->create(Config::class);
$_configData = $_configDataObject->setSection($group)->setWebsite('base')->load();
if (array_key_exists('payment/payflow_link/pwd', $_configData)) {
$_configData['payment/payflow_link/pwd'] = $objectManager->get(
EncryptorInterface::class
)->decrypt(
$_configData['payment/payflow_link/pwd']
);
}
$this->assertEquals($expectedData, $_configData);
}
}
public function saveDataProvider()
{
return require __DIR__ . '/_files/config_section.php';
}
/**
* @param string $website
* @param string $section
* @param array $override
* @param array $inherit
* @param array $expected
* @dataProvider saveWebsiteScopeDataProvider
*/
public function testSaveUseDefault(
string $website,
string $section,
array $override,
array $inherit,
array $expected
): void {
$objectManager = Bootstrap::getObjectManager();
/** @var Config $config*/
$configFactory = $objectManager->create(ConfigFactory::class);
$config = $configFactory->create()
->setSection($section)
->setWebsite($website)
->setGroups($override['groups'])
->save();
$paths = array_keys($expected);
$this->assertEquals(
$expected,
$this->getConfigValues($config->getScope(), $config->getScopeId(), $paths)
);
$config = $configFactory->create()
->setSection($section)
->setWebsite($website)
->setGroups($inherit['groups'])
->save();
$this->assertEmpty(
$this->getConfigValues($config->getScope(), $config->getScopeId(), $paths)
);
}
/**
* @return array
*/
public function saveWebsiteScopeDataProvider(): array
{
return [
[
'website' => 'base',
'section' => 'payment',
[
'groups' => [
'account' => [
'fields' => [
'merchant_country' => ['value' => 'GB'],
],
],
]
],
[
'groups' => [
'account' => [
'fields' => [
'merchant_country' => ['inherit' => 1],
],
],
],
],
'expected' => [
'paypal/general/merchant_country' => 'GB',
],
]
];
}
/**
* @param string $scope
* @param int $scopeId
* @param array $paths
* @return array
*/
private function getConfigValues(string $scope, int $scopeId, array $paths): array
{
$objectManager = Bootstrap::getObjectManager();
/** @var Collection $configCollection */
$configCollectionFactory = $objectManager->create(CollectionFactory::class);
$configCollection = $configCollectionFactory->create();
$configCollection->addFieldToFilter('scope', $scope);
$configCollection->addFieldToFilter('scope_id', $scopeId);
$configCollection->addFieldToFilter('path', ['in' => $paths]);
$result = [];
foreach ($configCollection as $data) {
$result[$data->getPath()] = $data->getValue();
}
return $result;
}
}