Skip to content

Commit 8b8d520

Browse files
author
Oleksandr Iegorov
committed
ACP2E-68: Search terms queries via graphQL are not populated in popular search terms in admin
1 parent cb6c0d5 commit 8b8d520

File tree

1 file changed

+171
-0
lines changed
  • app/code/Magento/CatalogGraphQl/Test/Unit/Model/Resolver/Products/Qurery

1 file changed

+171
-0
lines changed
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
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\CatalogGraphQl\Test\Unit\Model\Resolver\Products\Query;
9+
10+
use Magento\Framework\Api\Search\SearchCriteriaInterface;
11+
use Magento\Framework\Api\Search\SearchResultInterface;
12+
use Magento\Framework\GraphQl\Query\Resolver\ArgumentsProcessorInterface;
13+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
14+
use Magento\GraphQl\Model\Query\ContextInterface;
15+
use Magento\GraphQl\Model\Query\ContextExtensionInterface;
16+
use Magento\CatalogGraphQl\Model\Resolver\Products\SearchResultFactory;
17+
use Magento\CatalogGraphQl\Model\Resolver\Products\Query\FieldSelection;
18+
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\ProductSearch;
19+
use Magento\CatalogGraphQl\DataProvider\Product\SearchCriteriaBuilder;
20+
use Magento\CatalogGraphQl\Model\Resolver\Products\Query\Search;
21+
use Magento\Search\Model\QueryFactory;
22+
use Magento\Search\Model\Query;
23+
use Magento\Search\Model\Search\PageSizeProvider;
24+
use Magento\Search\Api\SearchInterface;
25+
use Magento\Store\Api\Data\StoreInterface;
26+
use PHPUnit\Framework\MockObject\MockObject;
27+
use PHPUnit\Framework\TestCase;
28+
29+
30+
/**
31+
* Test for fulltext search query
32+
*/
33+
class SearchTest extends TestCase
34+
{
35+
/**
36+
* @var SearchInterface|MockObject
37+
*/
38+
private $search;
39+
40+
/**
41+
* @var SearchResultFactory|MockObject
42+
*/
43+
private $searchResultFactory;
44+
45+
/**
46+
* @var PageSizeProvider|MockObject
47+
*/
48+
private $pageSizeProvider;
49+
50+
/**
51+
* @var FieldSelection|MockObject
52+
*/
53+
private $fieldSelection;
54+
55+
/**
56+
* @var ArgumentsProcessorInterface|MockObject
57+
*/
58+
private $argsSelection;
59+
60+
/**
61+
* @var ProductSearch|MockObject
62+
*/
63+
private $productsProvider;
64+
65+
/**
66+
* @var SearchCriteriaBuilder|MockObject
67+
*/
68+
private $searchCriteriaBuilder;
69+
70+
/**
71+
* @var QueryFactory|MockObject
72+
*/
73+
private $queryFactory;
74+
75+
/**
76+
* @var Search
77+
*/
78+
private $model;
79+
80+
/**
81+
* @inheritdoc
82+
*/
83+
protected function setUp(): void
84+
{
85+
parent::setUp();
86+
$this->search = $this->getMockBuilder(SearchInterface::class)
87+
->disableOriginalConstructor()
88+
->getMockForAbstractClass();
89+
$this->searchResultFactory = $this->getMockBuilder(SearchResultFactory::class)
90+
->disableOriginalConstructor()
91+
->getMock();
92+
$this->pageSizeProvider = $this->getMockBuilder(PageSizeProvider::class)
93+
->disableOriginalConstructor()
94+
->getMock();
95+
$this->fieldSelection = $this->getMockBuilder(FieldSelection::class)
96+
->disableOriginalConstructor()
97+
->getMock();
98+
$this->argsSelection = $this->getMockBuilder(ArgumentsProcessorInterface::class)
99+
->disableOriginalConstructor()
100+
->getMockForAbstractClass();
101+
$this->productsProvider = $this->getMockBuilder(ProductSearch::class)
102+
->disableOriginalConstructor()
103+
->getMock();
104+
$this->searchCriteriaBuilder = $this->getMockBuilder(SearchCriteriaBuilder::class)
105+
->disableOriginalConstructor()
106+
->getMock();
107+
$this->queryFactory = $this->getMockBuilder(QueryFactory::class)
108+
->disableOriginalConstructor()
109+
->getMock();
110+
$this->model = new Search(
111+
$this->search,
112+
$this->searchResultFactory,
113+
$this->pageSizeProvider,
114+
$this->fieldSelection,
115+
$this->productsProvider,
116+
$this->searchCriteriaBuilder,
117+
$this->argsSelection,
118+
$this->queryFactory
119+
);
120+
}
121+
122+
public function testPopulateSearchQueryStats(): void
123+
{
124+
$args = ['search' => 'test'];
125+
$storeId = 1;
126+
127+
$context = $this->getMockBuilder(ContextInterface::class)
128+
->disableOriginalConstructor()
129+
->getMockForAbstractClass();
130+
$resolveInfo = $this->getMockBuilder(ResolveInfo::class)
131+
->disableOriginalConstructor()
132+
->getMock();
133+
$searchCriteria = $this->getMockBuilder(SearchCriteriaInterface::class)
134+
->disableOriginalConstructor()
135+
->getMockForAbstractClass();
136+
$this->searchCriteriaBuilder->expects($this->any())
137+
->method('build')
138+
->willReturn($searchCriteria);
139+
$results = $this->getMockBuilder(SearchResultInterface::class)
140+
->disableOriginalConstructor()
141+
->getMockForAbstractClass();
142+
$this->search->expects($this->once())
143+
->method('search')
144+
->with($searchCriteria)
145+
->willReturn($results);
146+
$query = $this->getMockBuilder(Query::class)
147+
->disableOriginalConstructor()
148+
->getMock();
149+
$query->expects($this->once())->method('setStoreId')->with($storeId);
150+
$query->expects($this->once())->method('saveIncrementalPopularity');
151+
$query->expects($this->once())->method('saveNumResults');
152+
$this->queryFactory->expects($this->once())
153+
->method('get')
154+
->willReturn($query);
155+
$extensionAttributes = $this->getMockBuilder(ContextExtensionInterface::class)
156+
->disableOriginalConstructor()
157+
->getMockForAbstractClass();
158+
$context->expects($this->any())
159+
->method('getExtensionAttributes')
160+
->willReturn($extensionAttributes);
161+
$store = $this->getMockBuilder(StoreInterface::class)
162+
->disableOriginalConstructor()
163+
->getMockForAbstractClass();
164+
$store->expects($this->any())->method('getId')->willReturn($storeId);
165+
$extensionAttributes->expects($this->any())->method('getStore')->willReturn($store);
166+
$this->productsProvider->expects($this->any())->method('getList')->willReturn($results);
167+
$results->expects($this->any())->method('getItems')->willReturn([]);
168+
169+
$this->model->getResult($args, $resolveInfo, $context);
170+
}
171+
}

0 commit comments

Comments
 (0)