Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CurrencyTest.php
Go to the documentation of this file.
1 <?php
8 
10 
11 class CurrencyTest extends \PHPUnit\Framework\TestCase
12 {
16  private $mockEventManager;
17 
21  private $mockLocaleResolver;
22 
26  private $mockCurrencyFactory;
27 
31  private $testCurrencyObject;
32 
33  const TEST_NONCACHED_CURRENCY = 'USD';
35  const TEST_CACHED_CURRENCY = 'CAD';
36  const TEST_CACHED_CURRENCY_LOCALE = 'en_CA';
39  const TEST_EXCEPTION_CURRENCY = 'ZZZ';
41 
42  protected function setUp()
43  {
44  $this->mockEventManager = $this
45  ->getMockBuilder(\Magento\Framework\Event\Manager::class)
46  ->disableOriginalConstructor()
47  ->getMock();
48  $this->mockLocaleResolver = $this
49  ->getMockBuilder(\Magento\Framework\Locale\Resolver::class)
50  ->disableOriginalConstructor()
51  ->getMock();
52  $this->mockCurrencyFactory = $this
53  ->getMockBuilder(\Magento\Framework\CurrencyFactory::class)
54  ->disableOriginalConstructor()
55  ->getMock();
56 
57  $this->testCurrencyObject = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))
58  ->getObject(
59  \Magento\Framework\Locale\Currency::class,
60  [
61  'eventManager' => $this->mockEventManager,
62  'localeResolver' => $this->mockLocaleResolver,
63  'currencyFactory' => $this->mockCurrencyFactory,
64  ]
65  );
66  }
67 
68  public function testGetDefaultCurrency()
69  {
70  $expectedDefaultCurrency = Currency::DEFAULT_CURRENCY;
71  $retrievedDefaultCurrency = $this->testCurrencyObject->getDefaultCurrency();
72  $this->assertEquals($expectedDefaultCurrency, $retrievedDefaultCurrency);
73  }
74 
75  public function testGetCurrencyNonCached()
76  {
77  $options = new \Zend_Currency(null, self::TEST_NONCACHED_CURRENCY_LOCALE);
78 
79  $this->mockCurrencyFactory
80  ->expects($this->once())
81  ->method('create')
82  ->will($this->returnValue($options));
83 
84  $this->mockEventManager
85  ->expects($this->once())
86  ->method('dispatch');
87 
88  $retrievedCurrencyObject = $this->testCurrencyObject
89  ->getCurrency(self::TEST_NONCACHED_CURRENCY);
90 
91  $this->assertInstanceOf('Zend_Currency', $retrievedCurrencyObject);
92  $this->assertEquals(self::TEST_NONCACHED_CURRENCY_LOCALE, $retrievedCurrencyObject->getLocale());
93  $this->assertEquals('US Dollar', $retrievedCurrencyObject->getName());
94  $this->assertEquals([self::TEST_NONCACHED_CURRENCY], $retrievedCurrencyObject->getCurrencyList());
95  }
96 
97  public function testGetCurrencyCached()
98  {
99  $options = new \Zend_Currency(null, self::TEST_CACHED_CURRENCY_LOCALE);
100 
101  $this->mockCurrencyFactory
102  ->expects($this->once())
103  ->method('create')
104  ->will($this->returnValue($options));
105 
106  $this->mockEventManager
107  ->expects($this->once())
108  ->method('dispatch');
109 
110  $retrievedCurrencyObject = $this->testCurrencyObject
111  ->getCurrency(self::TEST_CACHED_CURRENCY);
112 
113  $this->assertInstanceOf('Zend_Currency', $retrievedCurrencyObject);
114  $this->assertEquals(self::TEST_CACHED_CURRENCY_LOCALE, $retrievedCurrencyObject->getLocale());
115  $this->assertEquals('Canadian Dollar', $retrievedCurrencyObject->getName());
116  $this->assertEquals([self::TEST_CACHED_CURRENCY], $retrievedCurrencyObject->getCurrencyList());
117 
118  /*
119  * Since the CAD currency object was previously retrieved, getCurrency()
120  * should return the previously created and cached currency object for CAD, rather
121  * than creating another one.
122  */
123 
124  $this->mockCurrencyFactory
125  ->expects($this->never())
126  ->method('create')
127  ->will($this->returnValue($options));
128 
129  $this->mockEventManager
130  ->expects($this->never())
131  ->method('dispatch');
132 
133  $retrievedCurrencyObject = $this->testCurrencyObject
134  ->getCurrency(self::TEST_CACHED_CURRENCY);
135 
136  $this->assertInstanceOf('Zend_Currency', $retrievedCurrencyObject);
137  $this->assertEquals(self::TEST_CACHED_CURRENCY_LOCALE, $retrievedCurrencyObject->getLocale());
138  $this->assertEquals('Canadian Dollar', $retrievedCurrencyObject->getName());
139  $this->assertEquals([self::TEST_CACHED_CURRENCY], $retrievedCurrencyObject->getCurrencyList());
140  }
141 
142  public function testGetNonExistantCurrency()
143  {
144  $options = new \Zend_Currency(null, self::TEST_NONEXISTANT_CURRENCY_LOCALE);
145 
146  $this->mockCurrencyFactory
147  ->expects($this->once())
148  ->method('create')
149  ->will($this->returnValue($options));
150 
151  $this->mockEventManager
152  ->expects($this->once())
153  ->method('dispatch');
154 
155  $this->mockEventManager
156  ->expects($this->once())
157  ->method('dispatch');
158 
159  $retrievedCurrencyObject = $this->testCurrencyObject
160  ->getCurrency(self::TEST_NONEXISTANT_CURRENCY);
161 
162  $this->assertInstanceOf('Zend_Currency', $retrievedCurrencyObject);
163  $this->assertEquals(self::TEST_NONEXISTANT_CURRENCY_LOCALE, $retrievedCurrencyObject->getLocale());
164  $this->assertEquals('euro', $retrievedCurrencyObject->getName());
165  $this->assertEquals(['EUR'], $retrievedCurrencyObject->getCurrencyList());
166  }
167 
168  public function testExceptionCase()
169  {
170  $options = new \Zend_Currency(null, self::TEST_EXCEPTION_CURRENCY_LOCALE);
171 
172  $this->mockCurrencyFactory
173  ->expects($this->at(0))
174  ->method('create')
175  ->will($this->throwException(new \Exception()));
176 
177  $this->mockCurrencyFactory
178  ->expects($this->at(1))
179  ->method('create')
180  ->will($this->returnValue($options));
181 
182  $this->mockEventManager
183  ->expects($this->once())
184  ->method('dispatch');
185 
186  $this->mockLocaleResolver
187  ->expects($this->exactly(5))
188  ->method('getLocale');
189 
190  $retrievedCurrencyObject = $this->testCurrencyObject
191  ->getCurrency(self::TEST_EXCEPTION_CURRENCY);
192 
193  $this->assertInstanceOf('Zend_Currency', $retrievedCurrencyObject);
194  $this->assertEquals(self::TEST_EXCEPTION_CURRENCY_LOCALE, $retrievedCurrencyObject->getLocale());
195  $this->assertEquals(self::TEST_EXCEPTION_CURRENCY, $retrievedCurrencyObject->getName());
196  $this->assertEquals(['EUR'], $retrievedCurrencyObject->getCurrencyList());
197  }
198 }