Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
RowBaseAndTotalBaseCalculatorTestCase.php
Go to the documentation of this file.
1 <?php
8 
12 
16 class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit\Framework\TestCase
17 {
18  const STORE_ID = 2300;
19  const QUANTITY = 1;
20  const UNIT_PRICE = 500;
21  const RATE = 10;
22  const STORE_RATE = 11;
23 
24  const UNIT_PRICE_INCL_TAX = 495.49549549545;
26 
27  const CODE = 'CODE';
28  const TYPE = 'TYPE';
29 
30  const ONCE = 'once';
31  const MOCK_METHOD_NAME = 'mock_method_name';
32  const MOCK_VALUE = 'mock_value';
33  const WITH_ARGUMENT = 'with_argument';
34 
36  protected $objectManager;
37 
40 
43 
45  protected $mockConfig;
46 
48  protected $mockItem;
49 
52 
55 
57  protected $mockAppliedTax;
58 
60 
62  protected $appliedTaxRate;
63 
67  protected $taxDetailsItem;
68 
74  public function initMocks($isTaxIncluded)
75  {
76  $this->initMockItem($isTaxIncluded);
77  $this->initMockConfig();
78  $this->initMockCalculationTool($isTaxIncluded);
80  }
81 
82  protected function setUp()
83  {
84  $this->objectManager = new ObjectManager($this);
85  $this->taxItemDetailsDataObjectFactory = $this->createPartialMock(
86  \Magento\Tax\Api\Data\TaxDetailsItemInterfaceFactory::class,
87  ['create']
88  );
89  $this->taxDetailsItem = $this->objectManager->getObject(\Magento\Tax\Model\TaxDetails\ItemDetails::class);
90  $this->taxItemDetailsDataObjectFactory->expects($this->any())
91  ->method('create')
92  ->willReturn($this->taxDetailsItem);
93 
94  $this->mockCalculationTool = $this->getMockBuilder(\Magento\Tax\Model\Calculation::class)
95  ->disableOriginalConstructor()
96  ->setMethods(
97  ['__wakeup', 'round', 'getRate', 'getStoreRate', 'getRateRequest', 'getAppliedRates']
98  )
99  ->getMock();
100  $this->mockConfig = $this->getMockBuilder(\Magento\Tax\Model\Config::class)
101  ->disableOriginalConstructor()
102  ->getMock();
103 
104  $this->mockItem = $this->getMockBuilder(\Magento\Tax\Api\Data\QuoteDetailsItemInterface::class)->getMock();
105 
106  $this->appliedTaxDataObjectFactory = $this->createPartialMock(
107  \Magento\Tax\Api\Data\AppliedTaxInterfaceFactory::class,
108  ['create']
109  );
110 
111  $this->appliedTaxRateDataObjectFactory = $this->createPartialMock(
112  \Magento\Tax\Api\Data\AppliedTaxRateInterfaceFactory::class,
113  ['create']
114  );
115  $this->appliedTaxRate = $this->objectManager->getObject(\Magento\Tax\Model\TaxDetails\AppliedTaxRate::class);
116  $this->appliedTaxRateDataObjectFactory->expects($this->any())
117  ->method('create')
118  ->willReturn($this->appliedTaxRate);
119  $this->mockAppliedTax = $this->getMockBuilder(\Magento\Tax\Api\Data\AppliedTaxInterface::class)->getMock();
120 
121  $this->mockAppliedTax->expects($this->any())->method('getTaxRateKey')->will($this->returnValue('taxKey'));
122  $this->addressRateRequest = new \Magento\Framework\DataObject();
123  }
124 
130  public function calculate($calculator, $round = true)
131  {
132  return $calculator->calculate($this->mockItem, 1, $round);
133  }
134 
140  protected function initMockItem($isTaxIncluded)
141  {
142  $this->mockReturnValues(
143  $this->mockItem,
144  [
145  [
146  self::ONCE => false,
147  self::MOCK_METHOD_NAME => 'getDiscountAmount',
148  self::MOCK_VALUE => 1,
149  ],
150  [
151  self::ONCE => false,
152  self::MOCK_METHOD_NAME => 'getCode',
153  self::MOCK_VALUE => self::CODE
154  ],
155  [
156  self::ONCE => false,
157  self::MOCK_METHOD_NAME => 'getType',
158  self::MOCK_VALUE => self::TYPE
159  ],
160  [
161  self::ONCE => false,
162  self::MOCK_METHOD_NAME => 'getUnitPrice',
163  self::MOCK_VALUE => self::UNIT_PRICE
164  ],
165  [
166  self::ONCE => false,
167  self::MOCK_METHOD_NAME => 'getIsTaxIncluded',
168  self::MOCK_VALUE => $isTaxIncluded
169  ]
170  ]
171  );
172  }
173 
178  protected function initMockConfig()
179  {
180  $this->mockReturnValues(
181  $this->mockConfig,
182  [
183  [
184  self::ONCE => false,
185  self::MOCK_METHOD_NAME => 'applyTaxAfterDiscount',
186  self::MOCK_VALUE => true,
187  ]
188  ]
189  );
190  }
191 
197  protected function initMockCalculationTool($isTaxIncluded)
198  {
199  $mockValues = [
200  [
201  self::ONCE => false,
202  self::MOCK_METHOD_NAME => 'getRate',
203  self::MOCK_VALUE => self::RATE
204  ],
205  [
206  self::ONCE => false,
207  self::MOCK_METHOD_NAME => 'getAppliedRates',
208  self::MOCK_VALUE => [
209  [
210  'id' => 0,
211  'percent' => 1.4,
212  'rates' => [
213  [
214  'code' => 'sku_1',
215  'title' => 'title1',
216  'percent' => 1.1,
217  ],
218  ],
219  ],
220  ]
221  ],
222  ];
223 
224  if ($isTaxIncluded) {
225  $mockValues[] = [
226  self::ONCE => false,
227  self::MOCK_METHOD_NAME => 'getStoreRate',
228  self::MOCK_VALUE => self::STORE_RATE
229  ];
230  }
231 
232  $this->mockReturnValues(
233  $this->mockCalculationTool,
234  $mockValues
235  );
236  $this->mockCalculationTool->expects($this->atLeastOnce())
237  ->method('round')
238  ->willReturnCallback(
239  function ($price) {
240  return round($price, 2);
241  }
242  );
243  }
244 
250  {
251  $this->mockReturnValues(
252  $this->appliedTaxDataObjectFactory,
253  [
254  [
255  self::ONCE => false,
256  self::MOCK_METHOD_NAME => 'create',
257  self::MOCK_VALUE => $this->mockAppliedTax,
258  ]
259  ]
260  );
261  }
262 
267  private function mockReturnValues($mockObject, $mockMap)
268  {
269  foreach ($mockMap as $valueMap) {
270  if (isset($valueMap[self::WITH_ARGUMENT])) {
271  $mockObject->expects(
272  $valueMap[self::ONCE] == true ? $this->once() : $this->atLeastOnce()
273  )->method($valueMap[self::MOCK_METHOD_NAME])->with($valueMap[self::WITH_ARGUMENT])
274  ->will(
275  $this->returnValue($valueMap[self::MOCK_VALUE])
276  );
277  } else {
278  $mockObject->expects(
279  $valueMap[self::ONCE] == true ? $this->once() : $this->atLeastOnce()
280  )->method($valueMap[self::MOCK_METHOD_NAME])->withAnyParameters()
281  ->will(
282  $this->returnValue($valueMap[self::MOCK_VALUE])
283  );
284  }
285  }
286  }
287 }
$price