Skip to content
This repository was archived by the owner on Dec 19, 2019. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
'base_amount' => null,
];
} else {
$data = [
'carrier_code' => null,
'method_code' => null,
'carrier_title' => $carrierTitle,
'method_title' => $methodTitle,
'amount' => null,
/** @deprecated The field should not be used on the storefront */
'base_amount' => null,
];
$data = null;
}
return $data;
}
Expand Down
46 changes: 43 additions & 3 deletions app/code/Magento/QuoteGraphQl/Model/Resolver/ShippingAddresses.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
use Magento\Quote\Model\Quote;
use Magento\QuoteGraphQl\Model\Cart\ExtractQuoteAddressData;
use Magento\Framework\GraphQl\Schema\Type\TypeRegistry;
use Magento\Framework\App\ObjectManager;

/**
* @inheritdoc
Expand All @@ -24,12 +26,21 @@ class ShippingAddresses implements ResolverInterface
*/
private $extractQuoteAddressData;

/**
* @var TypeRegistry
*/
private $typeRegistry;

/**
* @param ExtractQuoteAddressData $extractQuoteAddressData
* @param TypeRegistry|null $typeRegistry
*/
public function __construct(ExtractQuoteAddressData $extractQuoteAddressData)
{
public function __construct(
ExtractQuoteAddressData $extractQuoteAddressData,
TypeRegistry $typeRegistry = null
) {
$this->extractQuoteAddressData = $extractQuoteAddressData;
$this->typeRegistry = $typeRegistry ?: ObjectManager::getInstance()->get(TypeRegistry::class);
}

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

if (count($shippingAddresses)) {
foreach ($shippingAddresses as $shippingAddress) {
$addressesData[] = $this->extractQuoteAddressData->execute($shippingAddress);
$address = $this->extractQuoteAddressData->execute($shippingAddress);

if ($this->validateAddressFromSchema($address)) {
$addressesData[] = $address;
}
}
}
return $addressesData;
}

/**
* Validate data from address against mandatory fields from graphql schema for address
*
* @param array $address
* @return bool
*/
private function validateAddressFromSchema(array $address) : bool
{
/** @var \Magento\Framework\GraphQL\Schema\Type\Input\InputObjectType $cartAddressInput */
$cartAddressInput = $this->typeRegistry->get('CartAddressInput');
$fields = $cartAddressInput->getFields();

foreach ($fields as $field) {
if ($field->getType() instanceof \Magento\Framework\GraphQL\Schema\Type\NonNull) {
// an array key has to exist but it's value should not be null
if (array_key_exists($field->name, $address)
&& !is_array($address[$field->name])
&& !isset($address[$field->name])) {
return false;
}
}
}
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,18 +100,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::assertNull($shippingAddress['selected_shipping_method']['carrier_code']);

self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']);
self::assertNull($shippingAddress['selected_shipping_method']['method_code']);

self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']);
self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']);

self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']);
self::assertNull($shippingAddress['selected_shipping_method']['method_title']);
self::assertNull($shippingAddress['selected_shipping_method']);
}

/**
Expand Down Expand Up @@ -174,12 +163,7 @@ 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']);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,28 +92,7 @@ public function testGetSpecifiedShippingAddressIfShippingAddressIsNotSet()
self::assertArrayHasKey('cart', $response);
self::assertArrayHasKey('shipping_addresses', $response['cart']);

$expectedShippingAddressData = [
'firstname' => null,
'lastname' => null,
'company' => null,
'street' => [
''
],
'city' => null,
'region' => [
'code' => null,
'label' => null,
],
'postcode' => null,
'country' => [
'code' => null,
'label' => null,
],
'telephone' => null,
'__typename' => 'ShippingCartAddress',
'customer_notes' => null,
];
self::assertEquals($expectedShippingAddressData, current($response['cart']['shipping_addresses']));
self::assertEquals([], $response['cart']['shipping_addresses']);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,18 +91,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::assertNull($shippingAddress['selected_shipping_method']['carrier_code']);

self::assertArrayHasKey('method_code', $shippingAddress['selected_shipping_method']);
self::assertNull($shippingAddress['selected_shipping_method']['method_code']);

self::assertArrayHasKey('carrier_title', $shippingAddress['selected_shipping_method']);
self::assertNull($shippingAddress['selected_shipping_method']['carrier_title']);

self::assertArrayHasKey('method_title', $shippingAddress['selected_shipping_method']);
self::assertNull($shippingAddress['selected_shipping_method']['method_title']);
self::assertNull($shippingAddress['selected_shipping_method']);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,27 +82,7 @@ public function testGetSpecifiedShippingAddressIfShippingAddressIsNotSet()
self::assertArrayHasKey('cart', $response);
self::assertArrayHasKey('shipping_addresses', $response['cart']);

$expectedShippingAddressData = [
'firstname' => null,
'lastname' => null,
'company' => null,
'street' => [
''
],
'city' => null,
'region' => [
'code' => null,
'label' => null,
],
'postcode' => null,
'country' => [
'code' => null,
'label' => null,
],
'telephone' => null,
'__typename' => 'ShippingCartAddress',
];
self::assertEquals($expectedShippingAddressData, current($response['cart']['shipping_addresses']));
self::assertEquals([], $response['cart']['shipping_addresses']);
}

/**
Expand Down