Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CartTest.php
Go to the documentation of this file.
1 <?php
7 
9 
10 class CartTest extends \PHPUnit\Framework\TestCase
11 {
15  protected $_model;
16 
20  protected $_validItem;
21 
25  protected $_salesModel;
26 
32  public function __construct($name = null, array $data = [], $dataName = '')
33  {
34  parent::__construct($name, $data, $dataName);
35  $this->_validItem = new \Magento\Framework\DataObject(
36  [
37  'parent_item' => null,
38  'price' => 2.0,
39  'qty' => 3,
40  'name' => 'valid item',
41  'original_item' => new \Magento\Framework\DataObject(['base_row_total' => 6.0]),
42  ]
43  );
44  }
45 
46  protected function setUp()
47  {
48  $this->_salesModel = $this->getMockForAbstractClass(
49  \Magento\Payment\Model\Cart\SalesModel\SalesModelInterface::class
50  );
51  $factoryMock = $this->createPartialMock(\Magento\Payment\Model\Cart\SalesModel\Factory::class, ['create']);
52  $factoryMock->expects(
53  $this->once()
54  )->method(
55  'create'
56  )->with(
57  'sales model'
58  )->will(
59  $this->returnValue($this->_salesModel)
60  );
61  $eventManagerMock = $this->getMockForAbstractClass(\Magento\Framework\Event\ManagerInterface::class);
62 
63  $this->_model = new \Magento\Paypal\Model\Cart($factoryMock, $eventManagerMock, 'sales model');
64  }
65 
70  public function testInvalidGetAllItems($items)
71  {
72  $taxContainer = new \Magento\Framework\DataObject(
73  ['base_discount_tax_compensation_amount' => 0.2, 'base_shipping_discount_tax_compensation_amount' => 0.1]
74  );
75  $this->_salesModel->expects($this->once())->method('getTaxContainer')->will($this->returnValue($taxContainer));
76  $this->_salesModel->expects($this->once())->method('getAllItems')->will($this->returnValue($items));
77  $this->_salesModel->expects($this->once())->method('getBaseSubtotal')->will($this->returnValue(2.1));
78  $this->_salesModel->expects($this->once())->method('getBaseTaxAmount')->will($this->returnValue(0.1));
79  $this->_salesModel->expects($this->once())->method('getBaseShippingAmount')->will($this->returnValue(1.1));
80  $this->_salesModel->expects($this->once())->method('getBaseDiscountAmount')->will($this->returnValue(0.3));
81  $this->assertEmpty($this->_model->getAllItems());
82  $this->assertEquals(2.1, $this->_model->getSubtotal());
83  $this->assertEquals(0.1 + 0.2 + 0.1, $this->_model->getTax());
84  $this->assertEquals(1.1, $this->_model->getShipping());
85  $this->assertEquals(0.3, $this->_model->getDiscount());
86  }
87 
92  {
93  return [
94  [[]],
95  [
96  [
97  new \Magento\Framework\DataObject(
98  [
99  'parent_item' => new \Magento\Framework\DataObject(),
100  'price' => 2.0,
101  'qty' => 3,
102  'name' => 'item 1',
103  ]
104  ),
105  ]
106  ],
107  [
108  [
110  new \Magento\Framework\DataObject(
111  [
112  'price' => 2.0,
113  'qty' => 3,
114  'name' => 'item 2',
115  'original_item' => new \Magento\Framework\DataObject(['base_row_total' => 6.01]),
116  ]
117  ),
118  ]
119  ],
120  [
121  [
123  new \Magento\Framework\DataObject(
124  [
125  'price' => sqrt(2),
126  'qty' => sqrt(2),
127  'name' => 'item 3',
128  'original_item' => new \Magento\Framework\DataObject(['base_row_total' => 2]),
129  ]
130  ),
131  ]
132  ]
133  ];
134  }
135 
141  public function testInvalidTotalsGetAllItems($values, $transferDiscount)
142  {
143  $expectedSubtotal = $this->_prepareInvalidModelData($values, $transferDiscount);
144  $this->assertEmpty($this->_model->getAllItems());
145  $this->assertEquals($expectedSubtotal, $this->_model->getSubtotal());
146  $this->assertEquals(
147  $values['base_tax_amount'] +
148  $values['base_discount_tax_compensation_amount'] +
149  $values['base_shipping_discount_tax_compensation_amount'],
150  $this->_model->getTax()
151  );
152  $this->assertEquals($values['base_shipping_amount'], $this->_model->getShipping());
153  $this->assertEquals($transferDiscount ? 0.0 : $values['base_discount_amount'], $this->_model->getDiscount());
154  }
155 
160  {
161  return [
162  [
163  [
164  'base_discount_tax_compensation_amount' => 0,
165  'base_shipping_discount_tax_compensation_amount' => 0,
166  'base_subtotal' => 0,
167  'base_tax_amount' => 0,
168  'base_shipping_amount' => 0,
169  'base_discount_amount' => 6.1,
170  'base_grand_total' => 0,
171  ],
172  false,
173  ],
174  [
175  [
176  'base_discount_tax_compensation_amount' => 1,
177  'base_shipping_discount_tax_compensation_amount' => 2,
178  'base_subtotal' => 3,
179  'base_tax_amount' => 4,
180  'base_shipping_amount' => 5,
181  'base_discount_amount' => 100,
182  'base_grand_total' => 5.5,
183  ],
184  true
185  ]
186  ];
187  }
188 
189  public function testGetAllItems()
190  {
191  $totals = $this->_prepareValidModelData();
192  $this->assertEquals(
193  [
194  new \Magento\Framework\DataObject(
195  [
196  'name' => $this->_validItem->getName(),
197  'qty' => $this->_validItem->getQty(),
198  'amount' => $this->_validItem->getPrice(),
199  ]
200  ),
201  ],
202  $this->_model->getAllItems()
203  );
204  $this->assertEquals($totals['subtotal'], $this->_model->getSubtotal());
205  $this->assertEquals($totals['tax'], $this->_model->getTax());
206  $this->assertEquals($totals['shipping'], $this->_model->getShipping());
207  $this->assertEquals($totals['discount'], $this->_model->getDiscount());
208  }
209 
216  public function testInvalidGetAmounts($values, $transferDiscount, $transferShipping)
217  {
218  $expectedSubtotal = $this->_prepareInvalidModelData($values, $transferDiscount);
219  if ($transferShipping) {
220  $this->_model->setTransferShippingAsItem();
221  }
222  $result = $this->_model->getAmounts();
223  $expectedSubtotal += $this->_model->getTax();
224  $expectedSubtotal += $values['base_shipping_amount'];
225  if (!$transferDiscount) {
226  $expectedSubtotal -= $this->_model->getDiscount();
227  }
228  $this->assertEquals([Cart::AMOUNT_SUBTOTAL => $expectedSubtotal], $result);
229  }
230 
235  {
236  $data = [];
237  $invalidTotalsData = $this->invalidTotalsGetAllItemsDataProvider();
238  foreach ($invalidTotalsData as $dataItem) {
239  $data[] = [$dataItem[0], $dataItem[1], true];
240  $data[] = [$dataItem[0], $dataItem[1], false];
241  }
242  return $data;
243  }
244 
252  protected function _prepareInvalidModelData($values, $transferDiscount)
253  {
254  $taxContainer = new \Magento\Framework\DataObject(
255  [
256  'base_discount_tax_compensation_amount' =>
257  $values['base_discount_tax_compensation_amount'],
258  'base_shipping_discount_tax_compensation_amount' =>
259  $values['base_shipping_discount_tax_compensation_amount'],
260  ]
261  );
262  $expectedSubtotal = $values['base_subtotal'];
263  if ($transferDiscount) {
264  $this->_model->setTransferDiscountAsItem();
265  $expectedSubtotal -= $values['base_discount_amount'];
266  }
267  $this->_salesModel->expects($this->once())->method('getTaxContainer')->will($this->returnValue($taxContainer));
268  $this->_salesModel->expects(
269  $this->once()
270  )->method(
271  'getAllItems'
272  )->will(
273  $this->returnValue([$this->_validItem])
274  );
275  $this->_salesModel->expects(
276  $this->once()
277  )->method(
278  'getBaseSubtotal'
279  )->will(
280  $this->returnValue($values['base_subtotal'])
281  );
282  $this->_salesModel->expects(
283  $this->once()
284  )->method(
285  'getBaseTaxAmount'
286  )->will(
287  $this->returnValue($values['base_tax_amount'])
288  );
289  $this->_salesModel->expects(
290  $this->once()
291  )->method(
292  'getBaseShippingAmount'
293  )->will(
294  $this->returnValue($values['base_shipping_amount'])
295  );
296  $this->_salesModel->expects(
297  $this->once()
298  )->method(
299  'getBaseDiscountAmount'
300  )->will(
301  $this->returnValue($values['base_discount_amount'])
302  );
303  $this->_salesModel->expects(
304  $this->once()
305  )->method(
306  'getDataUsingMethod'
307  )->with(
308  'base_grand_total'
309  )->will(
310  $this->returnValue($values['base_grand_total'])
311  );
312  return $expectedSubtotal;
313  }
314 
315  public function testGetAmounts()
316  {
317  $totals = $this->_prepareValidModelData();
318  $this->assertEquals($totals, $this->_model->getAmounts());
319  }
320 
326  protected function _prepareValidModelData()
327  {
328  $totals = ['discount' => 0.1, 'shipping' => 0.2, 'subtotal' => 0.3, 'tax' => 0.4];
329  $taxContainer = new \Magento\Framework\DataObject(
330  ['base_discount_tax_compensation_amount' => 0, 'base_shipping_discount_tax_compensation_amnt' => 0]
331  );
332  $this->_salesModel->expects($this->once())->method('getTaxContainer')->will($this->returnValue($taxContainer));
333  $this->_salesModel->expects(
334  $this->once()
335  )->method(
336  'getAllItems'
337  )->will(
338  $this->returnValue([$this->_validItem])
339  );
340  $this->_salesModel->expects(
341  $this->once()
342  )->method(
343  'getBaseSubtotal'
344  )->will(
345  $this->returnValue($totals['subtotal'])
346  );
347  $this->_salesModel->expects(
348  $this->once()
349  )->method(
350  'getBaseTaxAmount'
351  )->will(
352  $this->returnValue($totals['tax'])
353  );
354  $this->_salesModel->expects(
355  $this->once()
356  )->method(
357  'getBaseShippingAmount'
358  )->will(
359  $this->returnValue($totals['shipping'])
360  );
361  $this->_salesModel->expects(
362  $this->once()
363  )->method(
364  'getBaseDiscountAmount'
365  )->will(
366  $this->returnValue($totals['discount'])
367  );
368  $this->_salesModel->expects(
369  $this->once()
370  )->method(
371  'getDataUsingMethod'
372  )->with(
373  'base_grand_total'
374  )->will(
375  $this->returnValue(6.0 + $totals['tax'] + $totals['shipping'] - $totals['discount'])
376  );
377  return $totals;
378  }
379 
380  public function testHasNegativeItemAmount()
381  {
382  $this->_model->addCustomItem('item1', 1, 2.1);
383  $this->assertFalse($this->_model->hasNegativeItemAmount());
384  $this->_model->addCustomItem('item1', 1, -1.3);
385  $this->assertTrue($this->_model->hasNegativeItemAmount());
386  }
387 }
$values
Definition: options.phtml:88
__construct($name=null, array $data=[], $dataName='')
Definition: CartTest.php:32
$totals
Definition: totalbar.phtml:10
testInvalidGetAmounts($values, $transferDiscount, $transferShipping)
Definition: CartTest.php:216
testInvalidTotalsGetAllItems($values, $transferDiscount)
Definition: CartTest.php:141
_prepareInvalidModelData($values, $transferDiscount)
Definition: CartTest.php:252
$items
if(!isset($_GET['name'])) $name
Definition: log.php:14