Skip to content

Commit 69c7fb4

Browse files
committed
AC-10472: Placing an order in GraphQL succeeds with an invalid shipping method
2 parents 588eac3 + a0a5d99 commit 69c7fb4

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

app/code/Magento/Quote/Model/ValidationRules/ShippingMethodValidationRule.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2018 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

@@ -49,7 +49,7 @@ public function validate(Quote $quote): array
4949
$shippingAddress->setStoreId($quote->getStoreId());
5050
$shippingMethod = $shippingAddress->getShippingMethod();
5151
$shippingRate = $shippingAddress->getShippingRateByCode($shippingMethod);
52-
$validationResult = $shippingMethod && $shippingRate;
52+
$validationResult = $shippingMethod && $shippingRate && $shippingAddress->requestShippingRates();
5353
if (!$validationResult) {
5454
$validationErrors = [__($this->generalMessage)];
5555
}

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,39 @@ private function getHeaderMap(string $username = 'customer@example.com', string
522522
return $headerMap;
523523
}
524524

525+
#[
526+
Config('carriers/flatrate/active', '1', 'store', 'default'),
527+
Config('payment/checkmo/active', '1', 'store', 'default'),
528+
DataFixture(ProductFixture::class, as: 'product'),
529+
DataFixture(Indexer::class, as: 'indexer'),
530+
DataFixture(Customer::class, ['email' => 'customer@example.com'], as: 'customer'),
531+
DataFixture(
532+
CustomerCart::class,
533+
[
534+
'customer_id' => '$customer.id$',
535+
'reserved_order_id' => 'test_quote'
536+
],
537+
'cart'
538+
),
539+
DataFixture(AddProductToCartFixture::class, ['cart_id' => '$cart.id$', 'product_id' => '$product.id$']),
540+
DataFixture(SetShippingAddressFixture::class, ['cart_id' => '$cart.id$']),
541+
DataFixture(SetBillingAddressFixture::class, ['cart_id' => '$cart.id$']),
542+
DataFixture(SetDeliveryMethodFixture::class, ['cart_id' => '$cart.id$']),
543+
DataFixture(SetPaymentMethodFixture::class, ['cart_id' => '$cart.id$']),
544+
DataFixture(QuoteIdMask::class, ['cart_id' => '$cart.id$'], 'quoteIdMask'),
545+
Config('carriers/flatrate/active', '0', 'store', 'default'),
546+
]
547+
public function testPlaceOrderWithDisabledShippingMethod()
548+
{
549+
$maskedQuoteId = DataFixtureStorageManager::getStorage()->get('quoteIdMask')->getMaskedId();
550+
$query = $this->getQuery($maskedQuoteId);
551+
552+
self::expectExceptionMessage(
553+
'Unable to place order: The shipping method is missing. Select the shipping method and try again'
554+
);
555+
$this->graphQlMutation($query, [], '', $this->getHeaderMap());
556+
}
557+
525558
/**
526559
* @inheritdoc
527560
*/

0 commit comments

Comments
 (0)