From 830e0c17b2d70fc6eae463f2232fae81dd665e5c Mon Sep 17 00:00:00 2001 From: Vaha Date: Wed, 4 Sep 2019 11:48:49 +0300 Subject: [PATCH 1/2] magento/graphql-ce#893 improved strict typing in SelectedShippingMethod --- .../SelectedShippingMethod.php | 18 ++++++++----- .../Magento/QuoteGraphQl/etc/schema.graphqls | 12 ++++----- .../GetSelectedShippingMethodTest.php | 26 ++++++++++++------- .../Guest/GetSelectedShippingMethodTest.php | 26 ++++++++++++------- 4 files changed, 50 insertions(+), 32 deletions(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddress/SelectedShippingMethod.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddress/SelectedShippingMethod.php index f2dacf6d007f..86a61a313b79 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddress/SelectedShippingMethod.php +++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddress/SelectedShippingMethod.php @@ -31,8 +31,8 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value /** @var Address $address */ $address = $value['model']; $rates = $address->getAllShippingRates(); - $carrierTitle = null; - $methodTitle = null; + $carrierTitle = ''; + $methodTitle = ''; if (count($rates) > 0 && !empty($address->getShippingMethod())) { list($carrierCode, $methodCode) = explode('_', $address->getShippingMethod(), 2); @@ -65,12 +65,18 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value ]; } else { $data = [ - 'carrier_code' => null, - 'method_code' => null, + 'carrier_code' => '', + 'method_code' => '', 'carrier_title' => $carrierTitle, 'method_title' => $methodTitle, - 'amount' => null, - 'base_amount' => null, + 'amount' => [ + 'value' => null, + 'currency' => null, + ], + 'base_amount' => [ + 'value' => null, + 'currency' => null, + ], ]; } return $data; diff --git a/app/code/Magento/QuoteGraphQl/etc/schema.graphqls b/app/code/Magento/QuoteGraphQl/etc/schema.graphqls index c458b5e9dc05..f242aded3878 100644 --- a/app/code/Magento/QuoteGraphQl/etc/schema.graphqls +++ b/app/code/Magento/QuoteGraphQl/etc/schema.graphqls @@ -239,12 +239,12 @@ type CartAddressCountry { } type SelectedShippingMethod { - carrier_code: String - method_code: String - carrier_title: String - method_title: String - amount: Money - base_amount: Money + carrier_code: String! + method_code: String! + carrier_title: String! + method_title: String! + amount: Money! + base_amount: Money! } type AvailableShippingMethod { diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/GetSelectedShippingMethodTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/GetSelectedShippingMethodTest.php index 9bb36bf8f092..e42f675455ee 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/GetSelectedShippingMethodTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/GetSelectedShippingMethodTest.php @@ -110,16 +110,16 @@ public function testGetSelectedShippingMethodBeforeSet() self::assertArrayHasKey('selected_shipping_method', $shippingAddress); self::assertArrayHasKey('carrier_code', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['carrier_code']); + self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_code']); self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['method_code']); + self::assertEmpty($shippingAddress['selected_shipping_method']['method_code']); self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']); + self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_title']); self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['method_title']); + self::assertEmpty($shippingAddress['selected_shipping_method']['method_title']); } /** @@ -183,12 +183,18 @@ public function testGetGetSelectedShippingMethodIfShippingMethodIsNotSet() $shippingAddress = current($response['cart']['shipping_addresses']); self::assertArrayHasKey('selected_shipping_method', $shippingAddress); - self::assertNull($shippingAddress['selected_shipping_method']['carrier_code']); - self::assertNull($shippingAddress['selected_shipping_method']['method_code']); - self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']); - self::assertNull($shippingAddress['selected_shipping_method']['method_title']); - self::assertNull($shippingAddress['selected_shipping_method']['amount']); - self::assertNull($shippingAddress['selected_shipping_method']['base_amount']); + self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_code']); + self::assertEmpty($shippingAddress['selected_shipping_method']['method_code']); + self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_title']); + self::assertEmpty($shippingAddress['selected_shipping_method']['method_title']); + + self::assertArrayHasKey('amount', $shippingAddress['selected_shipping_method']); + self::assertNull($shippingAddress['selected_shipping_method']['amount']['value']); + self::assertNull($shippingAddress['selected_shipping_method']['amount']['currency']); + + self::assertArrayHasKey('base_amount', $shippingAddress['selected_shipping_method']); + self::assertNull($shippingAddress['selected_shipping_method']['base_amount']['value']); + self::assertNull($shippingAddress['selected_shipping_method']['base_amount']['currency']); } /** diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetSelectedShippingMethodTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetSelectedShippingMethodTest.php index 5d1033b39819..eaab4b16a853 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetSelectedShippingMethodTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetSelectedShippingMethodTest.php @@ -101,16 +101,16 @@ public function testGetSelectedShippingMethodBeforeSet() self::assertArrayHasKey('selected_shipping_method', $shippingAddress); self::assertArrayHasKey('carrier_code', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['carrier_code']); + self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_code']); self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['method_code']); + self::assertEmpty($shippingAddress['selected_shipping_method']['method_code']); self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']); + self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_title']); self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['method_title']); + self::assertEmpty($shippingAddress['selected_shipping_method']['method_title']); } /** @@ -153,12 +153,18 @@ public function testGetGetSelectedShippingMethodIfShippingMethodIsNotSet() $shippingAddress = current($response['cart']['shipping_addresses']); self::assertArrayHasKey('selected_shipping_method', $shippingAddress); - self::assertNull($shippingAddress['selected_shipping_method']['carrier_code']); - self::assertNull($shippingAddress['selected_shipping_method']['method_code']); - self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']); - self::assertNull($shippingAddress['selected_shipping_method']['method_title']); - self::assertNull($shippingAddress['selected_shipping_method']['amount']); - self::assertNull($shippingAddress['selected_shipping_method']['base_amount']); + self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_code']); + self::assertEmpty($shippingAddress['selected_shipping_method']['method_code']); + self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_title']); + self::assertEmpty($shippingAddress['selected_shipping_method']['method_title']); + + self::assertArrayHasKey('amount', $shippingAddress['selected_shipping_method']); + self::assertNull($shippingAddress['selected_shipping_method']['amount']['value']); + self::assertNull($shippingAddress['selected_shipping_method']['amount']['currency']); + + self::assertArrayHasKey('base_amount', $shippingAddress['selected_shipping_method']); + self::assertNull($shippingAddress['selected_shipping_method']['base_amount']['value']); + self::assertNull($shippingAddress['selected_shipping_method']['base_amount']['currency']); } /** From 945a1a73705c2aeb768d9e6e3374264358f424eb Mon Sep 17 00:00:00 2001 From: Vaha Date: Fri, 6 Sep 2019 08:55:36 +0300 Subject: [PATCH 2/2] magento/graphql-ce#893 return null if no selected shipping method --- .../SelectedShippingMethod.php | 70 ++++++++----------- .../GetSelectedShippingMethodTest.php | 27 +------ .../Guest/GetSelectedShippingMethodTest.php | 27 +------ 3 files changed, 33 insertions(+), 91 deletions(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddress/SelectedShippingMethod.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddress/SelectedShippingMethod.php index 86a61a313b79..6062d85396ea 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddress/SelectedShippingMethod.php +++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddress/SelectedShippingMethod.php @@ -34,51 +34,39 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value $carrierTitle = ''; $methodTitle = ''; - if (count($rates) > 0 && !empty($address->getShippingMethod())) { - list($carrierCode, $methodCode) = explode('_', $address->getShippingMethod(), 2); + if (!count($rates) || empty($address->getShippingMethod())) { + return null; + } + + list($carrierCode, $methodCode) = explode('_', $address->getShippingMethod(), 2); - /** @var Rate $rate */ - foreach ($rates as $rate) { - if ($rate->getCode() == $address->getShippingMethod()) { - $carrierTitle = $rate->getCarrierTitle(); - $methodTitle = $rate->getMethodTitle(); - break; - } + /** @var Rate $rate */ + foreach ($rates as $rate) { + if ($rate->getCode() == $address->getShippingMethod()) { + $carrierTitle = $rate->getCarrierTitle(); + $methodTitle = $rate->getMethodTitle(); + break; } + } - /** @var Currency $currency */ - $currency = $context->getExtensionAttributes()->getStore()->getBaseCurrency(); + /** @var Currency $currency */ + $currency = $context->getExtensionAttributes()->getStore()->getBaseCurrency(); + + $data = [ + 'carrier_code' => $carrierCode, + 'method_code' => $methodCode, + 'carrier_title' => $carrierTitle, + 'method_title' => $methodTitle, + 'amount' => [ + 'value' => $address->getShippingAmount(), + 'currency' => $address->getQuote()->getQuoteCurrencyCode(), + ], + 'base_amount' => [ + 'value' => $address->getBaseShippingAmount(), + 'currency' => $currency->getCode(), + ], + ]; - $data = [ - 'carrier_code' => $carrierCode, - 'method_code' => $methodCode, - 'carrier_title' => $carrierTitle, - 'method_title' => $methodTitle, - 'amount' => [ - 'value' => $address->getShippingAmount(), - 'currency' => $address->getQuote()->getQuoteCurrencyCode(), - ], - 'base_amount' => [ - 'value' => $address->getBaseShippingAmount(), - 'currency' => $currency->getCode(), - ], - ]; - } else { - $data = [ - 'carrier_code' => '', - 'method_code' => '', - 'carrier_title' => $carrierTitle, - 'method_title' => $methodTitle, - 'amount' => [ - 'value' => null, - 'currency' => null, - ], - 'base_amount' => [ - 'value' => null, - 'currency' => null, - ], - ]; - } return $data; } } diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/GetSelectedShippingMethodTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/GetSelectedShippingMethodTest.php index e42f675455ee..90107ad2220d 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/GetSelectedShippingMethodTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/GetSelectedShippingMethodTest.php @@ -108,18 +108,7 @@ public function testGetSelectedShippingMethodBeforeSet() $shippingAddress = current($response['cart']['shipping_addresses']); self::assertArrayHasKey('selected_shipping_method', $shippingAddress); - - self::assertArrayHasKey('carrier_code', $shippingAddress['selected_shipping_method']); - self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_code']); - - self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']); - self::assertEmpty($shippingAddress['selected_shipping_method']['method_code']); - - self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']); - self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_title']); - - self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']); - self::assertEmpty($shippingAddress['selected_shipping_method']['method_title']); + self::assertNull($shippingAddress['selected_shipping_method']); } /** @@ -182,19 +171,7 @@ public function testGetGetSelectedShippingMethodIfShippingMethodIsNotSet() $shippingAddress = current($response['cart']['shipping_addresses']); self::assertArrayHasKey('selected_shipping_method', $shippingAddress); - - self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_code']); - self::assertEmpty($shippingAddress['selected_shipping_method']['method_code']); - self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_title']); - self::assertEmpty($shippingAddress['selected_shipping_method']['method_title']); - - self::assertArrayHasKey('amount', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['amount']['value']); - self::assertNull($shippingAddress['selected_shipping_method']['amount']['currency']); - - self::assertArrayHasKey('base_amount', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['base_amount']['value']); - self::assertNull($shippingAddress['selected_shipping_method']['base_amount']['currency']); + self::assertNull($shippingAddress['selected_shipping_method']); } /** diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetSelectedShippingMethodTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetSelectedShippingMethodTest.php index eaab4b16a853..ce2f1868d48b 100644 --- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetSelectedShippingMethodTest.php +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/GetSelectedShippingMethodTest.php @@ -99,18 +99,7 @@ public function testGetSelectedShippingMethodBeforeSet() $shippingAddress = current($response['cart']['shipping_addresses']); self::assertArrayHasKey('selected_shipping_method', $shippingAddress); - - self::assertArrayHasKey('carrier_code', $shippingAddress['selected_shipping_method']); - self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_code']); - - self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']); - self::assertEmpty($shippingAddress['selected_shipping_method']['method_code']); - - self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']); - self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_title']); - - self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']); - self::assertEmpty($shippingAddress['selected_shipping_method']['method_title']); + self::assertNull($shippingAddress['selected_shipping_method']); } /** @@ -152,19 +141,7 @@ public function testGetGetSelectedShippingMethodIfShippingMethodIsNotSet() $shippingAddress = current($response['cart']['shipping_addresses']); self::assertArrayHasKey('selected_shipping_method', $shippingAddress); - - self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_code']); - self::assertEmpty($shippingAddress['selected_shipping_method']['method_code']); - self::assertEmpty($shippingAddress['selected_shipping_method']['carrier_title']); - self::assertEmpty($shippingAddress['selected_shipping_method']['method_title']); - - self::assertArrayHasKey('amount', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['amount']['value']); - self::assertNull($shippingAddress['selected_shipping_method']['amount']['currency']); - - self::assertArrayHasKey('base_amount', $shippingAddress['selected_shipping_method']); - self::assertNull($shippingAddress['selected_shipping_method']['base_amount']['value']); - self::assertNull($shippingAddress['selected_shipping_method']['base_amount']['currency']); + self::assertNull($shippingAddress['selected_shipping_method']); } /**