16 class DataTest extends \PHPUnit\Framework\TestCase
37 $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
39 $this->orderTaxManagementMock = $this->getMockBuilder(\
Magento\Tax\Api\OrderTaxManagementInterface::class)
40 ->disableOriginalConstructor()
42 $this->priceCurrencyMock = $this->getMockBuilder(\
Magento\Framework\Pricing\PriceCurrencyInterface::class)
43 ->disableOriginalConstructor()
45 $this->taxConfigMock = $this->getMockBuilder(\
Magento\Tax\Model\Config::class)
46 ->disableOriginalConstructor()
48 $this->serializer = $this->getMockBuilder(\
Magento\Framework\Serialize\Serializer\Json::class)
49 ->disableOriginalConstructor()
51 $this->serializer->expects($this->any())
55 return json_encode(
$value);
59 $this->serializer->expects($this->any())
60 ->method(
'unserialize')
63 return json_decode(
$value,
true);
67 \
Magento\Tax\Helper\Data::class,
69 'orderTaxManagement' => $this->orderTaxManagementMock,
70 'priceCurrency' => $this->priceCurrencyMock,
71 'taxConfig' => $this->taxConfigMock,
72 'serializer' => $this->serializer
80 $this->assertEquals([], $this->helper->getCalculatedTaxes(
$source));
86 $itemCode =
'test_code';
89 $itemTitle =
'Test title';
92 $expectedAmount = $itemAmount + 1;
93 $expectedBaseAmount = $itemBaseAmount + 1;
95 $orderDetailsItem = $this->getMockBuilder(\
Magento\Tax\Api\Data\OrderTaxDetailsAppliedTaxInterface::class)
96 ->disableOriginalConstructor()
98 $orderDetailsItem->expects($this->once())
100 ->willReturn($itemCode);
101 $orderDetailsItem->expects($this->once())
102 ->method(
'getAmount')
103 ->willReturn($itemAmount);
104 $orderDetailsItem->expects($this->once())
105 ->method(
'getBaseAmount')
106 ->willReturn($itemBaseAmount);
107 $orderDetailsItem->expects($this->once())
109 ->willReturn($itemTitle);
110 $orderDetailsItem->expects($this->once())
111 ->method(
'getPercent')
112 ->willReturn($itemPercent);
115 [$itemAmount, $expectedAmount],
116 [$itemBaseAmount, $expectedBaseAmount],
118 $this->priceCurrencyMock->expects($this->exactly(2))
120 ->will($this->returnValueMap($roundValues));
122 $appliedTaxes = [$orderDetailsItem];
124 $orderDetails = $this->getMockBuilder(\
Magento\Tax\Api\Data\OrderTaxDetailsInterface::class)
125 ->disableOriginalConstructor()
127 $orderDetails->expects($this->once())
128 ->method(
'getAppliedTaxes')
129 ->willReturn($appliedTaxes);
130 $this->orderTaxManagementMock->expects($this->once())
131 ->method(
'getOrderTaxDetails')
133 ->willReturn($orderDetails);
135 $orderMock = $this->getMockBuilder(\
Magento\Sales\Model\Order::class)
136 ->disableOriginalConstructor()
138 $orderMock->expects($this->once())
140 ->willReturn($orderId);
142 $result = $this->helper->getCalculatedTaxes($orderMock);
143 $this->assertCount(1,
$result);
144 $this->assertEquals($expectedAmount,
$result[0][
'tax_amount']);
145 $this->assertEquals($expectedBaseAmount,
$result[0][
'base_tax_amount']);
146 $this->assertEquals($itemTitle,
$result[0][
'title']);
147 $this->assertEquals($itemPercent,
$result[0][
'percent']);
159 $orderTaxItemDetailsMock = $this->getMockBuilder(\
Magento\Tax\Api\Data\OrderTaxDetailsInterface::class)
162 foreach ($inputArray[
'items'] as $orderTaxDetailsItemData) {
163 $itemId = isset($orderTaxDetailsItemData[
'item_id']) ? $orderTaxDetailsItemData[
'item_id'] :
null;
164 $associatedItemId = isset($orderTaxDetailsItemData[
'associated_item_id'])
165 ? $orderTaxDetailsItemData[
'associated_item_id']
167 $itemType = isset($orderTaxDetailsItemData[
'type']) ? $orderTaxDetailsItemData[
'type'] :
null;
168 $appliedTaxesData = $orderTaxDetailsItemData[
'applied_taxes'];
169 $appliedTaxesMocks = [];
170 foreach ($appliedTaxesData as $appliedTaxData) {
171 $appliedTaxesMock = $this->getMockBuilder(
172 \
Magento\Tax\Api\Data\OrderTaxDetailsAppliedTaxInterface::class
174 $appliedTaxesMock->expects($this->any())
175 ->method(
'getAmount')
176 ->will($this->returnValue($appliedTaxData[
'amount']));
177 $appliedTaxesMock->expects($this->any())
178 ->method(
'getBaseAmount')
179 ->will($this->returnValue($appliedTaxData[
'base_amount']));
180 $appliedTaxesMock->expects($this->any())
182 ->will($this->returnValue($appliedTaxData[
'code']));
183 $appliedTaxesMock->expects($this->any())
185 ->will($this->returnValue($appliedTaxData[
'title']));
186 $appliedTaxesMock->expects($this->any())
187 ->method(
'getPercent')
188 ->will($this->returnValue($appliedTaxData[
'percent']));
189 $appliedTaxesMocks[] = $appliedTaxesMock;
191 $orderTaxDetailsItemMock = $this->getMockBuilder(\
Magento\Tax\Api\Data\OrderTaxDetailsItemInterface::class)
193 $orderTaxDetailsItemMock->expects($this->any())
194 ->method(
'getItemId')
195 ->will($this->returnValue($itemId));
196 $orderTaxDetailsItemMock->expects($this->any())
197 ->method(
'getAssociatedItemId')
198 ->will($this->returnValue($associatedItemId));
199 $orderTaxDetailsItemMock->expects($this->any())
201 ->will($this->returnValue($itemType));
202 $orderTaxDetailsItemMock->expects($this->any())
203 ->method(
'getAppliedTaxes')
204 ->will($this->returnValue($appliedTaxesMocks));
206 $itemMocks[] = $orderTaxDetailsItemMock;
208 $orderTaxItemDetailsMock->expects($this->any())
210 ->will($this->returnValue($itemMocks));
212 return $orderTaxItemDetailsMock;
218 public function testGetCalculatedTaxesForOrderItems($orderData, $invoiceData, $expectedResults)
220 $orderId = $orderData[
'order_id'];
221 $orderShippingTaxAmount = isset($orderData[
'shipping_tax_amount']) ? $orderData[
'shipping_tax_amount'] : 0;
222 $orderTaxDetails = $orderData[
'order_tax_details'];
225 $orderMock = $this->getMockBuilder(\
Magento\Sales\Model\Order::class)
226 ->disableOriginalConstructor()
228 $orderMock->expects($this->once())
230 ->willReturn($orderId);
231 $orderMock->expects($this->once())
232 ->method(
'getShippingTaxAmount')
233 ->willReturn($orderShippingTaxAmount);
236 $this->orderTaxManagementMock->expects($this->any())
237 ->method(
'getOrderTaxDetails')
239 ->will($this->returnValue($orderTaxDetailsMock));
241 $invoiceShippingTaxAmount =
242 isset($invoiceData[
'shipping_tax_amount']) ? $invoiceData[
'shipping_tax_amount'] : 0;
243 $invoiceItems = $invoiceData[
'invoice_items'];
245 $source = $this->getMockBuilder(\
Magento\Sales\Model\Order\Invoice::class)
246 ->disableOriginalConstructor()
248 $source->expects($this->once())
250 ->willReturn($orderMock);
251 $source->expects($this->once())
252 ->method(
'getShippingTaxAmount')
253 ->willReturn($invoiceShippingTaxAmount);
254 $source->expects($this->once())
256 ->willReturn($invoiceItems);
258 $this->priceCurrencyMock->expects($this->any())
261 $this->returnCallback(
263 return round($arg, 2);
270 $expectedTax = $expectedResults[
$index];
272 $this->assertEquals($expectedTax[
$attr],
$value,
"The ".
$attr.
" of tax does not match");
285 'two_items_with_one_zero_tax' => [
288 'shipping_tax_amount' => 0,
289 'order_tax_details' => [
296 'base_amount' => 5.0,
298 'title' =>
'US-CA-Sales-Tax',
313 'tax_amount' => 5.00,
316 'tax_amount' => 2.50,
332 'expected_results' => [
334 'title' =>
'US-CA-Sales-Tax',
337 'base_tax_amount' => 2.5,
342 'item_with_weee_tax_partial_invoice' => [
345 'shipping_tax_amount' => 0,
346 'order_tax_details' => [
353 'base_amount' => 5.0,
355 'title' =>
'US-CA-Sales-Tax',
361 'associated_item_id' => 1,
366 'base_amount' => 3.0,
368 'title' =>
'US-CA-Sales-Tax',
383 'tax_amount' => 5.00,
388 'tax_ratio' => json_encode([
'weee' => 0.5]),
393 'expected_results' => [
395 'title' =>
'US-CA-Sales-Tax',
398 'base_tax_amount' => 6.5,
404 'one_item_with_both_shipping_and_product_taxes' => [
407 'shipping_tax_amount' => 2,
408 'order_tax_details' => [
412 'type' =>
'shipping',
416 'base_amount' => 2.0,
417 'code' =>
'US-CA-Ship',
418 'title' =>
'US-CA-Sales-Tax-Ship',
428 'base_amount' => 5.0,
430 'title' =>
'US-CA-Sales-Tax',
439 'shipping_tax_amount' => 2,
446 'tax_amount' => 5.00,
449 'tax_amount' => 5.00,
455 'expected_results' => [
457 'title' =>
'US-CA-Sales-Tax',
459 'tax_amount' => 5.00,
460 'base_tax_amount' => 5.00,
463 'title' =>
'US-CA-Sales-Tax-Ship',
465 'tax_amount' => 2.00,
466 'base_tax_amount' => 2.00,
487 $isCrossBorderTradeEnabled,
488 $displayPriceIncludingTax
491 $this->taxConfigMock->expects($this->at(0))
492 ->method(
'getPriceDisplayType')
495 $this->taxConfigMock->expects($this->at(0))
496 ->method(
'getPriceDisplayType')
499 $this->taxConfigMock->expects($this->any())
500 ->method(
'priceIncludesTax')
501 ->willReturn($priceIncludesTax);
503 $this->taxConfigMock->expects($this->any())
504 ->method(
'crossBorderTradeEnabled')
505 ->willReturn($isCrossBorderTradeEnabled);
507 if ($displayPriceIncludingTax ==
true) {
508 $this->taxConfigMock->expects($this->at(3))
509 ->method(
'getPriceDisplayType')
512 $this->taxConfigMock->expects($this->at(2))
513 ->method(
'getPriceDisplayType')
518 $this->assertSame($expected, $this->helper->isCatalogPriceDisplayAffectedByTax(
null));
527 [true ,
true,
false,
false,
false],
528 [true ,
false,
true,
true,
false],
529 [true ,
false,
true,
false,
true],
530 [
false ,
false,
true,
true,
true],
531 [true ,
false,
false,
true,
true],
532 [
false ,
false,
false,
true,
false]
testIsCatalogPriceDisplayAffectedByTax( $expected, $displayBothPrices, $priceIncludesTax, $isCrossBorderTradeEnabled, $displayPriceIncludingTax)
dataProviderIsCatalogPriceDisplayAffectedByTax()
getCalculatedTaxesForOrderItemsDataProvider()
testGetCalculatedTaxesEmptySource()
mapOrderTaxItemDetail($inputArray)
testGetCalculatedTaxesForOrder()