AbstractAdjustmentTest.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Pricing\Test\Unit\Render;
  7. use \Magento\Framework\Pricing\Render\AbstractAdjustment;
  8. /**
  9. * Test class for \Magento\Framework\Pricing\Render\AbstractAdjustment
  10. */
  11. class AbstractAdjustmentTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var AbstractAdjustment | \PHPUnit_Framework_MockObject_MockObject
  15. */
  16. protected $model;
  17. /**
  18. * @var \Magento\Framework\Pricing\PriceCurrencyInterface | \PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $priceCurrency;
  21. /**
  22. * @var array
  23. */
  24. protected $data;
  25. protected function setUp()
  26. {
  27. $this->priceCurrency = $this->createMock(\Magento\Framework\Pricing\PriceCurrencyInterface::class);
  28. $this->data = ['argument_one' => 1];
  29. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  30. $constructorArgs = $objectManager->getConstructArguments(
  31. \Magento\Framework\Pricing\Render\AbstractAdjustment::class,
  32. [
  33. 'priceCurrency' => $this->priceCurrency,
  34. 'data' => $this->data
  35. ]
  36. );
  37. $this->model = $this->getMockBuilder(\Magento\Framework\Pricing\Render\AbstractAdjustment::class)
  38. ->setConstructorArgs($constructorArgs)
  39. ->setMethods(['getData', 'setData', 'apply'])
  40. ->getMockForAbstractClass();
  41. }
  42. public function testConvertAndFormatCurrency()
  43. {
  44. $amount = '100';
  45. $includeContainer = true;
  46. $precision = \Magento\Framework\Pricing\PriceCurrencyInterface::DEFAULT_PRECISION;
  47. $result = '100.0 grn';
  48. $this->priceCurrency->expects($this->once())
  49. ->method('convertAndFormat')
  50. ->with($amount, $includeContainer, $precision)
  51. ->will($this->returnValue($result));
  52. $this->assertEquals($result, $this->model->convertAndFormatCurrency($amount, $includeContainer, $precision));
  53. }
  54. public function testRender()
  55. {
  56. $amountRender = $this->createMock(\Magento\Framework\Pricing\Render\Amount::class);
  57. $arguments = ['argument_two' => 2];
  58. $mergedArguments = ['argument_one' => 1, 'argument_two' => 2];
  59. $renderText = 'amount data';
  60. $this->model->expects($this->at(0))
  61. ->method('getData')
  62. ->will($this->returnValue($this->data));
  63. $this->model->expects($this->at(1))
  64. ->method('setData')
  65. ->with($mergedArguments);
  66. $this->model->expects($this->at(2))
  67. ->method('apply')
  68. ->will($this->returnValue($renderText));
  69. $this->model->expects($this->at(3))
  70. ->method('setData')
  71. ->with($this->data);
  72. $result = $this->model->render($amountRender, $arguments);
  73. $this->assertEquals($renderText, $result);
  74. }
  75. public function testGetAmountRender()
  76. {
  77. $amountRender = $this->createMock(\Magento\Framework\Pricing\Render\Amount::class);
  78. $this->model->expects($this->at(0))
  79. ->method('getData')
  80. ->will($this->returnValue($this->data));
  81. $this->model->render($amountRender);
  82. $this->assertEquals($amountRender, $this->model->getAmountRender());
  83. }
  84. public function testGetPriceType()
  85. {
  86. $amountRender = $this->createMock(\Magento\Framework\Pricing\Render\Amount::class);
  87. $price = $this->getMockForAbstractClass(\Magento\Framework\Pricing\Price\PriceInterface::class);
  88. $sealableItem = $this->getMockForAbstractClass(\Magento\Framework\Pricing\SaleableInterface::class);
  89. $priceInfo = $this->createMock(\Magento\Framework\Pricing\PriceInfo\Base::class);
  90. $priceCode = 'regular_price';
  91. $amountRender->expects($this->once())
  92. ->method('getSaleableItem')
  93. ->will($this->returnValue($sealableItem));
  94. $sealableItem->expects($this->once())
  95. ->method('getPriceInfo')
  96. ->will($this->returnValue($priceInfo));
  97. $priceInfo->expects($this->once())
  98. ->method('getPrice')
  99. ->with($priceCode)
  100. ->will($this->returnValue($price));
  101. $this->model->expects($this->at(0))
  102. ->method('getData')
  103. ->will($this->returnValue($this->data));
  104. $this->model->render($amountRender);
  105. $this->assertEquals($price, $this->model->getPriceType($priceCode));
  106. }
  107. public function testGetPrice()
  108. {
  109. $price = 100;
  110. $amountRender = $this->createMock(\Magento\Framework\Pricing\Render\Amount::class);
  111. $amountRender->expects($this->once())
  112. ->method('getPrice')
  113. ->with()
  114. ->will($this->returnValue($price));
  115. $this->model->expects($this->at(0))
  116. ->method('getData')
  117. ->will($this->returnValue($this->data));
  118. $this->model->render($amountRender);
  119. $this->assertEquals($price, $this->model->getPrice());
  120. }
  121. public function testGetSealableItem()
  122. {
  123. $sealableItem = $this->getMockForAbstractClass(\Magento\Framework\Pricing\SaleableInterface::class);
  124. $amountRender = $this->createMock(\Magento\Framework\Pricing\Render\Amount::class);
  125. $amountRender->expects($this->once())
  126. ->method('getSaleableItem')
  127. ->with()
  128. ->will($this->returnValue($sealableItem));
  129. $this->model->expects($this->at(0))
  130. ->method('getData')
  131. ->will($this->returnValue($this->data));
  132. $this->model->render($amountRender);
  133. $this->assertEquals($sealableItem, $this->model->getSaleableItem());
  134. }
  135. public function testGetAdjustment()
  136. {
  137. $amountRender = $this->createMock(\Magento\Framework\Pricing\Render\Amount::class);
  138. $adjustment = $this->getMockForAbstractClass(\Magento\Framework\Pricing\Adjustment\AdjustmentInterface::class);
  139. $sealableItem = $this->getMockForAbstractClass(\Magento\Framework\Pricing\SaleableInterface::class);
  140. $priceInfo = $this->createMock(\Magento\Framework\Pricing\PriceInfo\Base::class);
  141. $adjustmentCode = 'tax';
  142. $amountRender->expects($this->once())
  143. ->method('getSaleableItem')
  144. ->will($this->returnValue($sealableItem));
  145. $sealableItem->expects($this->once())
  146. ->method('getPriceInfo')
  147. ->will($this->returnValue($priceInfo));
  148. $priceInfo->expects($this->once())
  149. ->method('getAdjustment')
  150. ->with($adjustmentCode)
  151. ->will($this->returnValue($adjustment));
  152. $this->model->expects($this->at(0))
  153. ->method('getData')
  154. ->will($this->returnValue($this->data));
  155. $this->model->expects($this->once())
  156. ->method('getAdjustmentCode')
  157. ->will($this->returnValue($adjustmentCode));
  158. $this->model->render($amountRender);
  159. $this->assertEquals($adjustment, $this->model->getAdjustment());
  160. }
  161. public function testFormatCurrency()
  162. {
  163. $amount = 5.3456;
  164. $includeContainer = false;
  165. $precision = 3;
  166. $expected = 5.346;
  167. $this->priceCurrency->expects($this->once())
  168. ->method('format')
  169. ->with($amount, $includeContainer, $precision)
  170. ->will($this->returnValue($expected));
  171. $result = $this->model->formatCurrency($amount, $includeContainer, $precision);
  172. $this->assertEquals($expected, $result, 'formatCurrent returned unexpected result');
  173. }
  174. }