Skip to content

Commit cf9ee31

Browse files
authored
ENGCOM-5042: Prevent undefined index warning before setting shipping method magento#666
2 parents cec0a61 + 774534a commit cf9ee31

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)