Skip to content

Commit acf4d8e

Browse files
committed
ACP2E-368: Issue when adding multiple items in addProductsToCart graphQL mutation
1 parent e263b0b commit acf4d8e

File tree

1 file changed

+99
-1
lines changed

1 file changed

+99
-1
lines changed

dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/AddSimpleProductToCartSingleMutationTest.php

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ public function testAddMultipleProductsToEmptyCart(): void
262262
$response = $this->graphQlMutation($query);
263263
$result = $response['addProductsToCart'];
264264
self::assertEmpty($result['user_errors']);
265-
self::assertNotEmpty($result['cart']['items']);
265+
self::assertCount(2, $result['cart']['items']);
266266

267267
$cartItem = $result['cart']['items'][0];
268268
self::assertEquals($product1->getSku(), $cartItem['product']['sku']);
@@ -280,6 +280,104 @@ public function testAddMultipleProductsToEmptyCart(): void
280280
self::assertEquals(50, $cartTotals['grand_total']['value']);
281281
}
282282

283+
/**
284+
* @magentoApiDataFixture Magento\Catalog\Test\Fixture\Product as:product1
285+
* @magentoApiDataFixture Magento\Catalog\Test\Fixture\Product as:product2
286+
* @magentoApiDataFixture Magento\Catalog\Test\Fixture\Product as:product3
287+
* @magentoApiDataFixture Magento\Quote\Test\Fixture\GuestCart as:cart
288+
* @magentoApiDataFixture Magento\Quote\Test\Fixture\AddProductToCart as:cartItem1
289+
* @magentoApiDataFixture Magento\Quote\Test\Fixture\AddProductToCart as:cartItem2
290+
* @magentoDataFixtureDataProvider {"cartItem1":{"cart_id":"$cart.id$","product_id":"$product1.id$","qty":1}}
291+
* @magentoDataFixtureDataProvider {"cartItem2":{"cart_id":"$cart.id$","product_id":"$product2.id$","qty":1}}
292+
*/
293+
public function testAddMultipleProductsToNotEmptyCart(): void
294+
{
295+
$product1 = $this->fixtures->get('product1');
296+
$product2 = $this->fixtures->get('product2');
297+
$product3 = $this->fixtures->get('product3');
298+
$cart = $this->fixtures->get('cart');
299+
$maskedQuoteId = $this->quoteIdToMaskedQuoteIdInterface->execute((int) $cart->getId());
300+
$query = $this->getAddMultipleProductsToCartAndReturnCartTotalsMutation(
301+
$maskedQuoteId,
302+
[
303+
[
304+
'sku' => $product1->getSku(),
305+
'quantity' => 1
306+
],
307+
[
308+
'sku' => $product3->getSku(),
309+
'quantity' => 1
310+
]
311+
]
312+
);
313+
$response = $this->graphQlMutation($query);
314+
$result = $response['addProductsToCart'];
315+
self::assertEmpty($result['user_errors']);
316+
self::assertCount(3, $result['cart']['items']);
317+
318+
$cartItem = $result['cart']['items'][0];
319+
self::assertEquals($product2->getSku(), $cartItem['product']['sku']);
320+
self::assertEquals(1, $cartItem['quantity']);
321+
self::assertEquals(10, $cartItem['prices']['price']['value']);
322+
self::assertEquals(10, $cartItem['prices']['row_total']['value']);
323+
324+
$cartItem = $result['cart']['items'][1];
325+
self::assertEquals($product1->getSku(), $cartItem['product']['sku']);
326+
self::assertEquals(2, $cartItem['quantity']);
327+
self::assertEquals(10, $cartItem['prices']['price']['value']);
328+
self::assertEquals(20, $cartItem['prices']['row_total']['value']);
329+
330+
$cartItem = $result['cart']['items'][2];
331+
self::assertEquals($product3->getSku(), $cartItem['product']['sku']);
332+
self::assertEquals(1, $cartItem['quantity']);
333+
self::assertEquals(10, $cartItem['prices']['price']['value']);
334+
self::assertEquals(10, $cartItem['prices']['row_total']['value']);
335+
336+
$cartTotals = $result['cart']['prices'];
337+
self::assertEquals(40, $cartTotals['grand_total']['value']);
338+
}
339+
340+
/**
341+
* @magentoApiDataFixture Magento\Catalog\Test\Fixture\Product with:{"stock_item":{"qty": 1}} as:product1
342+
* @magentoApiDataFixture Magento\Catalog\Test\Fixture\Product as:product2
343+
* @magentoApiDataFixture Magento\Quote\Test\Fixture\GuestCart as:cart
344+
*/
345+
public function testAddMultipleProductsWithInsufficientStockToEmptyCart(): void
346+
{
347+
$product1 = $this->fixtures->get('product1');
348+
$product2 = $this->fixtures->get('product2');
349+
$cart = $this->fixtures->get('cart');
350+
$maskedQuoteId = $this->quoteIdToMaskedQuoteIdInterface->execute((int) $cart->getId());
351+
$query = $this->getAddMultipleProductsToCartAndReturnCartTotalsMutation(
352+
$maskedQuoteId,
353+
[
354+
[
355+
'sku' => $product1->getSku(),
356+
'quantity' => 2
357+
],
358+
[
359+
'sku' => $product2->getSku(),
360+
'quantity' => 3
361+
]
362+
]
363+
);
364+
$response = $this->graphQlMutation($query);
365+
$result = $response['addProductsToCart'];
366+
self::assertCount(1, $result['user_errors']);
367+
self::assertEquals('INSUFFICIENT_STOCK', $result['user_errors'][0]['code']);
368+
369+
self::assertCount(1, $result['cart']['items']);
370+
371+
$cartItem = $result['cart']['items'][0];
372+
self::assertEquals($product2->getSku(), $cartItem['product']['sku']);
373+
self::assertEquals(3, $cartItem['quantity']);
374+
self::assertEquals(10, $cartItem['prices']['price']['value']);
375+
self::assertEquals(30, $cartItem['prices']['row_total']['value']);
376+
377+
$cartTotals = $result['cart']['prices'];
378+
self::assertEquals(30, $cartTotals['grand_total']['value']);
379+
}
380+
283381
/**
284382
* @return array
285383
*/

0 commit comments

Comments
 (0)