From f0bb8d5beb29e9b9db7c9f660650919a4efa59f5 Mon Sep 17 00:00:00 2001 From: Patrick McLain Date: Fri, 23 Aug 2019 23:08:13 -0400 Subject: [PATCH] Correct cart_item_id source for address items [`\Magento\Quote\Model\Quote\Address::getAllItems`](https://github.com/magento/magento2/blob/cf4dc427fed594f74b7168735ee1eb93febfc143/app/code/Magento/Quote/Model/Quote/Address.php#L592-L636) returns `\Magento\Quote\Model\Quote\Address\Item[]` when the quote has multiple shipping addresses and `Magento\Quote\Model\Quote\Item[]` with a single shipping address. These objects have different methods for accessing the quote item id and both variants need to be accommodated in the extractor. Fixes magento/graphql-ce#822 --- .../Model/Cart/ExtractQuoteAddressData.php | 8 +++- .../Guest/GetAvailableShippingMethodsTest.php | 48 ++++++++++--------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/ExtractQuoteAddressData.php b/app/code/Magento/QuoteGraphQl/Model/Cart/ExtractQuoteAddressData.php index c4d795293220f..ce14bcf2d71ea 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/ExtractQuoteAddressData.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/ExtractQuoteAddressData.php @@ -61,8 +61,14 @@ public function execute(QuoteAddress $address): array $addressItemsData = []; foreach ($address->getAllItems() as $addressItem) { + if ($addressItem instanceof \Magento\Quote\Model\Quote\Item) { + $itemId = $addressItem->getItemId(); + } else { + $itemId = $addressItem->getQuoteItemId(); + } + $addressItemsData[] = [ - 'cart_item_id' => $addressItem->getQuoteItemId(), + 'cart_item_id' => $itemId, 'quantity' => $addressItem->getQty() ]; } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetAvailableShippingMethodsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetAvailableShippingMethodsTest.php index 5d90d26d4983c..ff20274d6930f 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetAvailableShippingMethodsTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetAvailableShippingMethodsTest.php @@ -139,29 +139,33 @@ private function getQuery(string $maskedQuoteId): string query { cart (cart_id: "{$maskedQuoteId}") { shipping_addresses { - available_shipping_methods { - amount { - value - currency - } - base_amount { - value - currency - } - carrier_code - carrier_title - error_message - method_code - method_title - price_excl_tax { - value - currency - } - price_incl_tax { - value - currency - } + cart_items { + cart_item_id + quantity + } + available_shipping_methods { + amount { + value + currency } + base_amount { + value + currency + } + carrier_code + carrier_title + error_message + method_code + method_title + price_excl_tax { + value + currency + } + price_incl_tax { + value + currency + } + } } } }