Skip to content

Commit 8ff8dbe

Browse files
MC-40379: [Magento Cloud] - [vodacom]-Upsell,Cross Sell Products are visible in Graphql Response even those the product is disabled
1 parent 8631818 commit 8ff8dbe

File tree

4 files changed

+140
-1
lines changed

4 files changed

+140
-1
lines changed

app/code/Magento/CatalogGraphQl/Model/Resolver/Products/DataProvider/Product.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public function getList(
8989

9090
$this->collectionPreProcessor->process($collection, $searchCriteria, $attributes, $context);
9191

92-
if (!$isChildSearch) {
92+
if ($isChildSearch) {
9393
$visibilityIds = $isSearch
9494
? $this->visibility->getVisibleInSearchIds()
9595
: $this->visibility->getVisibleInCatalogIds();

dev/tests/api-functional/testsuite/Magento/GraphQl/RelatedProduct/GetRelatedProductsTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,40 @@ private function assertRelatedProducts(array $relatedProducts): void
190190
self::assertEquals($product['url_key'], $productExpectedData['url_key']);
191191
}
192192
}
193+
194+
/**
195+
* Test query with disabled linked product in the default store
196+
*
197+
* @magentoApiDataFixture Magento/Catalog/_files/products_related_disabled_in_store.php
198+
*
199+
* @return void
200+
*/
201+
public function testQueryDisableRelatedProductInStore(): void
202+
{
203+
$productSku = 'simple_with_related';
204+
$query = <<<QUERY
205+
{
206+
products(filter: {sku: {eq: "{$productSku}"}})
207+
{
208+
items {
209+
related_products
210+
{
211+
sku
212+
name
213+
url_key
214+
}
215+
}
216+
}
217+
}
218+
QUERY;
219+
$response = $this->graphQlQuery($query, [], '', ['Store' => 'default']);
220+
221+
self::assertArrayHasKey('products', $response);
222+
self::assertArrayHasKey('items', $response['products']);
223+
self::assertCount(1, $response['products']['items']);
224+
self::assertArrayHasKey(0, $response['products']['items']);
225+
self::assertArrayHasKey('related_products', $response['products']['items'][0]);
226+
$relatedProducts = $response['products']['items'][0]['related_products'];
227+
self::assertCount(0, $relatedProducts);
228+
}
193229
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
use Magento\Catalog\Api\Data\ProductInterfaceFactory;
8+
use Magento\Catalog\Api\ProductRepositoryInterface;
9+
use Magento\Catalog\Model\Product;
10+
use Magento\Catalog\Model\Product\Attribute\Source\Status;
11+
use Magento\Catalog\Model\Product\Type;
12+
use Magento\Catalog\Model\Product\Visibility;
13+
use Magento\Eav\Model\Config;
14+
use Magento\Store\Api\WebsiteRepositoryInterface;
15+
use Magento\Store\Model\StoreManagerInterface;
16+
use Magento\Catalog\Api\Data\ProductLinkInterface;
17+
use Magento\TestFramework\Helper\Bootstrap;
18+
19+
$objectManager = Bootstrap::getObjectManager();
20+
/** @var WebsiteRepositoryInterface $websiteRepository */
21+
$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class);
22+
$baseWebsite = $websiteRepository->get('base');
23+
/** @var StoreManagerInterface $storeManager */
24+
$storeManager = $objectManager->get(StoreManagerInterface::class);
25+
$defaultAttributeSet = $objectManager->get(Config::class)->getEntityType(Product::ENTITY)->getDefaultAttributeSetId();
26+
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
27+
/** @var ProductInterfaceFactory $productInterfaceFactory */
28+
$productInterfaceFactory = $objectManager->get(ProductInterfaceFactory::class);
29+
30+
/** @var Product $product */
31+
$product = $productInterfaceFactory->create();
32+
$product->setTypeId(Type::TYPE_SIMPLE)
33+
->setAttributeSetId($defaultAttributeSet)
34+
->setStoreId($storeManager->getDefaultStoreView()->getId())
35+
->setWebsiteIds([$baseWebsite->getId()])
36+
->setName('Simple Product')
37+
->setSku('simple')
38+
->setPrice(10)
39+
->setWeight(18)
40+
->setStockData(['use_config_manage_stock' => 0])
41+
->setVisibility(Visibility::VISIBILITY_BOTH)
42+
->setStatus(Status::STATUS_ENABLED);
43+
44+
$simple = $productRepository->save($product);
45+
$simple->setStoreId($storeManager->getDefaultStoreView()->getId())
46+
->setStatus(Status::STATUS_DISABLED);
47+
$productRepository->save($simple);
48+
/** @var ProductLinkInterface $productLink */
49+
$productLink = $objectManager->create(ProductLinkInterface::class);
50+
$productLink->setSku('simple_with_related');
51+
$productLink->setLinkedProductSku('simple');
52+
$productLink->setPosition(1);
53+
$productLink->setLinkType('related');
54+
55+
/** @var Product $product */
56+
$product = $productInterfaceFactory->create();
57+
$product->setTypeId(Type::TYPE_SIMPLE)
58+
->setAttributeSetId($defaultAttributeSet)
59+
->setStoreId($storeManager->getDefaultStoreView()->getId())
60+
->setWebsiteIds([$baseWebsite->getId()])
61+
->setName('Simple Product With Related Product')
62+
->setSku('simple_with_related')
63+
->setPrice(10)
64+
->setWeight(18)
65+
->setProductLinks([$productLink])
66+
->setStockData(['use_config_manage_stock' => 0])
67+
->setVisibility(Visibility::VISIBILITY_BOTH)
68+
->setStatus(Status::STATUS_ENABLED);
69+
70+
$productRepository->save($product);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
/** @var \Magento\Framework\Registry $registry */
10+
$registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class);
11+
12+
$registry->unregister('isSecureArea');
13+
$registry->register('isSecureArea', true);
14+
15+
/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */
16+
$productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class);
17+
18+
try {
19+
$firstProduct = $productRepository->get('simple', false, null, true);
20+
$productRepository->delete($firstProduct);
21+
} catch (\Magento\Framework\Exception\NoSuchEntityException $exception) {
22+
//Product already removed
23+
}
24+
25+
try {
26+
$secondProduct = $productRepository->get('simple_with_related', false, null, true);
27+
$productRepository->delete($secondProduct);
28+
} catch (\Magento\Framework\Exception\NoSuchEntityException $exception) {
29+
//Product already removed
30+
}
31+
32+
$registry->unregister('isSecureArea');
33+
$registry->register('isSecureArea', false);

0 commit comments

Comments
 (0)