Skip to content

Commit 7529fab

Browse files
merge magento/2.3-develop into magento-chaika/Chaika-PR-2019-09-03-2.3
2 parents b692701 + a0c6ad6 commit 7529fab

File tree

6 files changed

+49
-85
lines changed

6 files changed

+49
-85
lines changed

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

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
5959
'base_amount' => null,
6060
];
6161
} else {
62-
$data = [
63-
'carrier_code' => null,
64-
'method_code' => null,
65-
'carrier_title' => $carrierTitle,
66-
'method_title' => $methodTitle,
67-
'amount' => null,
68-
/** @deprecated The field should not be used on the storefront */
69-
'base_amount' => null,
70-
];
62+
$data = null;
7163
}
7264
return $data;
7365
}

app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddresses.php

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1414
use Magento\Quote\Model\Quote;
1515
use Magento\QuoteGraphQl\Model\Cart\ExtractQuoteAddressData;
16+
use Magento\Framework\GraphQl\Schema\Type\TypeRegistry;
17+
use Magento\Framework\App\ObjectManager;
1618

1719
/**
1820
* @inheritdoc
@@ -24,12 +26,21 @@ class ShippingAddresses implements ResolverInterface
2426
*/
2527
private $extractQuoteAddressData;
2628

29+
/**
30+
* @var TypeRegistry
31+
*/
32+
private $typeRegistry;
33+
2734
/**
2835
* @param ExtractQuoteAddressData $extractQuoteAddressData
36+
* @param TypeRegistry|null $typeRegistry
2937
*/
30-
public function __construct(ExtractQuoteAddressData $extractQuoteAddressData)
31-
{
38+
public function __construct(
39+
ExtractQuoteAddressData $extractQuoteAddressData,
40+
TypeRegistry $typeRegistry = null
41+
) {
3242
$this->extractQuoteAddressData = $extractQuoteAddressData;
43+
$this->typeRegistry = $typeRegistry ?: ObjectManager::getInstance()->get(TypeRegistry::class);
3344
}
3445

3546
/**
@@ -48,9 +59,38 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
4859

4960
if (count($shippingAddresses)) {
5061
foreach ($shippingAddresses as $shippingAddress) {
51-
$addressesData[] = $this->extractQuoteAddressData->execute($shippingAddress);
62+
$address = $this->extractQuoteAddressData->execute($shippingAddress);
63+
64+
if ($this->validateAddressFromSchema($address)) {
65+
$addressesData[] = $address;
66+
}
5267
}
5368
}
5469
return $addressesData;
5570
}
71+
72+
/**
73+
* Validate data from address against mandatory fields from graphql schema for address
74+
*
75+
* @param array $address
76+
* @return bool
77+
*/
78+
private function validateAddressFromSchema(array $address) : bool
79+
{
80+
/** @var \Magento\Framework\GraphQL\Schema\Type\Input\InputObjectType $cartAddressInput */
81+
$cartAddressInput = $this->typeRegistry->get('CartAddressInput');
82+
$fields = $cartAddressInput->getFields();
83+
84+
foreach ($fields as $field) {
85+
if ($field->getType() instanceof \Magento\Framework\GraphQL\Schema\Type\NonNull) {
86+
// an array key has to exist but it's value should not be null
87+
if (array_key_exists($field->name, $address)
88+
&& !is_array($address[$field->name])
89+
&& !isset($address[$field->name])) {
90+
return false;
91+
}
92+
}
93+
}
94+
return true;
95+
}
5696
}

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

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -100,18 +100,7 @@ public function testGetSelectedShippingMethodBeforeSet()
100100

101101
$shippingAddress = current($response['cart']['shipping_addresses']);
102102
self::assertArrayHasKey('selected_shipping_method', $shippingAddress);
103-
104-
self::assertArrayHasKey('carrier_code', $shippingAddress['selected_shipping_method']);
105-
self::assertNull($shippingAddress['selected_shipping_method']['carrier_code']);
106-
107-
self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']);
108-
self::assertNull($shippingAddress['selected_shipping_method']['method_code']);
109-
110-
self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']);
111-
self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']);
112-
113-
self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']);
114-
self::assertNull($shippingAddress['selected_shipping_method']['method_title']);
103+
self::assertNull($shippingAddress['selected_shipping_method']);
115104
}
116105

117106
/**
@@ -174,12 +163,7 @@ public function testGetGetSelectedShippingMethodIfShippingMethodIsNotSet()
174163

175164
$shippingAddress = current($response['cart']['shipping_addresses']);
176165
self::assertArrayHasKey('selected_shipping_method', $shippingAddress);
177-
178-
self::assertNull($shippingAddress['selected_shipping_method']['carrier_code']);
179-
self::assertNull($shippingAddress['selected_shipping_method']['method_code']);
180-
self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']);
181-
self::assertNull($shippingAddress['selected_shipping_method']['method_title']);
182-
self::assertNull($shippingAddress['selected_shipping_method']['amount']);
166+
self::assertNull($shippingAddress['selected_shipping_method']);
183167
}
184168

185169
/**

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

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -92,28 +92,7 @@ public function testGetSpecifiedShippingAddressIfShippingAddressIsNotSet()
9292
self::assertArrayHasKey('cart', $response);
9393
self::assertArrayHasKey('shipping_addresses', $response['cart']);
9494

95-
$expectedShippingAddressData = [
96-
'firstname' => null,
97-
'lastname' => null,
98-
'company' => null,
99-
'street' => [
100-
''
101-
],
102-
'city' => null,
103-
'region' => [
104-
'code' => null,
105-
'label' => null,
106-
],
107-
'postcode' => null,
108-
'country' => [
109-
'code' => null,
110-
'label' => null,
111-
],
112-
'telephone' => null,
113-
'__typename' => 'ShippingCartAddress',
114-
'customer_notes' => null,
115-
];
116-
self::assertEquals($expectedShippingAddressData, current($response['cart']['shipping_addresses']));
95+
self::assertEquals([], $response['cart']['shipping_addresses']);
11796
}
11897

11998
/**

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

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,18 +91,7 @@ public function testGetSelectedShippingMethodBeforeSet()
9191

9292
$shippingAddress = current($response['cart']['shipping_addresses']);
9393
self::assertArrayHasKey('selected_shipping_method', $shippingAddress);
94-
95-
self::assertArrayHasKey('carrier_code', $shippingAddress['selected_shipping_method']);
96-
self::assertNull($shippingAddress['selected_shipping_method']['carrier_code']);
97-
98-
self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']);
99-
self::assertNull($shippingAddress['selected_shipping_method']['method_code']);
100-
101-
self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']);
102-
self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']);
103-
104-
self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']);
105-
self::assertNull($shippingAddress['selected_shipping_method']['method_title']);
94+
self::assertNull($shippingAddress['selected_shipping_method']);
10695
}
10796

10897
/**

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

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -82,27 +82,7 @@ public function testGetSpecifiedShippingAddressIfShippingAddressIsNotSet()
8282
self::assertArrayHasKey('cart', $response);
8383
self::assertArrayHasKey('shipping_addresses', $response['cart']);
8484

85-
$expectedShippingAddressData = [
86-
'firstname' => null,
87-
'lastname' => null,
88-
'company' => null,
89-
'street' => [
90-
''
91-
],
92-
'city' => null,
93-
'region' => [
94-
'code' => null,
95-
'label' => null,
96-
],
97-
'postcode' => null,
98-
'country' => [
99-
'code' => null,
100-
'label' => null,
101-
],
102-
'telephone' => null,
103-
'__typename' => 'ShippingCartAddress',
104-
];
105-
self::assertEquals($expectedShippingAddressData, current($response['cart']['shipping_addresses']));
85+
self::assertEquals([], $response['cart']['shipping_addresses']);
10686
}
10787

10888
/**

0 commit comments

Comments
 (0)