Skip to content

Commit 5375459

Browse files
committed
MC-42781: [Magento Cloud][Premier Support] Graphql request can add product to cart that is NOT assigned to a website of a multi site store
1 parent 73c1946 commit 5375459

File tree

3 files changed

+68
-1
lines changed

3 files changed

+68
-1
lines changed

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

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,39 @@ public function testAddProductWithWrongQuantity(int $quantity, string $message)
199199
);
200200
}
201201

202+
/**
203+
* @magentoApiDataFixture Magento/Catalog/_files/products_with_websites_and_stores.php
204+
* @magentoApiDataFixture Magento/Checkout/_files/active_quote.php
205+
* @magentoApiDataFixture Magento/Checkout/_files/active_quote_not_default_website.php
206+
* @dataProvider addProductNotAssignedToWebsiteDataProvider
207+
* @param string $reservedOrderId
208+
* @param string $sku
209+
* @param array $headerMap
210+
*/
211+
public function testAddProductNotAssignedToWebsite(string $reservedOrderId, string $sku, array $headerMap)
212+
{
213+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute($reservedOrderId);
214+
$query = $this->getAddToCartMutation($maskedQuoteId, 1, $sku);
215+
$response = $this->graphQlMutation($query, [], '', $headerMap);
216+
self::assertEmpty($response['addProductsToCart']['cart']['items']);
217+
self::assertArrayHasKey('user_errors', $response['addProductsToCart']);
218+
self::assertCount(1, $response['addProductsToCart']['user_errors']);
219+
self::assertStringContainsString($sku, $response['addProductsToCart']['user_errors'][0]['message']);
220+
self::assertEquals('PRODUCT_NOT_FOUND', $response['addProductsToCart']['user_errors'][0]['code']);
221+
}
222+
223+
/**
224+
* @return array
225+
*/
226+
public function addProductNotAssignedToWebsiteDataProvider(): array
227+
{
228+
return [
229+
['test_order_1', 'simple-2', []],
230+
['test_order_1', 'simple-2', ['Store' => 'default']],
231+
['test_order_2', 'simple-1', ['Store' => 'fixture_second_store']],
232+
];
233+
}
234+
202235
/**
203236
* @return array
204237
*/
@@ -246,7 +279,7 @@ private function getAddToCartMutation(
246279
string $maskedQuoteId,
247280
int $qty,
248281
string $sku,
249-
string $customizableOptions
282+
string $customizableOptions = ''
250283
): string {
251284
return <<<MUTATION
252285
mutation {
@@ -279,6 +312,7 @@ private function getAddToCartMutation(
279312
}
280313
},
281314
user_errors {
315+
code
282316
message
283317
}
284318
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
8+
9+
$storeRepository = $objectManager->get(\Magento\Store\Api\StoreRepositoryInterface::class);
10+
$store = $storeRepository->get('fixture_second_store');
11+
12+
$quote = $objectManager->create(\Magento\Quote\Model\Quote::class)
13+
->setReservedOrderId('test_order_2')
14+
->setStoreId($store->getId())
15+
->setIsActive(true);
16+
$quoteRepository = $objectManager->get(\Magento\Quote\Api\CartRepositoryInterface::class);
17+
$quoteRepository->save($quote);
18+
19+
$quoteIdMask = $objectManager->create(\Magento\Quote\Model\QuoteIdMask::class)
20+
->setQuoteId($quote->getId())
21+
->setDataChanges(true);
22+
$quoteIdMaskResource = $objectManager->get(\Magento\Quote\Model\ResourceModel\Quote\QuoteIdMask::class);
23+
$quoteIdMaskResource->save($quoteIdMask);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
$quote = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
8+
->create(\Magento\Quote\Model\Quote::class);
9+
$quote->load('test_order_2', 'reserved_order_id')
10+
->delete();

0 commit comments

Comments
 (0)