193 lines
6.5 KiB
PHP
Executable File
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;
|
|
}
|
|
}
|