Skip to content
This repository was archived by the owner on Dec 19, 2019. It is now read-only.

Commit 8b37ef7

Browse files
committed
Prevent undefined index warning before setting shipping method
`list` would cause and undefined index error when address rates had been collected and the shipping method was not set. This commit checks that the shipping method is set prior to resolving. Fixes #657
1 parent 28757e4 commit 8b37ef7

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddress/SelectedShippingMethod.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
4949
$carrierTitle = null;
5050
$methodTitle = null;
5151

52-
if (count($rates) > 0) {
52+
if (count($rates) > 0 && !empty($address->getShippingMethod())) {
5353
list($carrierCode, $methodCode) = explode('_', $address->getShippingMethod(), 2);
5454

5555
/** @var Rate $rate */

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,40 @@ public function testGetSelectedShippingMethod()
8888
self::assertEquals('USD', $baseAmount['currency']);
8989
}
9090

91+
/**
92+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
93+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
94+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
95+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
96+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
97+
*/
98+
public function testGetSelectedShippingMethodBeforeSet()
99+
{
100+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
101+
102+
$query = $this->getQuery($maskedQuoteId);
103+
$response = $this->graphQlQuery($query, [], '', $this->getHeaderMap());
104+
105+
self::assertArrayHasKey('cart', $response);
106+
self::assertArrayHasKey('shipping_addresses', $response['cart']);
107+
self::assertCount(1, $response['cart']['shipping_addresses']);
108+
109+
$shippingAddress = current($response['cart']['shipping_addresses']);
110+
self::assertArrayHasKey('selected_shipping_method', $shippingAddress);
111+
112+
self::assertArrayHasKey('carrier_code', $shippingAddress['selected_shipping_method']);
113+
self::assertNull($shippingAddress['selected_shipping_method']['carrier_code']);
114+
115+
self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']);
116+
self::assertNull($shippingAddress['selected_shipping_method']['method_code']);
117+
118+
self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']);
119+
self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']);
120+
121+
self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']);
122+
self::assertNull($shippingAddress['selected_shipping_method']['method_title']);
123+
}
124+
91125
/**
92126
* _security
93127
* @magentoApiDataFixture Magento/Customer/_files/customer.php
@@ -193,6 +227,10 @@ private function getQuery(string $maskedQuoteId): string
193227
{
194228
cart(cart_id: "$maskedQuoteId") {
195229
shipping_addresses {
230+
available_shipping_methods {
231+
carrier_code
232+
method_code
233+
}
196234
selected_shipping_method {
197235
carrier_code
198236
method_code

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,39 @@ public function testGetSelectedShippingMethod()
8080
self::assertEquals('USD', $baseAmount['currency']);
8181
}
8282

83+
/**
84+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
85+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
86+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
87+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
88+
*/
89+
public function testGetSelectedShippingMethodBeforeSet()
90+
{
91+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
92+
93+
$query = $this->getQuery($maskedQuoteId);
94+
$response = $this->graphQlQuery($query);
95+
96+
self::assertArrayHasKey('cart', $response);
97+
self::assertArrayHasKey('shipping_addresses', $response['cart']);
98+
self::assertCount(1, $response['cart']['shipping_addresses']);
99+
100+
$shippingAddress = current($response['cart']['shipping_addresses']);
101+
self::assertArrayHasKey('selected_shipping_method', $shippingAddress);
102+
103+
self::assertArrayHasKey('carrier_code', $shippingAddress['selected_shipping_method']);
104+
self::assertNull($shippingAddress['selected_shipping_method']['carrier_code']);
105+
106+
self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']);
107+
self::assertNull($shippingAddress['selected_shipping_method']['method_code']);
108+
109+
self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']);
110+
self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']);
111+
112+
self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']);
113+
self::assertNull($shippingAddress['selected_shipping_method']['method_title']);
114+
}
115+
83116
/**
84117
* _security
85118
* @magentoApiDataFixture Magento/Customer/_files/customer.php
@@ -149,6 +182,10 @@ private function getQuery(string $maskedQuoteId): string
149182
{
150183
cart(cart_id: "$maskedQuoteId") {
151184
shipping_addresses {
185+
available_shipping_methods {
186+
carrier_code
187+
method_code
188+
}
152189
selected_shipping_method {
153190
carrier_code
154191
method_code

0 commit comments

Comments
 (0)