Skip to content

Commit 85fe37f

Browse files
authored
ENGCOM-5372: Fix for config variant stock 736 #747
2 parents 506c4de + 67a49dd commit 85fe37f

File tree

2 files changed

+112
-20
lines changed

2 files changed

+112
-20
lines changed

app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@
99

1010
use Magento\Catalog\Api\Data\ProductInterface;
1111
use Magento\Catalog\Model\Product;
12-
use Magento\Catalog\Model\ProductFactory;
1312
use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection as ChildCollection;
1413
use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory;
1514
use Magento\Framework\EntityManager\MetadataPool;
1615
use Magento\Framework\Api\SearchCriteriaBuilder;
17-
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product as DataProvider;
16+
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Product\CollectionProcessorInterface;
1817

1918
/**
2019
* Collection for fetching configurable child product data.
@@ -26,21 +25,11 @@ class Collection
2625
*/
2726
private $childCollectionFactory;
2827

29-
/**
30-
* @var ProductFactory
31-
*/
32-
private $productFactory;
33-
3428
/**
3529
* @var SearchCriteriaBuilder
3630
*/
3731
private $searchCriteriaBuilder;
3832

39-
/**
40-
* @var DataProvider
41-
*/
42-
private $productDataProvider;
43-
4433
/**
4534
* @var MetadataPool
4635
*/
@@ -61,25 +50,27 @@ class Collection
6150
*/
6251
private $attributeCodes = [];
6352

53+
/**
54+
* @var CollectionProcessorInterface
55+
*/
56+
private $collectionProcessor;
57+
6458
/**
6559
* @param CollectionFactory $childCollectionFactory
66-
* @param ProductFactory $productFactory
6760
* @param SearchCriteriaBuilder $searchCriteriaBuilder
68-
* @param DataProvider $productDataProvider
6961
* @param MetadataPool $metadataPool
62+
* @param CollectionProcessorInterface $collectionProcessor
7063
*/
7164
public function __construct(
7265
CollectionFactory $childCollectionFactory,
73-
ProductFactory $productFactory,
7466
SearchCriteriaBuilder $searchCriteriaBuilder,
75-
DataProvider $productDataProvider,
76-
MetadataPool $metadataPool
67+
MetadataPool $metadataPool,
68+
CollectionProcessorInterface $collectionProcessor
7769
) {
7870
$this->childCollectionFactory = $childCollectionFactory;
79-
$this->productFactory = $productFactory;
8071
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
81-
$this->productDataProvider = $productDataProvider;
8272
$this->metadataPool = $metadataPool;
73+
$this->collectionProcessor = $collectionProcessor;
8374
}
8475

8576
/**
@@ -148,7 +139,11 @@ private function fetch() : array
148139
/** @var ChildCollection $childCollection */
149140
$childCollection = $this->childCollectionFactory->create();
150141
$childCollection->setProductFilter($product);
151-
$childCollection->addAttributeToSelect($attributeData);
142+
$this->collectionProcessor->process(
143+
$childCollection,
144+
$this->searchCriteriaBuilder->create(),
145+
$attributeData
146+
);
152147

153148
/** @var Product $childProduct */
154149
foreach ($childCollection->getItems() as $childProduct) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\GraphQl\ConfigurableProduct;
9+
10+
use Magento\TestFramework\TestCase\GraphQlAbstract;
11+
use Magento\TestFramework\Helper\Bootstrap;
12+
use Magento\CatalogInventory\Api\StockRegistryInterface;
13+
14+
/**
15+
* Checks if stock status correctly displays for configurable variants.
16+
*/
17+
class ConfigurableProductStockStatusTest extends GraphQlAbstract
18+
{
19+
/**
20+
* @var StockRegistryInterface
21+
*/
22+
private $stockRegistry;
23+
24+
/**
25+
* @inheritdoc
26+
*/
27+
protected function setUp()
28+
{
29+
$this->stockRegistry = Bootstrap::getObjectManager()->create(StockRegistryInterface::class);
30+
}
31+
32+
/**
33+
* @magentoApiDataFixture Magento/Framework/Search/_files/product_configurable.php
34+
* @magentoConfigFixture default_store cataloginventory/options/show_out_of_stock 1
35+
*/
36+
public function testConfigurableProductShowOutOfStock()
37+
{
38+
$this->markTestIncomplete('https://github.com/magento/graphql-ce/issues/167');
39+
$parentSku = 'configurable';
40+
$childSkuOutOfStock = 'simple_1010';
41+
$stockItem = $this->stockRegistry->getStockItemBySku($childSkuOutOfStock);
42+
$stockItem->setQty(0);
43+
$this->stockRegistry->updateStockItemBySku($childSkuOutOfStock, $stockItem);
44+
$query = $this->getQuery($parentSku);
45+
$response = $this->graphQlQuery($query);
46+
$this->assertArraySubset(
47+
[['product' => ['sku' => $childSkuOutOfStock, 'stock_status' => 'OUT_OF_STOCK']]],
48+
$response['products']['items'][0]['variants']
49+
);
50+
}
51+
52+
/**
53+
* @magentoApiDataFixture Magento/Framework/Search/_files/product_configurable.php
54+
* @magentoConfigFixture default_store cataloginventory/options/show_out_of_stock 0
55+
*/
56+
public function testConfigurableProductDoNotShowOutOfStock()
57+
{
58+
$this->markTestIncomplete('https://github.com/magento/graphql-ce/issues/167');
59+
$parentSku = 'configurable';
60+
$childSkuOutOfStock = 'simple_1010';
61+
$stockItem = $this->stockRegistry->getStockItemBySku($childSkuOutOfStock);
62+
$stockItem->setQty(0);
63+
$this->stockRegistry->updateStockItemBySku($childSkuOutOfStock, $stockItem);
64+
$query = $this->getQuery($parentSku);
65+
$response = $this->graphQlQuery($query);
66+
$this->assertEquals(
67+
[['product' => ['sku' => 'simple_1020', 'stock_status' => 'IN_STOCK']]],
68+
$response['products']['items'][0]['variants']
69+
);
70+
}
71+
72+
/**
73+
* @param string $sku
74+
* @return string
75+
*/
76+
private function getQuery(string $sku)
77+
{
78+
return <<<QUERY
79+
{
80+
products(filter: {sku: {eq: "{$sku}"}})
81+
{
82+
items {
83+
sku
84+
... on ConfigurableProduct {
85+
variants {
86+
product {
87+
sku
88+
stock_status
89+
}
90+
}
91+
}
92+
}
93+
}
94+
}
95+
QUERY;
96+
}
97+
}

0 commit comments

Comments
 (0)