8 use \Magento\Payment\Model\Cart;
10 class CartTest extends \PHPUnit\Framework\TestCase
23 $this->_eventManagerMock = $this->createMock(\
Magento\Framework\Event\ManagerInterface::class);
24 $this->_salesModelMock = $this->createMock(\
Magento\
Payment\Model\
Cart\SalesModel\SalesModelInterface::class);
25 $factoryMock = $this->createMock(\
Magento\
Payment\Model\
Cart\SalesModel\Factory::class);
26 $factoryMock->expects($this->once())->method(
'create')->will($this->returnValue($this->_salesModelMock));
28 $this->_model = new \Magento\Payment\Model\Cart($factoryMock, $this->_eventManagerMock,
null);
36 $this->assertTrue($this->_salesModelMock === $this->_model->getSalesModel());
44 $this->_salesModelMock->expects(
51 $this->_model->getAllItems();
52 $this->_model->addCustomItem(
'test', 10, 10.5,
'some_id');
53 $items = $this->_model->getAllItems();
54 $customItem = array_pop(
$items);
56 $customItem->getName() ==
'test' &&
57 $customItem->getQty() == 10 &&
58 $customItem->getAmount() == 10.5 &&
59 $customItem->getId() ==
'some_id' 70 public function testGetAmounts($transferFlags, $salesModelItems, $salesModelAmounts, $expected)
73 $this->assertEquals($expected, $amounts);
76 $this->_eventManagerMock->expects($this->never())->method(
'dispatch');
77 $amounts = $this->_model->getAmounts();
78 $this->assertEquals($expected, $amounts);
87 public function testGetAllItems($transferFlags, $salesModelItems, $salesModelAmounts)
92 if ($transferFlags[
'transfer_shipping']) {
93 $customItems[] = new \Magento\Framework\DataObject(
94 [
'name' =>
'Shipping',
'qty' => 1,
'amount' => $salesModelAmounts[
'BaseShippingAmount']]
97 if ($transferFlags[
'transfer_discount']) {
98 $customItems[] = new \Magento\Framework\DataObject(
99 [
'name' =>
'Discount',
'qty' => 1,
'amount' => -1.00 * $salesModelAmounts[
'BaseDiscountAmount']]
104 $expected = array_merge($cartItems, $customItems);
106 $this->assertTrue($areEqual);
114 foreach ([
'Discount',
'Shipping',
'Tax'] as $amountType) {
115 $setMethod =
'set' . $amountType;
116 $getMethod =
'get' . $amountType;
117 $addMethod =
'add' . $amountType;
119 $this->_model->{$setMethod}(10);
120 $this->assertEquals(10, $this->_model->{$getMethod}());
122 $this->_model->{$addMethod}(5);
123 $this->assertEquals(15, $this->_model->{$getMethod}());
125 $this->_model->{$addMethod}(-20);
126 $this->assertEquals(-5, $this->_model->{$getMethod}());
128 $this->_model->{$setMethod}(10);
129 $this->assertEquals(10, $this->_model->{$getMethod}());
133 $this->_model->addSubtotal(10);
134 $this->assertEquals(10, $this->_model->getSubtotal());
136 $this->_model->addSubtotal(2);
137 $this->assertEquals(12, $this->_model->getSubtotal());
139 $this->_model->addSubtotal(-20);
140 $this->assertEquals(-8, $this->_model->getSubtotal());
153 [
'transfer_shipping' =>
true,
'transfer_discount' =>
true],
154 $this->_getSalesModelItems(),
156 'BaseDiscountAmount' => 15.0,
157 'BaseShippingAmount' => 20.0,
158 'BaseSubtotal' => 100.0,
159 'BaseTaxAmount' => 8.0
162 Cart::AMOUNT_DISCOUNT => 0.0,
163 Cart::AMOUNT_SHIPPING => 0.0,
164 Cart::AMOUNT_SUBTOTAL => 105.0,
165 Cart::AMOUNT_TAX => 8.0
170 [
'transfer_shipping' =>
false,
'transfer_discount' =>
false],
171 $this->_getSalesModelItems(),
173 'BaseDiscountAmount' => 15.0,
174 'BaseShippingAmount' => 20.0,
175 'BaseSubtotal' => 100.0,
176 'BaseTaxAmount' => 8.0
179 Cart::AMOUNT_DISCOUNT => 15.0,
180 Cart::AMOUNT_SHIPPING => 20.0,
181 Cart::AMOUNT_SUBTOTAL => 100.0,
182 Cart::AMOUNT_TAX => 8.0
187 [
'transfer_shipping' =>
true,
'transfer_discount' =>
false],
190 'BaseDiscountAmount' => 15.0,
191 'BaseShippingAmount' => 20.0,
192 'BaseSubtotal' => 100.0,
193 'BaseTaxAmount' => 8.0
196 Cart::AMOUNT_DISCOUNT => 15.0,
197 Cart::AMOUNT_SHIPPING => 0.0,
198 Cart::AMOUNT_SUBTOTAL => 120.0,
199 Cart::AMOUNT_TAX => 8.0
214 if (count($salesItemsA) != count($salesItemsB)) {
218 $toStringCallback =
function (&
$item) {
222 array_walk($salesItemsA, $toStringCallback);
223 array_walk($salesItemsB, $toStringCallback);
228 return implode(
'', $salesItemsA) == implode(
'', $salesItemsB);
241 if ($transferFlags[
'transfer_shipping']) {
242 $this->_model->setTransferShippingAsItem();
244 if ($transferFlags[
'transfer_discount']) {
245 $this->_model->setTransferDiscountAsItem();
248 $this->_eventManagerMock->expects(
253 $this->equalTo(
'payment_cart_collect_items_and_amounts'),
254 $this->equalTo([
'cart' => $this->_model])
257 $this->_salesModelMock->expects(
262 $this->returnValue($salesModelItems)
265 foreach ($salesModelAmounts as $key =>
$value) {
266 $this->_salesModelMock->expects($this->once())->method(
'get' . $key)->will($this->returnValue(
$value));
269 return $this->_model->getAmounts();
279 $product = new \Magento\Framework\DataObject([
'id' =>
'1']);
281 new \Magento\Framework\DataObject(
282 [
'name' =>
'name 1',
'qty' => 1,
'price' => 0.1,
'original_item' =>
$product]
284 new \Magento\Framework\DataObject(
285 [
'name' =>
'name 2',
'qty' => 2,
'price' => 1.2,
'original_item' =>
$product]
287 new \Magento\Framework\DataObject(
289 'parent_item' =>
'parent item 3',
308 foreach ($salesModelItems as
$item) {
309 if (
$item->getParentItem()) {
312 $result[] = new \Magento\Framework\DataObject(
314 'name' =>
$item->getName(),
315 'qty' =>
$item->getQty(),
316 'amount' =>
$item->getPrice(),
317 'id' =>
$item->getOriginalItem()->getId(),
_compareSalesItems(array $salesItemsA, array $salesItemsB)
_convertToCartItems(array $salesModelItems)
_collectItemsAndAmounts($transferFlags, $salesModelItems, $salesModelAmounts)
testAmountSettersAndGetters()
testGetAllItems($transferFlags, $salesModelItems, $salesModelAmounts)
testGetAmounts($transferFlags, $salesModelItems, $salesModelAmounts, $expected)