Skip to content

Commit e46a835

Browse files
committed
ACP2E-948: Product listing GraphQL query limited to total_count 10,000 products only
1 parent eb5e850 commit e46a835

File tree

3 files changed

+56
-47
lines changed

3 files changed

+56
-47
lines changed

app/code/Magento/CatalogGraphQl/Test/Unit/DataProvider/Product/SearchCriteriaBuilderTest.php

Lines changed: 54 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,22 @@
77

88
namespace Magento\CatalogGraphQl\Test\Unit\DataProvider\Product;
99

10-
use Magento\Catalog\Model\Product;
10+
use Magento\Catalog\Api\ProductAttributeRepositoryInterface;
1111
use Magento\Catalog\Model\Product\Visibility;
1212
use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
1313
use Magento\CatalogGraphQl\DataProvider\Product\RequestDataBuilder;
1414
use Magento\CatalogGraphQl\DataProvider\Product\SearchCriteriaBuilder;
15-
use Magento\Eav\Model\Config;
15+
use Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection\SearchCriteriaResolverFactory;
16+
use Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection\SearchCriteriaResolverInterface;
1617
use Magento\Framework\Api\Filter;
1718
use Magento\Framework\Api\FilterBuilder;
1819
use Magento\Framework\Api\Search\FilterGroupBuilder;
19-
use Magento\Framework\Api\Search\SearchCriteriaInterface;
20+
use Magento\Framework\Api\Search\SearchCriteria;
2021
use Magento\Framework\Api\SortOrderBuilder;
2122
use Magento\Framework\App\Config\ScopeConfigInterface;
22-
use Magento\Framework\GraphQl\Query\Resolver\Argument\SearchCriteria\Builder;
23+
use Magento\Framework\GraphQl\Query\Resolver\Argument\SearchCriteria\ArgumentApplierPool;
2324
use Magento\Framework\Search\Request\Config as SearchConfig;
24-
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
25+
use PHPUnit\Framework\MockObject\MockObject;
2526
use PHPUnit\Framework\TestCase;
2627

2728
/**
@@ -32,32 +33,27 @@
3233
class SearchCriteriaBuilderTest extends TestCase
3334
{
3435
/**
35-
* @var ScopeConfigInterface
36+
* @var ScopeConfigInterface|MockObject
3637
*/
3738
private ScopeConfigInterface $scopeConfig;
3839

3940
/**
40-
* @var FilterBuilder
41+
* @var FilterBuilder|MockObject
4142
*/
4243
private FilterBuilder $filterBuilder;
4344

4445
/**
45-
* @var FilterGroupBuilder
46+
* @var FilterGroupBuilder|MockObject
4647
*/
4748
private FilterGroupBuilder $filterGroupBuilder;
4849

4950
/**
50-
* @var Builder
51-
*/
52-
private Builder $builder;
53-
54-
/**
55-
* @var Visibility
51+
* @var Visibility|MockObject
5652
*/
5753
private Visibility $visibility;
5854

5955
/**
60-
* @var SortOrderBuilder
56+
* @var SortOrderBuilder|MockObject
6157
*/
6258
private SortOrderBuilder $sortOrderBuilder;
6359

@@ -67,43 +63,58 @@ class SearchCriteriaBuilderTest extends TestCase
6763
private SearchCriteriaBuilder $model;
6864

6965
/**
70-
* @var Config
66+
* @var ProductAttributeRepositoryInterface|MockObject
67+
*/
68+
private ProductAttributeRepositoryInterface $productAttributeRepository;
69+
70+
/**
71+
* @var SearchConfig|MockObject
7172
*/
72-
private Config $eavConfig;
73+
private SearchConfig $searchConfig;
74+
75+
/**
76+
* @var RequestDataBuilder|MockObject
77+
*/
78+
private RequestDataBuilder $localData;
79+
80+
/**
81+
* @var SearchCriteriaResolverFactory|MockObject
82+
*/
83+
private SearchCriteriaResolverFactory $criteriaResolverFactory;
84+
85+
/**
86+
* @var ArgumentApplierPool|MockObject
87+
*/
88+
private ArgumentApplierPool $argumentApplierPool;
7389

7490
/**
7591
* @inheritdoc
7692
*/
7793
protected function setUp(): void
7894
{
7995
parent::setUp();
80-
$objectManagerHelper = new ObjectManagerHelper($this);
81-
$objects = [
82-
[
83-
SearchConfig::class,
84-
$this->createMock(SearchConfig::class)
85-
],
86-
[
87-
RequestDataBuilder::class,
88-
$this->createMock(RequestDataBuilder::class)
89-
]
90-
];
91-
$objectManagerHelper->prepareObjectManager($objects);
92-
$this->builder = $this->createMock(Builder::class);
96+
9397
$this->scopeConfig = $this->createMock(ScopeConfigInterface::class);
9498
$this->filterBuilder = $this->createMock(FilterBuilder::class);
9599
$this->filterGroupBuilder = $this->createMock(FilterGroupBuilder::class);
96100
$this->sortOrderBuilder = $this->createMock(SortOrderBuilder::class);
97101
$this->visibility = $this->createMock(Visibility::class);
98-
$this->eavConfig = $this->createMock(Config::class);
102+
$this->productAttributeRepository = $this->createMock(ProductAttributeRepositoryInterface::class);
103+
$this->searchConfig = $this->createMock(SearchConfig::class);
104+
$this->localData = $this->createMock(RequestDataBuilder::class);
105+
$this->criteriaResolverFactory = $this->createMock(SearchCriteriaResolverFactory::class);
106+
$this->argumentApplierPool = $this->createMock(ArgumentApplierPool::class);
99107
$this->model = new SearchCriteriaBuilder(
100-
$this->builder,
101108
$this->scopeConfig,
102109
$this->filterBuilder,
103110
$this->filterGroupBuilder,
104111
$this->visibility,
105112
$this->sortOrderBuilder,
106-
$this->eavConfig
113+
$this->productAttributeRepository,
114+
$this->searchConfig,
115+
$this->localData,
116+
$this->criteriaResolverFactory,
117+
$this->argumentApplierPool,
107118
);
108119
}
109120

@@ -112,24 +123,24 @@ public function testBuild(): void
112123
$args = ['search' => '', 'pageSize' => 20, 'currentPage' => 1];
113124

114125
$filter = $this->createMock(Filter::class);
115-
116-
$searchCriteria = $this->getMockBuilder(SearchCriteriaInterface::class)
117-
->disableOriginalConstructor()
118-
->getMockForAbstractClass();
126+
$searchCriteria = $this->createMock(SearchCriteria::class);
119127
$attributeInterface = $this->getMockBuilder(Attribute::class)
120128
->disableOriginalConstructor()
121129
->getMockForAbstractClass();
122130

123131
$attributeInterface->setData(['is_filterable' => 0]);
124132

125-
$this->builder->expects($this->any())
126-
->method('build')
127-
->with('products', $args)
133+
$searchCriteriaResolver = $this->createMock(SearchCriteriaResolverInterface::class);
134+
$this->criteriaResolverFactory->expects(self::once())
135+
->method('create')
136+
->willReturn($searchCriteriaResolver);
137+
$searchCriteriaResolver->expects(self::once())
138+
->method('resolve')
128139
->willReturn($searchCriteria);
129140
$searchCriteria->expects($this->any())->method('getFilterGroups')->willReturn([]);
130-
$this->eavConfig->expects($this->any())
131-
->method('getAttribute')
132-
->with(Product::ENTITY, 'price')
141+
$this->productAttributeRepository->expects(self::once())
142+
->method('get')
143+
->with('price')
133144
->willReturn($attributeInterface);
134145
$sortOrderList = ['relevance', 'entity_id'];
135146

@@ -149,8 +160,6 @@ public function testBuild(): void
149160
->method('create')
150161
->willReturn([]);
151162

152-
$filterOrderList = ['search_term', 'visibility'];
153-
154163
$this->filterBuilder->expects($this->exactly(2))
155164
->method('setField')
156165
->willReturnCallback(function ($filterOrderList) {

app/code/Magento/CatalogGraphQl/Test/Unit/Model/Resolver/Products/Query/SearchTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ protected function setUp(): void
119119

120120
public function testPopulateSearchQueryStats(): void
121121
{
122-
$args = ['search' => 'test'];
122+
$args = ['search' => 'test', 'pageSize' => 10, 'currentPage' => 1];
123123
$context = $this->getMockBuilder(ContextInterface::class)
124124
->disableOriginalConstructor()
125125
->getMockForAbstractClass();

app/code/Magento/Elasticsearch/Model/ResourceModel/Fulltext/Collection/SearchCriteriaResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public function __construct(
5353
string $searchRequestName,
5454
int $currentPage,
5555
int $size,
56-
?array $orders
56+
?array $orders = null
5757
) {
5858
$this->builder = $builder;
5959
$this->searchRequestName = $searchRequestName;

0 commit comments

Comments
 (0)