123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CurrencySymbol\Test\Unit\Model\System;
- use Magento\CurrencySymbol\Model\System\Currencysymbol;
- use Magento\Framework\Serialize\Serializer\Json;
- use Magento\Store\Model\ScopeInterface;
- /**
- * Class CurrencysymbolTest
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class CurrencysymbolTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * Object manager helper
- *
- * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
- */
- private $objectManagerHelper;
- /**
- * @var \Magento\Framework\Locale\ResolverInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $localeResolverMock;
- /**
- * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $scopeConfigMock;
- /**
- * @var \Magento\Store\Model\System\Store|\PHPUnit_Framework_MockObject_MockObject
- */
- private $systemStoreMock;
- /**
- * @var \Magento\Config\Model\Config\Factory|\PHPUnit_Framework_MockObject_MockObject
- */
- private $configFactoryMock;
- /**
- * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $eventManagerMock;
- /**
- * @var \Magento\Framework\App\Config\ReinitableConfigInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $coreConfigMock;
- /**
- * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $storeManagerMock;
- /**
- * @var \Magento\Framework\App\Cache\TypeListInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $cacheTypeListMock;
- /**
- * @var Json|\PHPUnit_Framework_MockObject_MockObject
- */
- private $serializerMock;
- /**
- * @var \Magento\CurrencySymbol\Model\System\Currencysymbol
- */
- private $model;
- protected function setUp()
- {
- $this->objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->scopeConfigMock = $this->createPartialMock(
- \Magento\Framework\App\Config\ScopeConfigInterface::class,
- ['getValue', 'isSetFlag']
- );
- $this->localeResolverMock = $this->createPartialMock(
- \Magento\Framework\Locale\ResolverInterface::class,
- [
- 'getLocale',
- 'getDefaultLocalePath',
- 'setDefaultLocale',
- 'getDefaultLocale',
- 'setLocale',
- 'emulate',
- 'revert'
- ]
- );
- $this->systemStoreMock = $this->createPartialMock(
- \Magento\Store\Model\System\Store::class,
- ['getWebsiteCollection', 'getGroupCollection', 'getStoreCollection']
- );
- $this->configFactoryMock = $this->createPartialMock(\Magento\Config\Model\Config\Factory::class, ['create']);
- $this->eventManagerMock = $this->createPartialMock(
- \Magento\Framework\Event\ManagerInterface::class,
- ['dispatch']
- );
- $this->coreConfigMock = $this->createPartialMock(
- \Magento\Framework\App\Config\ReinitableConfigInterface::class,
- ['reinit', 'setValue', 'getValue', 'isSetFlag']
- );
- $this->storeManagerMock = $this->createMock(\Magento\Store\Model\StoreManagerInterface::class);
- $this->cacheTypeListMock = $this->createMock(\Magento\Framework\App\Cache\TypeListInterface::class);
- $this->serializerMock = $this->getMockBuilder(Json::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->model = $this->objectManagerHelper->getObject(
- \Magento\CurrencySymbol\Model\System\Currencysymbol::class,
- [
- 'scopeConfig' => $this->scopeConfigMock,
- 'localeResolver' => $this->localeResolverMock,
- 'systemStore' => $this->systemStoreMock,
- 'configFactory' => $this->configFactoryMock,
- 'eventManager' => $this->eventManagerMock,
- 'coreConfig' => $this->coreConfigMock,
- 'storeManager' => $this->storeManagerMock,
- 'cacheTypeList' => $this->cacheTypeListMock,
- 'serializer' => $this->serializerMock,
- ]
- );
- }
- protected function tearDown()
- {
- unset($this->objectManagerHelper);
- }
- public function testGetCurrencySymbolData()
- {
- $expectedSymbolsData = [
- 'EUR' => [
- 'parentSymbol' => '€',
- 'displayName' => 'Euro',
- 'displaySymbol' => '€',
- 'inherited' => true
- ],
- 'USD' => [
- 'parentSymbol' => '$',
- 'displayName' => 'US Dollar',
- 'displaySymbol' => 'custom $',
- 'inherited' => false
- ]
- ];
- $websiteId = 1;
- $groupId = 2;
- $currencies = 'USD,EUR';
- $this->prepareMocksForGetCurrencySymbolsData($websiteId, $groupId, $currencies);
- $this->assertEquals($expectedSymbolsData, $this->model->getCurrencySymbolsData());
- }
- public function testSetCurrencySymbolData()
- {
- $websiteId = 1;
- $groupId = 2;
- $currencies = 'USD,EUR';
- $symbols = [];
- $configValue['options']['fields']['customsymbol']['inherit'] = 1;
- $this->prepareMocksForGetCurrencySymbolsData($websiteId, $groupId, $currencies);
- $this->expectSaveOfCustomSymbols($configValue);
- $this->expectApplicationServiceMethodsCalls();
- $this->assertInstanceOf(
- \Magento\CurrencySymbol\Model\System\Currencysymbol::class,
- $this->model->setCurrencySymbolsData($symbols)
- );
- }
- /**
- * Assert that config with custom currency symbols happens with expected values
- *
- * @param array $configValue
- */
- private function expectSaveOfCustomSymbols(array $configValue)
- {
- /**
- * @var \Magento\Config\Model\Config|\PHPUnit_Framework_MockObject_MockObject
- */
- $configMock = $this->getMockBuilder(\Magento\Config\Model\Config::class)
- ->disableOriginalConstructor()
- ->setMethods(['setSection', 'setWebsite', 'setStore', 'setGroups', 'save'])
- ->getMock();
- $this->configFactoryMock->expects($this->once())->method('create')->willReturn($configMock);
- $configMock->expects($this->once())
- ->method('setSection')
- ->with(Currencysymbol::CONFIG_SECTION)
- ->willReturnSelf();
- $configMock->expects($this->once())->method('setWebsite')->with(null)->willReturnSelf();
- $configMock->expects($this->once())->method('setStore')->with(null)->willReturnSelf();
- $configMock->expects($this->once())->method('setGroups')->with($configValue)->willReturnSelf();
- $configMock->expects($this->once())->method('save');
- }
- /**
- * Assert that application service methods, such as cache cleanup and events dispatching, are called
- */
- private function expectApplicationServiceMethodsCalls()
- {
- $this->coreConfigMock->expects($this->once())->method('reinit');
- $this->cacheTypeListMock->expects($this->atLeastOnce())->method('invalidate');
- $this->eventManagerMock->expects($this->exactly(2))->method('dispatch');
- }
- /**
- * @dataProvider getCurrencySymbolDataProvider
- */
- public function testGetCurrencySymbol(
- $code,
- $expectedSymbol,
- $serializedCustomSymbols,
- $unserializedCustomSymbols
- ) {
- $this->scopeConfigMock->expects($this->once())
- ->method('getValue')
- ->with(
- Currencysymbol::XML_PATH_CUSTOM_CURRENCY_SYMBOL,
- ScopeInterface::SCOPE_STORE,
- null
- )
- ->willReturn($serializedCustomSymbols);
- $this->serializerMock->expects($this->once())
- ->method('unserialize')
- ->with($serializedCustomSymbols)
- ->willReturn($unserializedCustomSymbols);
- $currencySymbol = $this->model->getCurrencySymbol($code);
- $this->assertEquals($expectedSymbol, $currencySymbol);
- }
- /**
- * @return array
- */
- public function getCurrencySymbolDataProvider()
- {
- return [
- 'existent custom symbol' => [
- 'code' => 'USD',
- 'expectedSymbol' => '$',
- 'serializedCustomSymbols' => '{"USD":"$"}',
- 'unserializedCustomSymbols' => ['USD' => '$'],
- ],
- 'nonexistent custom symbol' => [
- 'code' => 'UAH',
- 'expectedSymbol' => false,
- 'serializedCustomSymbols' => '{"USD":"$"}',
- 'unserializedCustomSymbols' => ['USD' => '$'],
- ],
- ];
- }
- public function testGetCurrencySymbolWithNoSymbolsConfig()
- {
- $this->scopeConfigMock->expects($this->any())
- ->method('getValue')
- ->with(
- Currencysymbol::XML_PATH_CUSTOM_CURRENCY_SYMBOL,
- ScopeInterface::SCOPE_STORE,
- null
- )
- ->willReturn(false);
- $this->serializerMock->expects($this->never())
- ->method('unserialize');
- $currencySymbol = $this->model->getCurrencySymbol('USD');
- $this->assertEquals(false, $currencySymbol);
- }
- /**
- * Prepare mocks for getCurrencySymbolsData
- *
- * @param int $websiteId
- * @param int $groupId
- * @param string $currencies
- */
- protected function prepareMocksForGetCurrencySymbolsData(
- $websiteId,
- $groupId,
- $currencies
- ) {
- $customSymbolsSerialized = '{"USD":"custom $"}';
- /**
- * @var \Magento\Store\Model\Website|\PHPUnit_Framework_MockObject_MockObject
- */
- $websiteMock = $this->createPartialMock(\Magento\Store\Model\Website::class, ['getId', 'getConfig']);
- /**
- * @var \Magento\Store\Model\Group|\PHPUnit_Framework_MockObject_MockObject
- */
- $groupMock = $this->createPartialMock(\Magento\Store\Model\Group::class, ['getId', 'getWebsiteId']);
- /**
- * @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject
- */
- $storeMock = $this->createPartialMock(\Magento\Store\Model\Store::class, ['getGroupId']);
- $this->systemStoreMock->expects($this->once())
- ->method('getWebsiteCollection')
- ->willReturn([$websiteMock]);
- $this->systemStoreMock->expects($this->once())->method('getGroupCollection')->willReturn([$groupMock]);
- $this->systemStoreMock->expects($this->once())->method('getStoreCollection')->willReturn([$storeMock]);
- $websiteMock->expects($this->any())->method('getId')->willReturn($websiteId);
- $groupMock->expects($this->any())->method('getWebsiteId')->willReturn($websiteId);
- $groupMock->expects($this->any())->method('getId')->willReturn($groupId);
- $storeMock->expects($this->any())->method('getGroupId')->willReturn($groupId);
- $this->scopeConfigMock->expects($this->any())
- ->method('getValue')
- ->willReturnMap(
- [
- [
- Currencysymbol::XML_PATH_CUSTOM_CURRENCY_SYMBOL,
- ScopeInterface::SCOPE_STORE,
- null,
- $customSymbolsSerialized
- ],
- [
- Currencysymbol::XML_PATH_ALLOWED_CURRENCIES,
- ScopeInterface::SCOPE_STORE,
- $storeMock,
- $currencies
- ],
- [Currencysymbol::XML_PATH_ALLOWED_CURRENCIES, ScopeInterface::SCOPE_STORE, null, $currencies],
- [
- Currencysymbol::XML_PATH_ALLOWED_CURRENCIES,
- ScopeInterface::SCOPE_STORE,
- $storeMock,
- $currencies
- ]
- ]
- );
- $websiteMock->expects($this->any())
- ->method('getConfig')
- ->with(Currencysymbol::XML_PATH_ALLOWED_CURRENCIES)
- ->willReturn($currencies);
- $this->localeResolverMock->expects($this->any())->method('getLocale')->willReturn('en');
- $this->serializerMock->expects($this->once())
- ->method('unserialize')
- ->with($customSymbolsSerialized)
- ->willReturn(['USD' => 'custom $']);
- }
- }
|