diff --git a/app/code/Magento/CustomerGraphQl/Model/Customer/CheckCustomerPassword.php b/app/code/Magento/CustomerGraphQl/Model/Customer/CheckCustomerPassword.php
index f3c03e5fc18aa..3cc831e1ca40e 100644
--- a/app/code/Magento/CustomerGraphQl/Model/Customer/CheckCustomerPassword.php
+++ b/app/code/Magento/CustomerGraphQl/Model/Customer/CheckCustomerPassword.php
@@ -9,7 +9,12 @@
use Magento\Customer\Model\AuthenticationInterface;
use Magento\Framework\Exception\InvalidEmailOrPasswordException;
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Exception\NoSuchEntityException;
+use Magento\Framework\Exception\State\UserLockedException;
use Magento\Framework\GraphQl\Exception\GraphQlAuthenticationException;
+use Magento\Framework\GraphQl\Exception\GraphQlInputException;
+use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
/**
* Check customer password
@@ -36,15 +41,21 @@ public function __construct(
* @param string $password
* @param int $customerId
* @throws GraphQlAuthenticationException
+ * @throws GraphQlInputException
+ * @throws GraphQlNoSuchEntityException
*/
public function execute(string $password, int $customerId)
{
try {
$this->authentication->authenticate($customerId, $password);
} catch (InvalidEmailOrPasswordException $e) {
- throw new GraphQlAuthenticationException(
- __('The password doesn\'t match this account. Verify the password and try again.')
- );
+ throw new GraphQlAuthenticationException(__($e->getMessage()), $e);
+ } catch (UserLockedException $e) {
+ throw new GraphQlAuthenticationException(__($e->getMessage()), $e);
+ } catch (NoSuchEntityException $e) {
+ throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e);
+ } catch (LocalizedException $e) {
+ throw new GraphQlInputException(__($e->getMessage()), $e);
}
}
}
diff --git a/app/code/Magento/CustomerGraphQl/Model/Customer/UpdateCustomerData.php b/app/code/Magento/CustomerGraphQl/Model/Customer/UpdateCustomerData.php
index 18510b872e64a..33f16f3d94b7d 100644
--- a/app/code/Magento/CustomerGraphQl/Model/Customer/UpdateCustomerData.php
+++ b/app/code/Magento/CustomerGraphQl/Model/Customer/UpdateCustomerData.php
@@ -9,10 +9,13 @@
use Magento\Customer\Api\CustomerRepositoryInterface;
use Magento\Framework\Exception\AlreadyExistsException;
+use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\GraphQl\Exception\GraphQlAlreadyExistsException;
+use Magento\Framework\GraphQl\Exception\GraphQlAuthenticationException;
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
-use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
use Magento\Store\Model\StoreManagerInterface;
+use Magento\Customer\Api\Data\CustomerInterface;
+use Magento\Framework\Api\DataObjectHelper;
/**
* Update customer data
@@ -34,19 +37,35 @@ class UpdateCustomerData
*/
private $checkCustomerPassword;
+ /**
+ * @var DataObjectHelper
+ */
+ private $dataObjectHelper;
+
+ /**
+ * @var array
+ */
+ private $restrictedKeys;
+
/**
* @param CustomerRepositoryInterface $customerRepository
* @param StoreManagerInterface $storeManager
* @param CheckCustomerPassword $checkCustomerPassword
+ * @param DataObjectHelper $dataObjectHelper
+ * @param array $restrictedKeys
*/
public function __construct(
CustomerRepositoryInterface $customerRepository,
StoreManagerInterface $storeManager,
- CheckCustomerPassword $checkCustomerPassword
+ CheckCustomerPassword $checkCustomerPassword,
+ DataObjectHelper $dataObjectHelper,
+ array $restrictedKeys = []
) {
$this->customerRepository = $customerRepository;
$this->storeManager = $storeManager;
$this->checkCustomerPassword = $checkCustomerPassword;
+ $this->dataObjectHelper = $dataObjectHelper;
+ $this->restrictedKeys = $restrictedKeys;
}
/**
@@ -55,21 +74,16 @@ public function __construct(
* @param int $customerId
* @param array $data
* @return void
- * @throws GraphQlNoSuchEntityException
- * @throws GraphQlInputException
* @throws GraphQlAlreadyExistsException
+ * @throws GraphQlInputException
+ * @throws GraphQlAuthenticationException
*/
public function execute(int $customerId, array $data): void
{
$customer = $this->customerRepository->getById($customerId);
- if (isset($data['firstname'])) {
- $customer->setFirstname($data['firstname']);
- }
-
- if (isset($data['lastname'])) {
- $customer->setLastname($data['lastname']);
- }
+ $filteredData = array_diff_key($data, array_flip($this->restrictedKeys));
+ $this->dataObjectHelper->populateWithArray($customer, $filteredData, CustomerInterface::class);
if (isset($data['email']) && $customer->getEmail() !== $data['email']) {
if (!isset($data['password']) || empty($data['password'])) {
@@ -89,6 +103,8 @@ public function execute(int $customerId, array $data): void
__('A customer with the same email address already exists in an associated website.'),
$e
);
+ } catch (LocalizedException $e) {
+ throw new GraphQlInputException(__($e->getMessage()), $e);
}
}
}
diff --git a/app/code/Magento/CustomerGraphQl/etc/graphql/di.xml b/app/code/Magento/CustomerGraphQl/etc/graphql/di.xml
new file mode 100644
index 0000000000000..f1bd3563fda3d
--- /dev/null
+++ b/app/code/Magento/CustomerGraphQl/etc/graphql/di.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ - Magento\Customer\Api\Data\CustomerInterface::EMAIL
+
+
+
+
\ No newline at end of file
diff --git a/app/code/Magento/CustomerGraphQl/etc/schema.graphqls b/app/code/Magento/CustomerGraphQl/etc/schema.graphqls
index 139ac80be8429..c5860005c6e0e 100644
--- a/app/code/Magento/CustomerGraphQl/etc/schema.graphqls
+++ b/app/code/Magento/CustomerGraphQl/etc/schema.graphqls
@@ -92,6 +92,7 @@ type Customer @doc(description: "Customer defines the customer name and address
id: Int @doc(description: "The ID assigned to the customer")
is_subscribed: Boolean @doc(description: "Indicates whether the customer is subscribed to the company's newsletter") @resolver(class: "\\Magento\\CustomerGraphQl\\Model\\Resolver\\IsSubscribed")
addresses: [CustomerAddress] @doc(description: "An array containing the customer's shipping and billing addresses")
+ gender: Int @doc(description: "The customer's gender(Male - 1, Female - 2)")
}
type CustomerAddress @doc(description: "CustomerAddress contains detailed information about a customer's billing and shipping addresses"){
diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/ApplyCouponToCart.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/ApplyCouponToCart.php
index 0af35354758c9..5429d5333b25b 100644
--- a/app/code/Magento/QuoteGraphQl/Model/Resolver/ApplyCouponToCart.php
+++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/ApplyCouponToCart.php
@@ -50,12 +50,12 @@ public function __construct(
*/
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
{
- if (!isset($args['input']['cart_id'])) {
+ if (!isset($args['input']['cart_id']) || empty($args['input']['cart_id'])) {
throw new GraphQlInputException(__('Required parameter "cart_id" is missing'));
}
$maskedCartId = $args['input']['cart_id'];
- if (!isset($args['input']['coupon_code'])) {
+ if (!isset($args['input']['coupon_code']) || empty($args['input']['coupon_code'])) {
throw new GraphQlInputException(__('Required parameter "coupon_code" is missing'));
}
$couponCode = $args['input']['coupon_code'];
diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/Cart.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/Cart.php
index 2df31841366a1..db74b1fa4174b 100644
--- a/app/code/Magento/QuoteGraphQl/Model/Resolver/Cart.php
+++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/Cart.php
@@ -37,7 +37,7 @@ public function __construct(
*/
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
{
- if (!isset($args['cart_id'])) {
+ if (!isset($args['cart_id']) || empty($args['cart_id'])) {
throw new GraphQlInputException(__('Required parameter "cart_id" is missing'));
}
$maskedCartId = $args['cart_id'];
diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/RemoveCouponFromCart.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/RemoveCouponFromCart.php
index 68925c6e8944d..5a708ceaedc28 100644
--- a/app/code/Magento/QuoteGraphQl/Model/Resolver/RemoveCouponFromCart.php
+++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/RemoveCouponFromCart.php
@@ -50,7 +50,7 @@ public function __construct(
*/
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
{
- if (!isset($args['input']['cart_id'])) {
+ if (!isset($args['input']['cart_id']) || empty($args['input']['cart_id'])) {
throw new GraphQlInputException(__('Required parameter "cart_id" is missing'));
}
$maskedCartId = $args['input']['cart_id'];
diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/RemoveItemFromCart.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/RemoveItemFromCart.php
index c8f0ef06c7594..63e66f121f555 100644
--- a/app/code/Magento/QuoteGraphQl/Model/Resolver/RemoveItemFromCart.php
+++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/RemoveItemFromCart.php
@@ -14,7 +14,7 @@
use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
use Magento\Framework\GraphQl\Query\ResolverInterface;
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
-use Magento\Quote\Api\GuestCartItemRepositoryInterface;
+use Magento\Quote\Api\CartItemRepositoryInterface;
use Magento\QuoteGraphQl\Model\Cart\GetCartForUser;
/**
@@ -23,25 +23,25 @@
class RemoveItemFromCart implements ResolverInterface
{
/**
- * @var GuestCartItemRepositoryInterface
+ * @var GetCartForUser
*/
- private $guestCartItemRepository;
+ private $getCartForUser;
/**
- * @var GetCartForUser
+ * @var CartItemRepositoryInterface
*/
- private $getCartForUser;
+ private $cartItemRepository;
/**
- * @param GuestCartItemRepositoryInterface $guestCartItemRepository
* @param GetCartForUser $getCartForUser
+ * @param CartItemRepositoryInterface $cartItemRepository
*/
public function __construct(
- GuestCartItemRepositoryInterface $guestCartItemRepository,
- GetCartForUser $getCartForUser
+ GetCartForUser $getCartForUser,
+ CartItemRepositoryInterface $cartItemRepository
) {
- $this->guestCartItemRepository = $guestCartItemRepository;
$this->getCartForUser = $getCartForUser;
+ $this->cartItemRepository = $cartItemRepository;
}
/**
@@ -49,20 +49,20 @@ public function __construct(
*/
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
{
- if (!isset($args['input']['cart_id'])) {
- throw new GraphQlInputException(__('Required parameter "cart_id" is missing'));
+ if (!isset($args['input']['cart_id']) || empty($args['input']['cart_id'])) {
+ throw new GraphQlInputException(__('Required parameter "cart_id" is missing.'));
}
$maskedCartId = $args['input']['cart_id'];
- if (!isset($args['input']['cart_item_id'])) {
- throw new GraphQlInputException(__('Required parameter "cart_item_id" is missing'));
+ if (!isset($args['input']['cart_item_id']) || empty($args['input']['cart_item_id'])) {
+ throw new GraphQlInputException(__('Required parameter "cart_item_id" is missing.'));
}
$itemId = $args['input']['cart_item_id'];
$cart = $this->getCartForUser->execute($maskedCartId, $context->getUserId());
try {
- $this->guestCartItemRepository->deleteById($maskedCartId, $itemId);
+ $this->cartItemRepository->deleteById((int)$cart->getId(), $itemId);
} catch (NoSuchEntityException $e) {
throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e);
} catch (LocalizedException $e) {
diff --git a/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php b/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php
new file mode 100644
index 0000000000000..78a07506556c0
--- /dev/null
+++ b/app/code/Magento/QuoteGraphQl/Model/Resolver/UpdateCartItems.php
@@ -0,0 +1,118 @@
+getCartForUser = $getCartForUser;
+ $this->cartItemRepository = $cartItemRepository;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
+ {
+ if (!isset($args['input']['cart_id']) || empty($args['input']['cart_id'])) {
+ throw new GraphQlInputException(__('Required parameter "cart_id" is missing.'));
+ }
+ $maskedCartId = $args['input']['cart_id'];
+
+ if (!isset($args['input']['cart_items']) || empty($args['input']['cart_items'])
+ || !is_array($args['input']['cart_items'])
+ ) {
+ throw new GraphQlInputException(__('Required parameter "cart_items" is missing.'));
+ }
+ $cartItems = $args['input']['cart_items'];
+
+ $cart = $this->getCartForUser->execute($maskedCartId, $context->getUserId());
+
+ try {
+ $this->processCartItems($cart, $cartItems);
+ } catch (NoSuchEntityException $e) {
+ throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e);
+ } catch (LocalizedException $e) {
+ throw new GraphQlInputException(__($e->getMessage()), $e);
+ }
+
+ return [
+ 'cart' => [
+ 'model' => $cart,
+ ],
+ ];
+ }
+
+ /**
+ * Process cart items
+ *
+ * @param Quote $cart
+ * @param array $items
+ * @throws GraphQlInputException
+ * @throws LocalizedException
+ */
+ private function processCartItems(Quote $cart, array $items): void
+ {
+ foreach ($items as $item) {
+ if (!isset($item['cart_item_id']) || empty($item['cart_item_id'])) {
+ throw new GraphQlInputException(__('Required parameter "cart_item_id" for "cart_items" is missing.'));
+ }
+ $itemId = $item['cart_item_id'];
+
+ if (!isset($item['quantity'])) {
+ throw new GraphQlInputException(__('Required parameter "quantity" for "cart_items" is missing.'));
+ }
+ $qty = (float)$item['quantity'];
+
+ $cartItem = $cart->getItemById($itemId);
+ if ($cartItem === false) {
+ throw new GraphQlNoSuchEntityException(
+ __('Could not find cart item with id: %1.', $item['cart_item_id'])
+ );
+ }
+
+ if ($qty <= 0.0) {
+ $this->cartItemRepository->deleteById((int)$cart->getId(), $itemId);
+ } else {
+ $cartItem->setQty($qty);
+ $this->cartItemRepository->save($cartItem);
+ }
+ }
+ }
+}
diff --git a/app/code/Magento/QuoteGraphQl/etc/schema.graphqls b/app/code/Magento/QuoteGraphQl/etc/schema.graphqls
index 5f65a990bac21..79cea3855f6f3 100644
--- a/app/code/Magento/QuoteGraphQl/etc/schema.graphqls
+++ b/app/code/Magento/QuoteGraphQl/etc/schema.graphqls
@@ -11,6 +11,7 @@ type Mutation {
addVirtualProductsToCart(input: AddVirtualProductsToCartInput): AddVirtualProductsToCartOutput @resolver(class: "Magento\\QuoteGraphQl\\Model\\Resolver\\AddSimpleProductsToCart")
applyCouponToCart(input: ApplyCouponToCartInput): ApplyCouponToCartOutput @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\ApplyCouponToCart")
removeCouponFromCart(input: RemoveCouponFromCartInput): RemoveCouponFromCartOutput @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\RemoveCouponFromCart")
+ updateCartItems(input: UpdateCartItemsInput): UpdateCartItemsOutput @resolver(class: "Magento\\QuoteGraphQl\\Model\\Resolver\\UpdateCartItems")
removeItemFromCart(input: RemoveItemFromCartInput): RemoveItemFromCartOutput @resolver(class: "Magento\\QuoteGraphQl\\Model\\Resolver\\RemoveItemFromCart")
setShippingAddressesOnCart(input: SetShippingAddressesOnCartInput): SetShippingAddressesOnCartOutput @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\SetShippingAddressesOnCart")
setBillingAddressOnCart(input: SetBillingAddressOnCartInput): SetBillingAddressOnCartOutput @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\SetBillingAddressOnCart")
@@ -53,6 +54,16 @@ input ApplyCouponToCartInput {
coupon_code: String!
}
+input UpdateCartItemsInput {
+ cart_id: String!
+ cart_items: [CartItemQuantityInput!]!
+}
+
+input CartItemQuantityInput {
+ cart_item_id: Int!
+ quantity: Float!
+}
+
input RemoveItemFromCartInput {
cart_id: String!
cart_item_id: Int!
@@ -230,6 +241,10 @@ type AddVirtualProductsToCartOutput {
cart: Cart!
}
+type UpdateCartItemsOutput {
+ cart: Cart!
+}
+
type RemoveItemFromCartOutput {
cart: Cart!
}
diff --git a/app/code/Magento/UrlRewriteGraphQl/Model/Resolver/EntityUrl.php b/app/code/Magento/UrlRewriteGraphQl/Model/Resolver/EntityUrl.php
index 1c25ffd1e9ff7..c842d660a6176 100644
--- a/app/code/Magento/UrlRewriteGraphQl/Model/Resolver/EntityUrl.php
+++ b/app/code/Magento/UrlRewriteGraphQl/Model/Resolver/EntityUrl.php
@@ -76,6 +76,7 @@ public function resolve(
$result = [
'id' => $urlRewrite->getEntityId(),
'canonical_url' => $urlRewrite->getTargetPath(),
+ 'relative_url' => $urlRewrite->getTargetPath(),
'type' => $this->sanitizeType($urlRewrite->getEntityType())
];
}
diff --git a/app/code/Magento/UrlRewriteGraphQl/etc/schema.graphqls b/app/code/Magento/UrlRewriteGraphQl/etc/schema.graphqls
index dae695c69a33c..5aea482a0fe02 100644
--- a/app/code/Magento/UrlRewriteGraphQl/etc/schema.graphqls
+++ b/app/code/Magento/UrlRewriteGraphQl/etc/schema.graphqls
@@ -1,16 +1,17 @@
# Copyright © Magento, Inc. All rights reserved.
# See COPYING.txt for license details.
-type EntityUrl @doc(description: "EntityUrl is an output object containing the `id`, `canonical_url`, and `type` attributes") {
- id: Int @doc(description: "The ID assigned to the object associated with the specified url. This could be a product ID, category ID, or page ID.")
- canonical_url: String @doc(description: "The internal relative URL. If the specified url is a redirect, the query returns the redirected URL, not the original.")
- type: UrlRewriteEntityTypeEnum @doc(description: "One of PRODUCT, CATEGORY, or CMS_PAGE.")
-}
-
type Query {
urlResolver(url: String!): EntityUrl @resolver(class: "Magento\\UrlRewriteGraphQl\\Model\\Resolver\\EntityUrl") @doc(description: "The urlResolver query returns the relative URL for a specified product, category or CMS page")
}
+type EntityUrl @doc(description: "EntityUrl is an output object containing the `id`, `relative_url`, and `type` attributes") {
+ id: Int @doc(description: "The ID assigned to the object associated with the specified url. This could be a product ID, category ID, or page ID.")
+ canonical_url: String @deprecated(reason: "The canonical_url field is deprecated, use relative_url instead.")
+ relative_url: String @doc(description: "The internal relative URL. If the specified url is a redirect, the query returns the redirected URL, not the original.")
+ type: UrlRewriteEntityTypeEnum @doc(description: "One of PRODUCT, CATEGORY, or CMS_PAGE.")
+}
+
enum UrlRewriteEntityTypeEnum {
}
diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/ChangeCustomerPasswordTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/ChangeCustomerPasswordTest.php
index f4e96e49a58e6..66b171740ccab 100644
--- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/ChangeCustomerPasswordTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/ChangeCustomerPasswordTest.php
@@ -94,7 +94,7 @@ public function testChangeWeakPassword()
/**
* @magentoApiDataFixture Magento/Customer/_files/customer.php
* @expectedException \Exception
- * @expectedExceptionMessage The password doesn't match this account. Verify the password and try again.
+ * @expectedExceptionMessage Invalid login or password.
*/
public function testChangePasswordIfPasswordIsInvalid()
{
diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/UpdateCustomerTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/UpdateCustomerTest.php
index c11c1385f7412..ee8fabc43c901 100644
--- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/UpdateCustomerTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/UpdateCustomerTest.php
@@ -47,33 +47,58 @@ public function testUpdateCustomer()
$currentEmail = 'customer@example.com';
$currentPassword = 'password';
+ $newPrefix = 'Dr';
$newFirstname = 'Richard';
+ $newMiddlename = 'Riley';
$newLastname = 'Rowe';
+ $newSuffix = 'III';
+ $newDob = '3/11/1972';
+ $newTaxVat = 'GQL1234567';
+ $newGender = 2;
$newEmail = 'customer_updated@example.com';
$query = <<graphQlQuery($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword));
+ $this->assertEquals($newPrefix, $response['updateCustomer']['customer']['prefix']);
$this->assertEquals($newFirstname, $response['updateCustomer']['customer']['firstname']);
+ $this->assertEquals($newMiddlename, $response['updateCustomer']['customer']['middlename']);
$this->assertEquals($newLastname, $response['updateCustomer']['customer']['lastname']);
+ $this->assertEquals($newSuffix, $response['updateCustomer']['customer']['suffix']);
+ $newDobDate = new \DateTime($newDob);
+ $this->assertEquals($newDobDate->format('Y-m-d'), $response['updateCustomer']['customer']['dob']);
+ $this->assertEquals($newTaxVat, $response['updateCustomer']['customer']['taxvat']);
$this->assertEquals($newEmail, $response['updateCustomer']['customer']['email']);
+ $this->assertEquals($newGender, $response['updateCustomer']['customer']['gender']);
}
/**
@@ -185,7 +210,7 @@ public function testUpdateEmailIfPasswordIsMissed()
/**
* @magentoApiDataFixture Magento/Customer/_files/customer.php
* @expectedException \Exception
- * @expectedExceptionMessage The password doesn't match this account. Verify the password and try again.
+ * @expectedExceptionMessage Invalid login or password.
*/
public function testUpdateEmailIfPasswordIsInvalid()
{
diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/RemoveItemFromCartTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/RemoveItemFromCartTest.php
index a351a2188a664..70ec646c10008 100644
--- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/RemoveItemFromCartTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/RemoveItemFromCartTest.php
@@ -81,14 +81,13 @@ public function testRemoveItemFromCart()
public function testRemoveItemFromNonExistentCart()
{
$query = $this->prepareMutationQuery('non_existent_masked_id', 1);
-
$this->graphQlQuery($query, [], '', $this->getHeaderMap());
}
/**
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
*/
- public function testRemoveNotExistentItem()
+ public function testRemoveNonExistentItem()
{
$quote = $this->quoteFactory->create();
$this->quoteResource->load($quote, 'test_order_1', 'reserved_order_id');
@@ -183,6 +182,50 @@ public function testRemoveItemFromAnotherCustomerCart()
$this->graphQlQuery($query, [], '', $this->getHeaderMap());
}
+ /**
+ * @magentoApiDataFixture Magento/Customer/_files/customer.php
+ * @param string $input
+ * @param string $message
+ * @dataProvider dataProviderUpdateWithMissedRequiredParameters
+ */
+ public function testUpdateWithMissedItemRequiredParameters(string $input, string $message)
+ {
+ $query = <<expectExceptionMessage($message);
+ $this->graphQlQuery($query, [], '', $this->getHeaderMap());
+ }
+
+ /**
+ * @return array
+ */
+ public function dataProviderUpdateWithMissedRequiredParameters(): array
+ {
+ return [
+ 'missed_cart_id' => [
+ 'cart_item_id: 1',
+ 'Required parameter "cart_id" is missing.'
+ ],
+ 'missed_cart_item_id' => [
+ 'cart_id: "test"',
+ 'Required parameter "cart_item_id" is missing.'
+ ],
+ ];
+ }
+
/**
* @param string $maskedQuoteId
* @param int $itemId
diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/UpdateCartItemsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/UpdateCartItemsTest.php
new file mode 100644
index 0000000000000..632ee839834e0
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/UpdateCartItemsTest.php
@@ -0,0 +1,334 @@
+quoteResource = $objectManager->get(QuoteResource::class);
+ $this->quoteFactory = $objectManager->get(QuoteFactory::class);
+ $this->quoteIdToMaskedId = $objectManager->get(QuoteIdToMaskedQuoteIdInterface::class);
+ $this->customerTokenService = $objectManager->get(CustomerTokenServiceInterface::class);
+ $this->productRepository = $objectManager->get(ProductRepositoryInterface::class);
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
+ */
+ public function testUpdateCartItemQty()
+ {
+ $quote = $this->quoteFactory->create();
+ $this->quoteResource->load($quote, 'test_order_1', 'reserved_order_id');
+ $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$quote->getId());
+ $itemId = (int)$quote->getItemByProduct($this->productRepository->get('simple'))->getId();
+ $qty = 2;
+
+ $query = $this->getQuery($maskedQuoteId, $itemId, $qty);
+ $response = $this->graphQlQuery($query, [], '', $this->getHeaderMap());
+
+ $this->assertArrayHasKey('updateCartItems', $response);
+ $this->assertArrayHasKey('cart', $response['updateCartItems']);
+
+ $responseCart = $response['updateCartItems']['cart'];
+ $item = current($responseCart['items']);
+
+ $this->assertEquals($itemId, $item['id']);
+ $this->assertEquals($qty, $item['qty']);
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
+ */
+ public function testRemoveCartItemIfQuantityIsZero()
+ {
+ $quote = $this->quoteFactory->create();
+ $this->quoteResource->load($quote, 'test_order_1', 'reserved_order_id');
+ $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$quote->getId());
+ $itemId = (int)$quote->getItemByProduct($this->productRepository->get('simple'))->getId();
+ $qty = 0;
+
+ $query = $this->getQuery($maskedQuoteId, $itemId, $qty);
+ $response = $this->graphQlQuery($query, [], '', $this->getHeaderMap());
+
+ $this->assertArrayHasKey('updateCartItems', $response);
+ $this->assertArrayHasKey('cart', $response['updateCartItems']);
+
+ $responseCart = $response['updateCartItems']['cart'];
+ $this->assertCount(0, $responseCart['items']);
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Customer/_files/customer.php
+ * @expectedException \Exception
+ * @expectedExceptionMessage Could not find a cart with ID "non_existent_masked_id"
+ */
+ public function testUpdateItemInNonExistentCart()
+ {
+ $query = $this->getQuery('non_existent_masked_id', 1, 2);
+ $this->graphQlQuery($query, [], '', $this->getHeaderMap());
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
+ */
+ public function testUpdateNonExistentItem()
+ {
+ $quote = $this->quoteFactory->create();
+ $this->quoteResource->load($quote, 'test_order_1', 'reserved_order_id');
+ $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$quote->getId());
+ $notExistentItemId = 999;
+
+ $this->expectExceptionMessage("Could not find cart item with id: {$notExistentItemId}.");
+
+ $query = $this->getQuery($maskedQuoteId, $notExistentItemId, 2);
+ $this->graphQlQuery($query, [], '', $this->getHeaderMap());
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_saved.php
+ */
+ public function testUpdateItemIfItemIsNotBelongToCart()
+ {
+ $firstQuote = $this->quoteFactory->create();
+ $this->quoteResource->load($firstQuote, 'test_order_1', 'reserved_order_id');
+ $firstQuoteMaskedId = $this->quoteIdToMaskedId->execute((int)$firstQuote->getId());
+
+ $secondQuote = $this->quoteFactory->create();
+ $this->quoteResource->load(
+ $secondQuote,
+ 'test_order_with_virtual_product_without_address',
+ 'reserved_order_id'
+ );
+ $secondQuote->setCustomerId(1);
+ $this->quoteResource->save($secondQuote);
+ $secondQuoteItemId = (int)$secondQuote
+ ->getItemByProduct($this->productRepository->get('virtual-product'))
+ ->getId();
+
+ $this->expectExceptionMessage("Could not find cart item with id: {$secondQuoteItemId}.");
+
+ $query = $this->getQuery($firstQuoteMaskedId, $secondQuoteItemId, 2);
+ $this->graphQlQuery($query, [], '', $this->getHeaderMap());
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_saved.php
+ */
+ public function testUpdateItemInGuestCart()
+ {
+ $guestQuote = $this->quoteFactory->create();
+ $this->quoteResource->load(
+ $guestQuote,
+ 'test_order_with_virtual_product_without_address',
+ 'reserved_order_id'
+ );
+ $guestQuoteMaskedId = $this->quoteIdToMaskedId->execute((int)$guestQuote->getId());
+ $guestQuoteItemId = (int)$guestQuote
+ ->getItemByProduct($this->productRepository->get('virtual-product'))
+ ->getId();
+
+ $this->expectExceptionMessage(
+ "The current user cannot perform operations on cart \"$guestQuoteMaskedId\""
+ );
+
+ $query = $this->getQuery($guestQuoteMaskedId, $guestQuoteItemId, 2);
+ $this->graphQlQuery($query, [], '', $this->getHeaderMap());
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Customer/_files/three_customers.php
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_saved.php
+ */
+ public function testUpdateItemInAnotherCustomerCart()
+ {
+ $anotherCustomerQuote = $this->quoteFactory->create();
+ $this->quoteResource->load(
+ $anotherCustomerQuote,
+ 'test_order_with_virtual_product_without_address',
+ 'reserved_order_id'
+ );
+ $anotherCustomerQuote->setCustomerId(2);
+ $this->quoteResource->save($anotherCustomerQuote);
+
+ $anotherCustomerQuoteMaskedId = $this->quoteIdToMaskedId->execute((int)$anotherCustomerQuote->getId());
+ $anotherCustomerQuoteItemId = (int)$anotherCustomerQuote
+ ->getItemByProduct($this->productRepository->get('virtual-product'))
+ ->getId();
+
+ $this->expectExceptionMessage(
+ "The current user cannot perform operations on cart \"$anotherCustomerQuoteMaskedId\""
+ );
+
+ $query = $this->getQuery($anotherCustomerQuoteMaskedId, $anotherCustomerQuoteItemId, 2);
+ $this->graphQlQuery($query, [], '', $this->getHeaderMap());
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Customer/_files/customer.php
+ * @expectedException \Exception
+ * @expectedExceptionMessage Required parameter "cart_id" is missing.
+ */
+ public function testUpdateWithMissedCartItemId()
+ {
+ $query = <<graphQlQuery($query, [], '', $this->getHeaderMap());
+ }
+
+ /**
+ * @param string $input
+ * @param string $message
+ * @dataProvider dataProviderUpdateWithMissedRequiredParameters
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
+ */
+ public function testUpdateWithMissedItemRequiredParameters(string $input, string $message)
+ {
+ $quote = $this->quoteFactory->create();
+ $this->quoteResource->load($quote, 'test_order_1', 'reserved_order_id');
+ $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$quote->getId());
+
+ $query = <<expectExceptionMessage($message);
+ $this->graphQlQuery($query, [], '', $this->getHeaderMap());
+ }
+
+ /**
+ * @return array
+ */
+ public function dataProviderUpdateWithMissedRequiredParameters(): array
+ {
+ return [
+ 'missed_cart_items' => [
+ '',
+ 'Required parameter "cart_items" is missing.'
+ ],
+ 'missed_cart_item_id' => [
+ 'cart_items: [{ quantity: 2 }]',
+ 'Required parameter "cart_item_id" for "cart_items" is missing.'
+ ],
+ 'missed_cart_item_qty' => [
+ 'cart_items: [{ cart_item_id: 1 }]',
+ 'Required parameter "quantity" for "cart_items" is missing.'
+ ],
+ ];
+ }
+
+ /**
+ * @param string $maskedQuoteId
+ * @param int $itemId
+ * @param float $qty
+ * @return string
+ */
+ private function getQuery(string $maskedQuoteId, int $itemId, float $qty): string
+ {
+ return <<customerTokenService->createCustomerAccessToken($username, $password);
+ $headerMap = ['Authorization' => 'Bearer ' . $customerToken];
+ return $headerMap;
+ }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/RemoveItemFromCartTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/RemoveItemFromCartTest.php
index a6b8f05fc0834..a306b29e51197 100644
--- a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/RemoveItemFromCartTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/RemoveItemFromCartTest.php
@@ -73,14 +73,13 @@ public function testRemoveItemFromCart()
public function testRemoveItemFromNonExistentCart()
{
$query = $this->prepareMutationQuery('non_existent_masked_id', 1);
-
$this->graphQlQuery($query);
}
/**
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_simple_product_saved.php
*/
- public function testRemoveNotExistentItem()
+ public function testRemoveNonExistentItem()
{
$quote = $this->quoteFactory->create();
$this->quoteResource->load($quote, 'test_order_with_simple_product_without_address', 'reserved_order_id');
@@ -139,6 +138,49 @@ public function testRemoveItemFromCustomerCart()
$this->graphQlQuery($query);
}
+ /**
+ * @param string $input
+ * @param string $message
+ * @dataProvider dataProviderUpdateWithMissedRequiredParameters
+ */
+ public function testUpdateWithMissedItemRequiredParameters(string $input, string $message)
+ {
+ $query = <<expectExceptionMessage($message);
+ $this->graphQlQuery($query);
+ }
+
+ /**
+ * @return array
+ */
+ public function dataProviderUpdateWithMissedRequiredParameters(): array
+ {
+ return [
+ 'missed_cart_id' => [
+ 'cart_item_id: 1',
+ 'Required parameter "cart_id" is missing.'
+ ],
+ 'missed_cart_item_id' => [
+ 'cart_id: "test"',
+ 'Required parameter "cart_item_id" is missing.'
+ ],
+ ];
+ }
+
/**
* @param string $maskedQuoteId
* @param int $itemId
diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/UpdateCartItemsTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/UpdateCartItemsTest.php
new file mode 100644
index 0000000000000..fca7a4287620b
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/UpdateCartItemsTest.php
@@ -0,0 +1,273 @@
+quoteResource = $objectManager->get(QuoteResource::class);
+ $this->quoteFactory = $objectManager->get(QuoteFactory::class);
+ $this->quoteIdToMaskedId = $objectManager->get(QuoteIdToMaskedQuoteIdInterface::class);
+ $this->productRepository = $objectManager->get(ProductRepositoryInterface::class);
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_simple_product_saved.php
+ */
+ public function testUpdateCartItemQty()
+ {
+ $quote = $this->quoteFactory->create();
+ $this->quoteResource->load($quote, 'test_order_with_simple_product_without_address', 'reserved_order_id');
+ $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$quote->getId());
+ $itemId = (int)$quote->getItemByProduct($this->productRepository->get('simple'))->getId();
+ $qty = 2;
+
+ $query = $this->getQuery($maskedQuoteId, $itemId, $qty);
+ $response = $this->graphQlQuery($query);
+
+ $this->assertArrayHasKey('updateCartItems', $response);
+ $this->assertArrayHasKey('cart', $response['updateCartItems']);
+
+ $responseCart = $response['updateCartItems']['cart'];
+ $item = current($responseCart['items']);
+
+ $this->assertEquals($itemId, $item['id']);
+ $this->assertEquals($qty, $item['qty']);
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_simple_product_saved.php
+ */
+ public function testRemoveCartItemIfQuantityIsZero()
+ {
+ $quote = $this->quoteFactory->create();
+ $this->quoteResource->load($quote, 'test_order_with_simple_product_without_address', 'reserved_order_id');
+ $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$quote->getId());
+ $itemId = (int)$quote->getItemByProduct($this->productRepository->get('simple'))->getId();
+ $qty = 0;
+
+ $query = $this->getQuery($maskedQuoteId, $itemId, $qty);
+ $response = $this->graphQlQuery($query);
+
+ $this->assertArrayHasKey('updateCartItems', $response);
+ $this->assertArrayHasKey('cart', $response['updateCartItems']);
+
+ $responseCart = $response['updateCartItems']['cart'];
+ $this->assertCount(0, $responseCart['items']);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Could not find a cart with ID "non_existent_masked_id"
+ */
+ public function testUpdateItemInNonExistentCart()
+ {
+ $query = $this->getQuery('non_existent_masked_id', 1, 2);
+ $this->graphQlQuery($query);
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_simple_product_saved.php
+ */
+ public function testUpdateNonExistentItem()
+ {
+ $quote = $this->quoteFactory->create();
+ $this->quoteResource->load($quote, 'test_order_with_simple_product_without_address', 'reserved_order_id');
+ $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$quote->getId());
+ $notExistentItemId = 999;
+
+ $this->expectExceptionMessage("Could not find cart item with id: {$notExistentItemId}.");
+
+ $query = $this->getQuery($maskedQuoteId, $notExistentItemId, 2);
+ $this->graphQlQuery($query);
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_simple_product_saved.php
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_virtual_product_saved.php
+ */
+ public function testUpdateItemIfItemIsNotBelongToCart()
+ {
+ $firstQuote = $this->quoteFactory->create();
+ $this->quoteResource->load($firstQuote, 'test_order_with_simple_product_without_address', 'reserved_order_id');
+ $firstQuoteMaskedId = $this->quoteIdToMaskedId->execute((int)$firstQuote->getId());
+
+ $secondQuote = $this->quoteFactory->create();
+ $this->quoteResource->load(
+ $secondQuote,
+ 'test_order_with_virtual_product_without_address',
+ 'reserved_order_id'
+ );
+ $secondQuoteItemId = (int)$secondQuote
+ ->getItemByProduct($this->productRepository->get('virtual-product'))
+ ->getId();
+
+ $this->expectExceptionMessage("Could not find cart item with id: {$secondQuoteItemId}.");
+
+ $query = $this->getQuery($firstQuoteMaskedId, $secondQuoteItemId, 2);
+ $this->graphQlQuery($query);
+ }
+
+ /**
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
+ */
+ public function testUpdateItemFromCustomerCart()
+ {
+ $customerQuote = $this->quoteFactory->create();
+ $this->quoteResource->load($customerQuote, 'test_order_1', 'reserved_order_id');
+ $customerQuoteMaskedId = $this->quoteIdToMaskedId->execute((int)$customerQuote->getId());
+ $customerQuoteItemId = (int)$customerQuote->getItemByProduct($this->productRepository->get('simple'))->getId();
+
+ $this->expectExceptionMessage("The current user cannot perform operations on cart \"$customerQuoteMaskedId\"");
+
+ $query = $this->getQuery($customerQuoteMaskedId, $customerQuoteItemId, 2);
+ $this->graphQlQuery($query);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Required parameter "cart_id" is missing.
+ */
+ public function testUpdateWithMissedCartItemId()
+ {
+ $query = <<graphQlQuery($query);
+ }
+
+ /**
+ * @param string $input
+ * @param string $message
+ * @dataProvider dataProviderUpdateWithMissedRequiredParameters
+ * @magentoApiDataFixture Magento/Checkout/_files/quote_with_simple_product_saved.php
+ */
+ public function testUpdateWithMissedItemRequiredParameters(string $input, string $message)
+ {
+ $quote = $this->quoteFactory->create();
+ $this->quoteResource->load($quote, 'test_order_with_simple_product_without_address', 'reserved_order_id');
+ $maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$quote->getId());
+
+ $query = <<expectExceptionMessage($message);
+ $this->graphQlQuery($query);
+ }
+
+ /**
+ * @return array
+ */
+ public function dataProviderUpdateWithMissedRequiredParameters(): array
+ {
+ return [
+ 'missed_cart_items' => [
+ '',
+ 'Required parameter "cart_items" is missing.'
+ ],
+ 'missed_cart_item_id' => [
+ 'cart_items: [{ quantity: 2 }]',
+ 'Required parameter "cart_item_id" for "cart_items" is missing.'
+ ],
+ 'missed_cart_item_qty' => [
+ 'cart_items: [{ cart_item_id: 1 }]',
+ 'Required parameter "quantity" for "cart_items" is missing.'
+ ],
+ ];
+ }
+
+ /**
+ * @param string $maskedQuoteId
+ * @param int $itemId
+ * @param float $qty
+ * @return string
+ */
+ private function getQuery(string $maskedQuoteId, int $itemId, float $qty): string
+ {
+ return <<graphQlQuery($query);
$this->assertArrayHasKey('urlResolver', $response);
$this->assertEquals($product->getEntityId(), $response['urlResolver']['id']);
- $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']);
+ $this->assertEquals($targetPath, $response['urlResolver']['relative_url']);
$this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']);
}
/**
- * Tests the use case where canonical_url is provided as resolver input in the Query
+ * Tests the use case where relative_url is provided as resolver input in the Query
*
* @magentoApiDataFixture Magento/CatalogUrlRewrite/_files/product_with_category.php
*/
@@ -104,7 +104,7 @@ public function testProductUrlWithCanonicalUrlInput()
urlResolver(url:"{$canonicalPath}")
{
id
- canonical_url
+ relative_url
type
}
}
@@ -112,7 +112,7 @@ public function testProductUrlWithCanonicalUrlInput()
$response = $this->graphQlQuery($query);
$this->assertArrayHasKey('urlResolver', $response);
$this->assertEquals($product->getEntityId(), $response['urlResolver']['id']);
- $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']);
+ $this->assertEquals($targetPath, $response['urlResolver']['relative_url']);
$this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']);
}
@@ -147,7 +147,7 @@ public function testCategoryUrlResolver()
urlResolver(url:"{$urlPath2}")
{
id
- canonical_url
+ relative_url
type
}
}
@@ -155,7 +155,7 @@ public function testCategoryUrlResolver()
$response = $this->graphQlQuery($query);
$this->assertArrayHasKey('urlResolver', $response);
$this->assertEquals($categoryId, $response['urlResolver']['id']);
- $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']);
+ $this->assertEquals($targetPath, $response['urlResolver']['relative_url']);
$this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']);
}
@@ -183,14 +183,14 @@ public function testCMSPageUrlResolver()
urlResolver(url:"{$requestPath}")
{
id
- canonical_url
+ relative_url
type
}
}
QUERY;
$response = $this->graphQlQuery($query);
$this->assertEquals($cmsPageId, $response['urlResolver']['id']);
- $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']);
+ $this->assertEquals($targetPath, $response['urlResolver']['relative_url']);
$this->assertEquals(strtoupper(str_replace('-', '_', $expectedEntityType)), $response['urlResolver']['type']);
}
@@ -226,7 +226,7 @@ public function testProductUrlRewriteResolver()
urlResolver(url:"{$urlPath}")
{
id
- canonical_url
+ relative_url
type
}
}
@@ -234,7 +234,7 @@ public function testProductUrlRewriteResolver()
$response = $this->graphQlQuery($query);
$this->assertArrayHasKey('urlResolver', $response);
$this->assertEquals($product->getEntityId(), $response['urlResolver']['id']);
- $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']);
+ $this->assertEquals($targetPath, $response['urlResolver']['relative_url']);
$this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']);
}
@@ -266,7 +266,7 @@ public function testInvalidUrlResolverInput()
urlResolver(url:"{$urlPath}")
{
id
- canonical_url
+ relative_url
type
}
}
@@ -307,7 +307,7 @@ public function testCategoryUrlWithLeadingSlash()
urlResolver(url:"/{$urlPath}")
{
id
- canonical_url
+ relative_url
type
}
}
@@ -315,7 +315,7 @@ public function testCategoryUrlWithLeadingSlash()
$response = $this->graphQlQuery($query);
$this->assertArrayHasKey('urlResolver', $response);
$this->assertEquals($categoryId, $response['urlResolver']['id']);
- $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']);
+ $this->assertEquals($targetPath, $response['urlResolver']['relative_url']);
$this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']);
}
@@ -344,7 +344,7 @@ public function testResolveSlash()
urlResolver(url:"/")
{
id
- canonical_url
+ relative_url
type
}
}
@@ -352,7 +352,7 @@ public function testResolveSlash()
$response = $this->graphQlQuery($query);
$this->assertArrayHasKey('urlResolver', $response);
$this->assertEquals($homePageId, $response['urlResolver']['id']);
- $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']);
+ $this->assertEquals($targetPath, $response['urlResolver']['relative_url']);
$this->assertEquals('CMS_PAGE', $response['urlResolver']['type']);
}
}