211 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			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();
 | 
						|
    }
 | 
						|
}
 |