magento2-docker/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencyConfigTest.php

211 lines
6.4 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Directory\Model;
use Magento\Directory\Model\Currency as CurrencyModel;
use Magento\Framework\App\Area;
use Magento\Framework\App\Config\ConfigResource\ConfigInterface;
use Magento\Framework\App\Config\ReinitableConfigInterface;
use Magento\Store\Model\Store;
use Magento\Store\Model\StoreManagerInterface;
use Magento\TestFramework\App\State;
use Magento\TestFramework\Helper\Bootstrap;
use PHPUnit\Framework\TestCase;
/**
* Provide tests for CurrencyConfig model.
*/
class CurrencyConfigTest extends TestCase
{
/**
* @var string
*/
private $baseCurrencyPath = 'currency/options/base';
/**
* @var string
*/
private $defaultCurrencyPath = 'currency/options/default';
/**
* @var string
*/
private $allowedCurrenciesPath = 'currency/options/allow';
/**
* @var ConfigInterface
*/
private $config;
/**
* @var CurrencyModel
*/
private $currency;
/**
* @inheritdoc
*/
protected function setUp(): void
{
$this->currency = Bootstrap::getObjectManager()->get(CurrencyModel::class);
$this->config = Bootstrap::getObjectManager()->get(ConfigInterface::class);
}
/**
* Test get currency config for admin, crontab and storefront areas.
*
* @dataProvider getConfigCurrenciesDataProvider
* @magentoDataFixture Magento/Store/_files/store.php
* @magentoDbIsolation disabled
* @param string $areaCode
* @param array $expected
* @return void
*/
public function testGetConfigCurrencies(string $areaCode, array $expected)
{
/** @var State $appState */
$appState = Bootstrap::getObjectManager()->get(State::class);
$appState->setAreaCode($areaCode);
$store = Bootstrap::getObjectManager()->get(Store::class);
$store->load('test', 'code');
$this->clearCurrencyConfig();
$this->setStoreConfig($store->getId());
$storeManager = Bootstrap::getObjectManager()->get(StoreManagerInterface::class);
$storeManager->setCurrentStore($store->getId());
if (in_array($areaCode, [Area::AREA_ADMINHTML, Area::AREA_CRONTAB])) {
self::assertEquals($expected['allowed'], $this->currency->getConfigAllowCurrencies());
self::assertEquals($expected['base'], $this->currency->getConfigBaseCurrencies());
self::assertEquals($expected['default'], $this->currency->getConfigDefaultCurrencies());
} else {
/** @var StoreManagerInterface $storeManager */
$storeManager = Bootstrap::getObjectManager()->get(StoreManagerInterface::class);
foreach ($storeManager->getStores() as $store) {
$storeManager->setCurrentStore($store->getId());
self::assertEquals(
$expected[$store->getCode()]['allowed'],
$this->currency->getConfigAllowCurrencies()
);
self::assertEquals(
$expected[$store->getCode()]['base'],
$this->currency->getConfigBaseCurrencies()
);
self::assertEquals(
$expected[$store->getCode()]['default'],
$this->currency->getConfigDefaultCurrencies()
);
}
}
}
/**
* Provide test data for getConfigCurrencies test.
*
* @return array
*/
public function getConfigCurrenciesDataProvider()
{
return [
[
'areaCode' => Area::AREA_ADMINHTML,
'expected' => [
'allowed' => ['BDT', 'BNS', 'BTD', 'EUR', 'USD'],
'base' => ['BDT', 'USD'],
'default' => ['BDT', 'USD'],
],
],
[
'areaCode' => Area::AREA_CRONTAB,
'expected' => [
'allowed' => ['BDT', 'BNS', 'BTD', 'EUR', 'USD'],
'base' => ['BDT', 'USD'],
'default' => ['BDT', 'USD'],
],
],
[
'areaCode' => Area::AREA_FRONTEND,
'expected' => [
'default' => [
'allowed' => ['EUR', 'USD'],
'base' => ['USD'],
'default' => ['USD'],
],
'test' => [
'allowed' => ['BDT', 'BNS', 'BTD', 'USD'],
'base' => ['BDT'],
'default' => ['BDT'],
],
],
],
];
}
/**
* Remove currency config form Db.
*
* @return void
*/
private function clearCurrencyConfig()
{
$storeManager = Bootstrap::getObjectManager()->get(StoreManagerInterface::class);
foreach ($storeManager->getStores() as $store) {
$this->config->deleteConfig(
$this->allowedCurrenciesPath,
'stores',
$store->getId()
);
$this->config->deleteConfig(
$this->baseCurrencyPath,
'stores',
$store->getId()
);
$this->config->deleteConfig(
$this->defaultCurrencyPath,
'stores',
$store->getId()
);
}
}
/**
* Set allowed, base and default currency config values for given store.
*
* @param string $storeId
* @return void
*/
private function setStoreConfig(string $storeId)
{
$allowedCurrencies = 'BDT,BNS,BTD';
$baseCurrency = 'BDT';
$this->config->saveConfig(
$this->baseCurrencyPath,
$baseCurrency,
'stores',
$storeId
);
$this->config->saveConfig(
$this->defaultCurrencyPath,
$baseCurrency,
'stores',
$storeId
);
$this->config->saveConfig(
$this->allowedCurrenciesPath,
$allowedCurrencies,
'stores',
$storeId
);
Bootstrap::getObjectManager()->get(ReinitableConfigInterface::class)->reinit();
Bootstrap::getObjectManager()->create(StoreManagerInterface::class)->reinitStores();
}
protected function tearDown(): void
{
$this->clearCurrencyConfig();
}
}