Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
UnitBaseCalculatorTest.php
Go to the documentation of this file.
1 <?php
8 
10 
14 class UnitBaseCalculatorTest extends \PHPUnit\Framework\TestCase
15 {
16  const STORE_ID = 2300;
17  const QUANTITY = 1;
18  const UNIT_PRICE = 500;
19  const RATE = 10;
20  const STORE_RATE = 11;
21 
22  const CODE = 'CODE';
23  const TYPE = 'TYPE';
24  const ROW_TAX = 44.958682408681;
25  const ROW_TAX_ROUNDED = 44.95;
26  const PRICE_INCL_TAX = 495.4954954955;
27  const PRICE_INCL_TAX_ROUNDED = 495.50;
28 
31 
34 
36  protected $mockConfig;
37 
40 
42  protected $model;
43 
45 
49  protected $taxDetailsItem;
50 
54  protected $appliedTaxRate;
55 
56  protected function setUp()
57  {
59  $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
60  $this->taxDetailsItem = $objectManager->getObject(\Magento\Tax\Model\TaxDetails\ItemDetails::class);
61  $this->taxDetailsItemDataObjectFactoryMock =
62  $this->getMockBuilder(\Magento\Tax\Api\Data\TaxDetailsItemInterfaceFactory::class)
63  ->setMethods(['create'])
64  ->disableOriginalConstructor()
65  ->getMock();
66  $this->taxDetailsItemDataObjectFactoryMock->expects($this->any())
67  ->method('create')
68  ->willReturn($this->taxDetailsItem);
69 
70  $this->mockCalculationTool = $this->getMockBuilder(\Magento\Tax\Model\Calculation::class)
71  ->disableOriginalConstructor()
72  ->setMethods(['__wakeup', 'round', 'getRate', 'getStoreRate', 'getRateRequest', 'getAppliedRates'])
73  ->getMock();
74  $this->mockCalculationTool->expects($this->any())
75  ->method('round')
76  ->withAnyParameters()
77  ->willReturnCallback(
78  function ($price) {
79  return round($price, 2);
80  }
81  );
82  $this->mockConfig = $this->getMockBuilder(\Magento\Tax\Model\Config::class)
83  ->disableOriginalConstructor()
84  ->getMock();
85  $this->addressRateRequest = new \Magento\Framework\DataObject();
86 
87  $this->appliedTaxRate = $objectManager->getObject(\Magento\Tax\Model\TaxDetails\AppliedTaxRate::class);
88  $this->appliedTaxRateDataObjectFactoryMock = $this->createPartialMock(
89  \Magento\Tax\Api\Data\AppliedTaxRateInterfaceFactory::class,
90  ['create']
91  );
92  $this->appliedTaxRateDataObjectFactoryMock->expects($this->any())
93  ->method('create')
94  ->willReturn($this->appliedTaxRate);
95 
96  $appliedTaxDataObject = $objectManager->getObject(\Magento\Tax\Model\TaxDetails\AppliedTax::class);
97  $appliedTaxDataObjectFactoryMock = $this->createPartialMock(
98  \Magento\Tax\Api\Data\AppliedTaxInterfaceFactory::class,
99  ['create']
100  );
101  $appliedTaxDataObjectFactoryMock->expects($this->any())
102  ->method('create')
103  ->willReturn($appliedTaxDataObject);
104 
105  $arguments = [
106  'taxDetailsItemDataObjectFactory' => $this->taxDetailsItemDataObjectFactoryMock,
107  'calculationTool' => $this->mockCalculationTool,
108  'config' => $this->mockConfig,
109  'storeId' => self::STORE_ID,
110  'addressRateRequest' => $this->addressRateRequest,
111  'appliedRateDataObjectFactory' => $this->appliedTaxRateDataObjectFactoryMock,
112  'appliedTaxDataObjectFactory' => $appliedTaxDataObjectFactoryMock,
113  ];
114  $this->model = $objectManager->getObject(\Magento\Tax\Model\Calculation\UnitBaseCalculator::class, $arguments);
115  }
116 
117  public function testCalculateWithTaxInPrice()
118  {
119  $mockItem = $this->getMockItem();
120  $mockItem->expects($this->atLeastOnce())
121  ->method('getIsTaxIncluded')
122  ->will($this->returnValue(true));
123 
124  $this->mockConfig->expects($this->atLeastOnce())
125  ->method('crossBorderTradeEnabled')
126  ->will($this->returnValue(false));
127  $this->mockConfig->expects($this->atLeastOnce())
128  ->method('applyTaxAfterDiscount')
129  ->will($this->returnValue(true));
130 
131  $this->mockCalculationTool->expects($this->atLeastOnce())
132  ->method('getRate')
133  ->with($this->addressRateRequest)
134  ->will($this->returnValue(self::RATE));
135  $this->mockCalculationTool->expects($this->atLeastOnce())
136  ->method('getStoreRate')
137  ->with($this->addressRateRequest, self::STORE_ID)
138  ->will($this->returnValue(self::STORE_RATE));
139  $this->mockCalculationTool->expects($this->atLeastOnce())
140  ->method('getAppliedRates')
141  ->withAnyParameters()
142  ->will($this->returnValue([]));
143 
144  $this->assertSame($this->taxDetailsItem, $this->model->calculate($mockItem, self::QUANTITY));
145  $this->assertSame(self::CODE, $this->taxDetailsItem->getCode());
146  $this->assertSame(self::TYPE, $this->taxDetailsItem->getType());
147  $this->assertSame(self::ROW_TAX_ROUNDED, $this->taxDetailsItem->getRowTax());
148  $this->assertEquals(self::PRICE_INCL_TAX_ROUNDED, $this->taxDetailsItem->getPriceInclTax());
149 
150  $this->assertSame($this->taxDetailsItem, $this->model->calculate($mockItem, self::QUANTITY, false));
151  $this->assertSame(self::CODE, $this->taxDetailsItem->getCode());
152  $this->assertSame(self::TYPE, $this->taxDetailsItem->getType());
153  $this->assertSame(self::ROW_TAX, $this->taxDetailsItem->getRowTax());
154  $this->assertEquals(self::PRICE_INCL_TAX, $this->taxDetailsItem->getPriceInclTax());
155  }
156 
158  {
159  $mockItem = $this->getMockItem();
160  $mockItem->expects($this->once())
161  ->method('getIsTaxIncluded')
162  ->will($this->returnValue(false));
163 
164  $this->mockConfig->expects($this->once())
165  ->method('applyTaxAfterDiscount')
166  ->will($this->returnValue(true));
167 
168  $this->mockCalculationTool->expects($this->once())
169  ->method('getRate')
170  ->with($this->addressRateRequest)
171  ->will($this->returnValue(self::RATE));
172  $this->mockCalculationTool->expects($this->once())
173  ->method('getAppliedRates')
174  ->withAnyParameters()
175  ->will($this->returnValue([['id' => 0, 'percent' => 0, 'rates' => []]]));
176 
177  $this->assertSame($this->taxDetailsItem, $this->model->calculate($mockItem, self::QUANTITY));
178  $this->assertEquals(self::CODE, $this->taxDetailsItem->getCode());
179  $this->assertEquals(self::TYPE, $this->taxDetailsItem->getType());
180  $this->assertEquals(0.0, $this->taxDetailsItem->getRowTax());
181  }
182 
186  protected function getMockItem()
187  {
189  $mockItem = $this->getMockBuilder(\Magento\Tax\Api\Data\QuoteDetailsItemInterface::class)
190  ->disableOriginalConstructor()
191  ->getMock();
192  $mockItem->expects($this->atLeastOnce())
193  ->method('getDiscountAmount')
194  ->will($this->returnValue(1));
195  $mockItem->expects($this->atLeastOnce())
196  ->method('getCode')
197  ->will($this->returnValue(self::CODE));
198  $mockItem->expects($this->atLeastOnce())
199  ->method('getType')
200  ->will($this->returnValue(self::TYPE));
201  $mockItem->expects($this->atLeastOnce())
202  ->method('getUnitPrice')
203  ->will($this->returnValue(self::UNIT_PRICE));
204 
205  return $mockItem;
206  }
207 }
$objectManager
Definition: bootstrap.php:17
$price
$arguments