AdjustmentTest.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Weee\Test\Unit\Pricing\Render;
  7. use Magento\Weee\Pricing\Render\Adjustment;
  8. /**
  9. * Class AdjustmentTest for testing Adjustment class
  10. *
  11. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  12. */
  13. class AdjustmentTest extends \PHPUnit\Framework\TestCase
  14. {
  15. /**
  16. * @var \Magento\Weee\Pricing\Render\Adjustment
  17. */
  18. protected $model;
  19. /**
  20. * @var \Magento\Weee\Helper\Data
  21. */
  22. protected $weeeHelperMock;
  23. /**
  24. * Context mock
  25. *
  26. * @var \Magento\Framework\View\Element\Template\Context
  27. */
  28. protected $contextMock;
  29. /**
  30. * Price currency model mock
  31. *
  32. * @var \Magento\Directory\Model\PriceCurrency
  33. */
  34. protected $priceCurrencyMock;
  35. /**
  36. * Set up mocks for tested class
  37. */
  38. protected function setUp()
  39. {
  40. $this->contextMock = $this->createPartialMock(
  41. \Magento\Framework\View\Element\Template\Context::class,
  42. ['getStoreConfig', 'getEventManager', 'getScopeConfig']
  43. );
  44. $this->priceCurrencyMock = $this->getMockForAbstractClass(
  45. \Magento\Framework\Pricing\PriceCurrencyInterface::class,
  46. [],
  47. '',
  48. true,
  49. true,
  50. true,
  51. []
  52. );
  53. $this->weeeHelperMock = $this->createMock(\Magento\Weee\Helper\Data::class);
  54. $eventManagerMock = $this->getMockBuilder(\Magento\Framework\Event\ManagerInterface::class)
  55. ->disableOriginalConstructor()
  56. ->getMockForAbstractClass();
  57. $storeConfigMock = $this->getMockBuilder(\Magento\Store\Model\Store\Config::class)
  58. ->disableOriginalConstructor()
  59. ->getMock();
  60. $scopeConfigMock = $this->getMockForAbstractClass(\Magento\Framework\App\Config\ScopeConfigInterface::class);
  61. $this->contextMock->expects($this->any())
  62. ->method('getEventManager')
  63. ->will($this->returnValue($eventManagerMock));
  64. $this->contextMock->expects($this->any())
  65. ->method('getStoreConfig')
  66. ->will($this->returnValue($storeConfigMock));
  67. $this->contextMock->expects($this->any())
  68. ->method('getScopeConfig')
  69. ->will($this->returnValue($scopeConfigMock));
  70. $this->model = new Adjustment(
  71. $this->contextMock,
  72. $this->priceCurrencyMock,
  73. $this->weeeHelperMock
  74. );
  75. }
  76. /**
  77. * Test for method getAdjustmentCode
  78. */
  79. public function testGetAdjustmentCode()
  80. {
  81. $this->assertEquals(\Magento\Weee\Pricing\Adjustment::ADJUSTMENT_CODE, $this->model->getAdjustmentCode());
  82. }
  83. /**
  84. * Test for method getFinalAmount
  85. */
  86. public function testGetFinalAmount()
  87. {
  88. $this->priceCurrencyMock->expects($this->once())
  89. ->method('format')
  90. ->with(10, true, 2)
  91. ->will($this->returnValue("$10.00"));
  92. $displayValue = 10;
  93. $expectedValue = "$10.00";
  94. $typeOfDisplay = 1; //Just to set it to not false
  95. /** @var \Magento\Framework\Pricing\Render\Amount $amountRender */
  96. $amountRender = $this->getMockBuilder(\Magento\Framework\Pricing\Render\Amount::class)
  97. ->disableOriginalConstructor()
  98. ->setMethods(['getSaleableItem', 'getDisplayValue', 'getAmount'])
  99. ->getMock();
  100. $amountRender->expects($this->any())
  101. ->method('getDisplayValue')
  102. ->will($this->returnValue($displayValue));
  103. $this->weeeHelperMock->expects($this->any())->method('typeOfDisplay')->will($this->returnValue($typeOfDisplay));
  104. /** @var \Magento\Framework\Pricing\Amount\Base $baseAmount */
  105. $baseAmount = $this->getMockBuilder(\Magento\Framework\Pricing\Amount\Base::class)
  106. ->disableOriginalConstructor()
  107. ->setMethods(['getValue'])
  108. ->getMock();
  109. $amountRender->expects($this->any())
  110. ->method('getAmount')
  111. ->will($this->returnValue($baseAmount));
  112. $this->model->render($amountRender);
  113. $result = $this->model->getFinalAmount();
  114. $this->assertEquals($expectedValue, $result);
  115. }
  116. /**
  117. * Test for method showInclDescr
  118. *
  119. * @dataProvider showInclDescrDataProvider
  120. */
  121. public function testShowInclDescr($typeOfDisplay, $amount, $expectedResult)
  122. {
  123. /** @var \Magento\Framework\Pricing\Render\Amount $amountRender */
  124. $amountRender = $this->getMockBuilder(\Magento\Framework\Pricing\Render\Amount::class)
  125. ->disableOriginalConstructor()
  126. ->setMethods(['getSaleableItem', 'getDisplayValue', 'getAmount'])
  127. ->getMock();
  128. /** @var \Magento\Catalog\Model\Product $saleable */
  129. $saleable = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
  130. ->disableOriginalConstructor()
  131. ->setMethods(['__wakeup'])
  132. ->getMock();
  133. /** @var \Magento\Framework\Pricing\Amount\Base $baseAmount */
  134. $baseAmount = $this->getMockBuilder(\Magento\Framework\Pricing\Amount\Base::class)
  135. ->disableOriginalConstructor()
  136. ->setMethods(['getValue'])
  137. ->getMock();
  138. $baseAmount->expects($this->any())
  139. ->method('getValue')
  140. ->will($this->returnValue($amount));
  141. $amountRender->expects($this->any())
  142. ->method('getAmount')
  143. ->will($this->returnValue($baseAmount));
  144. $callback = function ($argument) use ($typeOfDisplay) {
  145. if (is_array($argument)) {
  146. return in_array($typeOfDisplay, $argument);
  147. } else {
  148. return $argument == $typeOfDisplay;
  149. }
  150. };
  151. $this->weeeHelperMock->expects($this->any())->method('typeOfDisplay')->will($this->returnCallback($callback));
  152. $this->weeeHelperMock->expects($this->any())->method('getAmountExclTax')->will($this->returnValue($amount));
  153. $amountRender->expects($this->any())->method('getSaleableItem')->will($this->returnValue($saleable));
  154. $this->model->render($amountRender);
  155. $result = $this->model->showInclDescr();
  156. $this->assertEquals($expectedResult, $result);
  157. }
  158. /**
  159. * Data provider for testShowInclDescr
  160. *
  161. * @return array
  162. */
  163. public function showInclDescrDataProvider()
  164. {
  165. return [
  166. [\Magento\Weee\Model\Tax::DISPLAY_INCL, 1.23, false],
  167. [\Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, 1.23, true],
  168. [\Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL, 1.23, false],
  169. [\Magento\Weee\Model\Tax::DISPLAY_EXCL, 1.23, false],
  170. [4, 1.23, false],
  171. [\Magento\Weee\Model\Tax::DISPLAY_INCL, 0, false],
  172. [\Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, 0, false],
  173. [\Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL, 0, false],
  174. [\Magento\Weee\Model\Tax::DISPLAY_EXCL, 0, false],
  175. [4, 0, false],
  176. ];
  177. }
  178. /**
  179. * Test method for showExclDescrIncl
  180. *
  181. * @param int $typeOfDisplay
  182. * @param float $amount
  183. * @param bool $expectedResult
  184. * @dataProvider showExclDescrInclDataProvider
  185. */
  186. public function testShowExclDescrIncl($typeOfDisplay, $amount, $expectedResult)
  187. {
  188. /** @var \Magento\Framework\Pricing\Render\Amount $amountRender */
  189. $amountRender = $this->getMockBuilder(\Magento\Framework\Pricing\Render\Amount::class)
  190. ->disableOriginalConstructor()
  191. ->setMethods(['getSaleableItem', 'getDisplayValue', 'getAmount'])
  192. ->getMock();
  193. /** @var \Magento\Catalog\Model\Product $saleable */
  194. $saleable = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
  195. ->disableOriginalConstructor()
  196. ->setMethods(['__wakeup'])
  197. ->getMock();
  198. /** @var \Magento\Framework\Pricing\Amount\Base $baseAmount */
  199. $baseAmount = $this->getMockBuilder(\Magento\Framework\Pricing\Amount\Base::class)
  200. ->disableOriginalConstructor()
  201. ->setMethods(['getValue'])
  202. ->getMock();
  203. $baseAmount->expects($this->any())
  204. ->method('getValue')
  205. ->will($this->returnValue($amount));
  206. $amountRender->expects($this->any())
  207. ->method('getAmount')
  208. ->will($this->returnValue($baseAmount));
  209. $callback = function ($argument) use ($typeOfDisplay) {
  210. if (is_array($argument)) {
  211. return in_array($typeOfDisplay, $argument);
  212. } else {
  213. return $argument == $typeOfDisplay;
  214. }
  215. };
  216. $this->weeeHelperMock->expects($this->any())->method('typeOfDisplay')->will($this->returnCallback($callback));
  217. $this->weeeHelperMock->expects($this->any())->method('getAmountExclTax')->will($this->returnValue($amount));
  218. $amountRender->expects($this->any())->method('getSaleableItem')->will($this->returnValue($saleable));
  219. $this->model->render($amountRender);
  220. $result = $this->model->showExclDescrIncl();
  221. $this->assertEquals($expectedResult, $result);
  222. }
  223. /**
  224. * Data provider for testShowExclDescrIncl
  225. *
  226. * @return array
  227. */
  228. public function showExclDescrInclDataProvider()
  229. {
  230. return [
  231. [\Magento\Weee\Model\Tax::DISPLAY_INCL, 1.23, false],
  232. [\Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, 1.23, false],
  233. [\Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL, 1.23, true],
  234. [\Magento\Weee\Model\Tax::DISPLAY_EXCL, 1.23, false],
  235. [4, 1.23, false],
  236. [\Magento\Weee\Model\Tax::DISPLAY_INCL, 0, false],
  237. [\Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, 0, false],
  238. [\Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL, 0, false],
  239. [\Magento\Weee\Model\Tax::DISPLAY_EXCL, 0, false],
  240. [4, 0, false],
  241. ];
  242. }
  243. /**
  244. * Test for method getWeeeTaxAttributes
  245. *
  246. * @param int $typeOfDisplay
  247. * @param array $attributes
  248. * @param array $expectedResult
  249. * @dataProvider getWeeeTaxAttributesDataProvider
  250. */
  251. public function testGetWeeeTaxAttributes($typeOfDisplay, $attributes, $expectedResult)
  252. {
  253. /** @var \Magento\Framework\Pricing\Render\Amount $amountRender */
  254. $amountRender = $this->getMockBuilder(\Magento\Framework\Pricing\Render\Amount::class)
  255. ->disableOriginalConstructor()
  256. ->setMethods(['getSaleableItem', 'getDisplayValue', 'getAmount'])
  257. ->getMock();
  258. /** @var \Magento\Catalog\Model\Product $saleable */
  259. $saleable = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
  260. ->disableOriginalConstructor()
  261. ->setMethods(['__wakeup'])
  262. ->getMock();
  263. /** @var \Magento\Framework\Pricing\Amount\Base $baseAmount */
  264. $baseAmount = $this->getMockBuilder(\Magento\Framework\Pricing\Amount\Base::class)
  265. ->disableOriginalConstructor()
  266. ->setMethods(['getValue'])
  267. ->getMock();
  268. $amountRender->expects($this->any())
  269. ->method('getAmount')
  270. ->will($this->returnValue($baseAmount));
  271. $callback = function ($argument) use ($typeOfDisplay) {
  272. if (is_array($argument)) {
  273. return in_array($typeOfDisplay, $argument);
  274. } else {
  275. return $argument == $typeOfDisplay;
  276. }
  277. };
  278. $this->weeeHelperMock->expects($this->any())->method('typeOfDisplay')->will($this->returnCallback($callback));
  279. $this->weeeHelperMock->expects($this->any())
  280. ->method('getProductWeeeAttributesForDisplay')
  281. ->will($this->returnValue($attributes));
  282. $amountRender->expects($this->any())->method('getSaleableItem')->will($this->returnValue($saleable));
  283. $this->model->render($amountRender);
  284. $result = $this->model->getWeeeTaxAttributes();
  285. $this->assertEquals($expectedResult, $result);
  286. }
  287. /**
  288. * Data provider for testGetWeeeTaxAttributes
  289. *
  290. * @return array
  291. */
  292. public function getWeeeTaxAttributesDataProvider()
  293. {
  294. return [
  295. [\Magento\Weee\Model\Tax::DISPLAY_INCL, [1, 2, 3], []],
  296. [\Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR, [1, 2, 3], [1, 2, 3]],
  297. [\Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL, [1, 2, 3], [1, 2, 3]],
  298. [\Magento\Weee\Model\Tax::DISPLAY_EXCL, [1, 2, 3], []],
  299. [4, [1, 2, 3], []],
  300. ];
  301. }
  302. /**
  303. * Test for method renderWeeeTaxAttribute
  304. *
  305. * @param \Magento\Framework\DataObject $attribute
  306. * @param string $expectedResult
  307. * @dataProvider renderWeeeTaxAttributeAmountDataProvider
  308. */
  309. public function testRenderWeeeTaxAttributeAmount($attribute, $expectedResult)
  310. {
  311. $this->priceCurrencyMock->expects($this->any())->method('convertAndFormat')->will($this->returnArgument(0));
  312. $result = $this->model->renderWeeeTaxAttribute($attribute);
  313. $this->assertEquals($expectedResult, $result);
  314. }
  315. /**
  316. * Data provider for testRenderWeeeTaxAttributeAmount
  317. *
  318. * @return array
  319. */
  320. public function renderWeeeTaxAttributeAmountDataProvider()
  321. {
  322. return [
  323. [new \Magento\Framework\DataObject(['amount' => 51]), 51],
  324. [new \Magento\Framework\DataObject(['amount' => false]), false],
  325. ];
  326. }
  327. /**
  328. * Test for method renderWeeeTaxAttributeName
  329. *
  330. * @param \Magento\Framework\DataObject $attribute
  331. * @param string $expectedResult
  332. * @dataProvider renderWeeeTaxAttributeNameDataProvider
  333. */
  334. public function testRenderWeeeTaxAttributeName($attribute, $expectedResult)
  335. {
  336. $this->priceCurrencyMock->expects($this->any())->method('convertAndFormat')->will($this->returnArgument(0));
  337. $result = $this->model->renderWeeeTaxAttributeName($attribute);
  338. $this->assertEquals($expectedResult, $result);
  339. }
  340. /**
  341. * Data provider for testRenderWeeeTaxAttributeName
  342. *
  343. * @return array
  344. */
  345. public function renderWeeeTaxAttributeNameDataProvider()
  346. {
  347. return [
  348. [new \Magento\Framework\DataObject(['name' => 51]), 51],
  349. [new \Magento\Framework\DataObject(['name' => false]), false],
  350. ];
  351. }
  352. /**
  353. * Test for method renderWeeeTaxAttributeWithTax
  354. *
  355. * @param \Magento\Framework\DataObject $attribute
  356. * @param string $expectedResult
  357. * @dataProvider renderWeeeTaxAttributeAmountWithTaxDataProvider
  358. */
  359. public function testRenderWeeeTaxAttributeWithTax($attribute, $expectedResult)
  360. {
  361. $this->priceCurrencyMock->expects($this->any())->method('convertAndFormat')->will($this->returnArgument(0));
  362. $result = $this->model->renderWeeeTaxAttributeWithTax($attribute);
  363. $this->assertEquals($expectedResult, $result);
  364. }
  365. /**
  366. * Data provider for testRenderWeeeTaxAttributeAmount
  367. *
  368. * @return array
  369. */
  370. public function renderWeeeTaxAttributeAmountWithTaxDataProvider()
  371. {
  372. return [
  373. [new \Magento\Framework\DataObject(['amount_excl_tax' => 50, 'tax_amount' => 5]), 55],
  374. [new \Magento\Framework\DataObject(['amount_excl_tax' => false]), false],
  375. ];
  376. }
  377. }