Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CommonTaxCollectorTest.php
Go to the documentation of this file.
1 <?php
8 
13 
17 class CommonTaxCollectorTest extends \PHPUnit\Framework\TestCase
18 {
22  private $commonTaxCollector;
23 
27  private $taxConfig;
28 
32  private $address;
33 
37  private $quote;
38 
42  private $store;
43 
48 
53 
58 
63 
64  protected function setUp()
65  {
66  $objectManager = new ObjectManager($this);
67 
68  $this->taxConfig = $this->getMockBuilder(\Magento\Tax\Model\Config::class)
69  ->disableOriginalConstructor()
70  ->setMethods(['getShippingTaxClass', 'shippingPriceIncludesTax'])
71  ->getMock();
72 
73  $this->store = $this->getMockBuilder(\Magento\Store\Model\Store::class)
74  ->disableOriginalConstructor()
75  ->setMethods(['__wakeup'])
76  ->getMock();
77 
78  $this->quote = $this->getMockBuilder(\Magento\Quote\Model\Quote::class)
79  ->disableOriginalConstructor()
80  ->setMethods(['__wakeup', 'getStore'])
81  ->getMock();
82 
83  $this->quote->expects($this->any())
84  ->method('getStore')
85  ->will($this->returnValue($this->store));
86 
87  $this->address = $this->getMockBuilder(\Magento\Quote\Model\Quote\Address::class)
88  ->disableOriginalConstructor()
89  ->getMock();
90 
91  $this->address->expects($this->any())
92  ->method('getQuote')
93  ->will($this->returnValue($this->quote));
94  $methods = ['create'];
95  $this->quoteDetailsItemDataObject = $objectManager->getObject(
96  \Magento\Tax\Model\Sales\Quote\ItemDetails::class
97  );
98  $this->taxClassKeyDataObject = $objectManager->getObject(\Magento\Tax\Model\TaxClass\Key::class);
99  $this->quoteDetailsItemDataObjectFactoryMock
100  = $this->createPartialMock(\Magento\Tax\Api\Data\QuoteDetailsItemInterfaceFactory::class, $methods);
101  $this->quoteDetailsItemDataObjectFactoryMock->expects($this->any())
102  ->method('create')
103  ->willReturn($this->quoteDetailsItemDataObject);
104  $this->taxClassKeyDataObjectFactoryMock =
105  $this->createPartialMock(\Magento\Tax\Api\Data\TaxClassKeyInterfaceFactory::class, $methods);
106  $this->taxClassKeyDataObjectFactoryMock->expects($this->any())
107  ->method('create')
108  ->willReturn($this->taxClassKeyDataObject);
109  $this->commonTaxCollector = $objectManager->getObject(
110  \Magento\Tax\Model\Sales\Total\Quote\CommonTaxCollector::class,
111  [
112  'taxConfig' => $this->taxConfig,
113  'quoteDetailsItemDataObjectFactory' => $this->quoteDetailsItemDataObjectFactoryMock,
114  'taxClassKeyDataObjectFactory' => $this->taxClassKeyDataObjectFactoryMock
115  ]
116  );
117  }
118 
126  public function testGetShippingDataObject(
127  array $addressData,
128  $useBaseCurrency,
129  $shippingTaxClass,
130  $shippingPriceInclTax
131  ) {
132  $shippingAssignmentMock = $this->createMock(\Magento\Quote\Api\Data\ShippingAssignmentInterface::class);
133  $methods = [
134  'getShippingDiscountAmount',
135  'getShippingTaxCalculationAmount',
136  'setShippingTaxCalculationAmount',
137  'getShippingAmount',
138  'setBaseShippingTaxCalculationAmount',
139  'getBaseShippingAmount',
140  'getBaseShippingDiscountAmount'
141  ];
142  $totalsMock = $this->createPartialMock(\Magento\Quote\Model\Quote\Address\Total::class, $methods);
143  $shippingMock = $this->createMock(\Magento\Quote\Api\Data\ShippingInterface::class);
144  $shippingAssignmentMock->expects($this->once())->method('getShipping')->willReturn($shippingMock);
145  $shippingMock->expects($this->once())->method('getAddress')->willReturn($this->address);
146  $baseShippingAmount = $addressData['base_shipping_amount'];
147  $shippingAmount = $addressData['shipping_amount'];
148  $totalsMock->expects($this->any())->method('getShippingTaxCalculationAmount')->willReturn($shippingAmount);
149  $this->taxConfig->expects($this->any())
150  ->method('getShippingTaxClass')
151  ->with($this->store)
152  ->will($this->returnValue($shippingTaxClass));
153  $this->taxConfig->expects($this->any())
154  ->method('shippingPriceIncludesTax')
155  ->with($this->store)
156  ->will($this->returnValue($shippingPriceInclTax));
157  $totalsMock
158  ->expects($this->atLeastOnce())
159  ->method('getShippingDiscountAmount')
160  ->willReturn($shippingAmount);
161  if ($shippingAmount) {
162  if ($useBaseCurrency && $shippingAmount != 0) {
163  $totalsMock
164  ->expects($this->once())
165  ->method('getBaseShippingDiscountAmount')
166  ->willReturn($baseShippingAmount);
167  $expectedDiscountAmount = $baseShippingAmount;
168  } else {
169  $totalsMock->expects($this->never())->method('getBaseShippingDiscountAmount');
170  $expectedDiscountAmount = $shippingAmount;
171  }
172  }
173  foreach ($addressData as $key => $value) {
174  $totalsMock->setData($key, $value);
175  }
176  $this->assertEquals(
177  $this->quoteDetailsItemDataObject,
178  $this->commonTaxCollector->getShippingDataObject($shippingAssignmentMock, $totalsMock, $useBaseCurrency)
179  );
180 
181  if ($shippingAmount) {
182  $this->assertEquals($expectedDiscountAmount, $this->quoteDetailsItemDataObject->getDiscountAmount());
183  }
184  }
185 
190  {
191  $data = [
192  'free_shipping' => [
193  'address' => [
194  'shipping_amount' => 0,
195  'base_shipping_amount' => 0,
196  ],
197  'use_base_currency' => false,
198  'shipping_tax_class' => 'shippingTaxClass',
199  'shippingPriceInclTax' => true,
200  ],
201  'none_zero_none_base' => [
202  'address' => [
203  'shipping_amount' => 10,
204  'base_shipping_amount' => 5,
205  ],
206  'use_base_currency' => false,
207  'shipping_tax_class' => 'shippingTaxClass',
208  'shippingPriceInclTax' => true,
209  ],
210  'none_zero_base' => [
211  'address' => [
212  'shipping_amount' => 10,
213  'base_shipping_amount' => 5,
214  ],
215  'use_base_currency' => true,
216  'shipping_tax_class' => 'shippingTaxClass',
217  'shippingPriceInclTax' => true,
218  ],
219  ];
220 
221  return $data;
222  }
223 }
$objectManager
Definition: bootstrap.php:17
$addressData
Definition: order.php:19
$methods
Definition: billing.phtml:71
$value
Definition: gender.phtml:16
testGetShippingDataObject(array $addressData, $useBaseCurrency, $shippingTaxClass, $shippingPriceInclTax)