TaxManagementTest.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Tax\Test\Unit\Model\Sales\Order;
  7. use \Magento\Tax\Model\Sales\Order\TaxManagement;
  8. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  9. /**
  10. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  11. */
  12. class TaxManagementTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /**
  15. * @var TaxManagement
  16. */
  17. private $taxManagement;
  18. /**
  19. * @var \PHPUnit_Framework_MockObject_MockObject
  20. */
  21. private $orderMock;
  22. /**
  23. * @var \PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $taxItemResourceMock;
  26. /**
  27. * @var \Magento\Tax\Api\Data\OrderTaxDetailsAppliedTaxInterface
  28. */
  29. protected $appliedTaxDataObject;
  30. /**
  31. * @var \Magento\Tax\Model\Sales\Order\Details
  32. */
  33. protected $orderTaxDetailsDataObject;
  34. protected function setUp()
  35. {
  36. $this->orderMock = $this->createPartialMock(\Magento\Sales\Model\Order::class, ['load']);
  37. $methods = ['create'];
  38. $orderFactoryMock = $this->createPartialMock(\Magento\Sales\Model\OrderFactory::class, $methods);
  39. $orderFactoryMock->expects($this->atLeastOnce())
  40. ->method('create')
  41. ->will($this->returnValue($this->orderMock));
  42. $className = \Magento\Sales\Model\ResourceModel\Order\Tax\Item::class;
  43. $this->taxItemResourceMock = $this->createPartialMock($className, ['getTaxItemsByOrderId']);
  44. $className = \Magento\Sales\Model\ResourceModel\Order\Tax\ItemFactory::class;
  45. $taxItemFactoryMock = $this->createPartialMock($className, $methods, []);
  46. $taxItemFactoryMock->expects($this->once())
  47. ->method('create')
  48. ->willReturn($this->taxItemResourceMock);
  49. $objectManager = new ObjectManager($this);
  50. $this->appliedTaxDataObject = $objectManager->getObject(\Magento\Tax\Model\Sales\Order\Tax::class);
  51. $className = \Magento\Tax\Api\Data\OrderTaxDetailsAppliedTaxInterfaceFactory::class;
  52. $appliedTaxDataObjectFactoryMock = $this->createPartialMock($className, $methods);
  53. $appliedTaxDataObjectFactoryMock->expects($this->any())
  54. ->method('create')
  55. ->willReturn($this->appliedTaxDataObject);
  56. $itemDataObject = $objectManager->getObject(\Magento\Sales\Model\Order\Tax\Item::class);
  57. $className = \Magento\Tax\Api\Data\OrderTaxDetailsItemInterfaceFactory::class;
  58. $itemDataObjectFactoryMock = $this->createPartialMock($className, $methods);
  59. $itemDataObjectFactoryMock->expects($this->atLeastOnce())
  60. ->method('create')
  61. ->willReturn($itemDataObject);
  62. $this->orderTaxDetailsDataObject = $objectManager->getObject(\Magento\Tax\Model\Sales\Order\Details::class);
  63. $className = \Magento\Tax\Api\Data\OrderTaxDetailsInterfaceFactory::class;
  64. $orderTaxDetailsDataObjectFactoryMock = $this->createPartialMock($className, $methods);
  65. $orderTaxDetailsDataObjectFactoryMock->expects($this->any())
  66. ->method('create')
  67. ->willReturn($this->orderTaxDetailsDataObject);
  68. $this->taxManagement = $objectManager->getObject(
  69. \Magento\Tax\Model\Sales\Order\TaxManagement::class,
  70. [
  71. 'orderFactory' => $orderFactoryMock,
  72. 'orderItemTaxFactory' => $taxItemFactoryMock,
  73. 'orderTaxDetailsDataObjectFactory' => $orderTaxDetailsDataObjectFactoryMock,
  74. 'itemDataObjectFactory' => $itemDataObjectFactoryMock,
  75. 'appliedTaxDataObjectFactory' => $appliedTaxDataObjectFactoryMock
  76. ]
  77. );
  78. }
  79. /**
  80. * @param array $orderItemAppliedTaxes
  81. * @param array $expected
  82. * @return void
  83. * @dataProvider getOrderTaxDetailsDataProvider
  84. */
  85. public function testGetOrderTaxDetails($orderItemAppliedTaxes, $expected)
  86. {
  87. $orderId = 1;
  88. $this->orderMock->expects($this->once())
  89. ->method('load')
  90. ->with($orderId)
  91. ->will($this->returnSelf());
  92. $this->taxItemResourceMock->expects($this->once())
  93. ->method('getTaxItemsByOrderId')
  94. ->with($orderId)
  95. ->will($this->returnValue($orderItemAppliedTaxes));
  96. $this->assertEquals($this->orderTaxDetailsDataObject, $this->taxManagement->getOrderTaxDetails($orderId));
  97. $this->assertEquals($expected['code'], $this->appliedTaxDataObject->getCode());
  98. $this->assertEquals($expected['title'], $this->appliedTaxDataObject->getTitle());
  99. $this->assertEquals($expected['tax_percent'], $this->appliedTaxDataObject->getPercent());
  100. $this->assertEquals($expected['real_amount'], $this->appliedTaxDataObject->getAmount());
  101. $this->assertEquals($expected['real_base_amount'], $this->appliedTaxDataObject->getBaseAmount());
  102. }
  103. /**
  104. * @return array
  105. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  106. */
  107. public function getOrderTaxDetailsDataProvider()
  108. {
  109. $data = [
  110. 'one_item' => [
  111. 'orderItemAppliedTaxes' => [
  112. [
  113. 'item_id' => 53,
  114. 'taxable_item_type' => 'product',
  115. 'associated_item_id' => null,
  116. 'code' => 'US-CA-*-Rate 1',
  117. 'title' => 'US-CA-*-Rate 1',
  118. 'tax_percent' => '8.25',
  119. 'real_amount' => '6.1889',
  120. 'real_base_amount' => '12.3779',
  121. ],
  122. ],
  123. 'expected' => [
  124. 'code' => 'US-CA-*-Rate 1',
  125. 'title' => 'US-CA-*-Rate 1',
  126. 'tax_percent' => '8.25',
  127. 'real_amount' => '6.1889',
  128. 'real_base_amount' => '12.3779',
  129. ],
  130. ],
  131. 'weee_item' => [
  132. 'orderItemAppliedTaxes' => [
  133. [
  134. 'item_id' => null,
  135. 'taxable_item_type' => 'weee',
  136. 'associated_item_id' => 54,
  137. 'code' => 'SanJose City Tax',
  138. 'title' => 'SanJose City Tax',
  139. 'tax_percent' => '6',
  140. 'real_amount' => '0.9011',
  141. 'real_base_amount' => '1.7979',
  142. ],
  143. ],
  144. 'expected' => [
  145. 'code' => 'SanJose City Tax',
  146. 'title' => 'SanJose City Tax',
  147. 'tax_percent' => '6',
  148. 'real_amount' => '0.9011',
  149. 'real_base_amount' => '1.7979',
  150. ],
  151. ],
  152. 'shipping' => [
  153. 'orderItemAppliedTaxes' => [
  154. [
  155. 'item_id' => null,
  156. 'taxable_item_type' => 'shipping',
  157. 'associated_item_id' => null,
  158. 'code' => 'Shipping',
  159. 'title' => 'Shipping',
  160. 'tax_percent' => '21',
  161. 'real_amount' => '2.6',
  162. 'real_base_amount' => '5.21',
  163. ],
  164. ],
  165. 'expected' => [
  166. 'code' => 'Shipping',
  167. 'title' => 'Shipping',
  168. 'tax_percent' => '21',
  169. 'real_amount' => '2.6',
  170. 'real_base_amount' => '5.21',
  171. ],
  172. ],
  173. 'canadian_weee' => [
  174. 'orderItemAppliedTaxes' => [
  175. [
  176. 'item_id' => null,
  177. 'taxable_item_type' => 'weee',
  178. 'associated_item_id' => 69,
  179. 'code' => 'GST',
  180. 'title' => 'GST',
  181. 'tax_percent' => '5',
  182. 'real_amount' => '2.10',
  183. 'real_base_amount' => '4.10',
  184. ],
  185. [
  186. 'item_id' => null,
  187. 'taxable_item_type' => 'weee',
  188. 'associated_item_id' => 69,
  189. 'code' => 'GST',
  190. 'title' => 'GST',
  191. 'tax_percent' => '5',
  192. 'real_amount' => '1.15',
  193. 'real_base_amount' => '3.10',
  194. ],
  195. ],
  196. 'expected' => [
  197. 'code' => 'GST',
  198. 'title' => 'GST',
  199. 'tax_percent' => '5',
  200. 'real_amount' => '3.25',
  201. 'real_base_amount' => '7.20',
  202. ],
  203. ],
  204. ];
  205. return $data;
  206. }
  207. }