9 use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory;
13 use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
31 private $aliasResolver;
41 private $filterExtractorMock;
46 private $filterStrategy;
53 ->disableOriginalConstructor()
57 ->disableOriginalConstructor()
60 $attributeCollectionFactory = $this->getMockBuilder(CollectionFactory::class)
61 ->setMethods([
'create'])
62 ->disableOriginalConstructor()
66 ->setMethods([
'getAttribute'])
67 ->disableOriginalConstructor()
70 $scopeConfig = $this->getMockBuilder(ScopeConfigInterface::class)
71 ->disableOriginalConstructor()
72 ->getMockForAbstractClass();
74 $this->aliasResolver = $this->getMockBuilder(AliasResolver::class)
75 ->disableOriginalConstructor()
78 $this->filterExtractorMock = $this->getMockBuilder(FiltersExtractor::class)
79 ->disableOriginalConstructor()
82 $this->filterStrategy = $this->getMockBuilder(FilterStrategyInterface::class)
83 ->disableOriginalConstructor()
84 ->getMockForAbstractClass();
87 \
Magento\CatalogSearch\Model\Search\TableMapper::class,
91 'attributeCollectionFactory' => $attributeCollectionFactory,
93 'scopeConfig' => $scopeConfig,
94 'filterStrategy' => $this->filterStrategy,
95 'aliasResolver' => $this->aliasResolver,
96 'filtersExtractor' => $this->filterExtractorMock
103 $select = $this->getSelectMock();
105 $query = $this->getQueryMock();
111 $this->filterExtractorMock
112 ->method(
'extractFiltersFromQuery')
117 ->expects($this->never())
118 ->method(
'getAlias');
120 $this->filterStrategy
121 ->expects($this->never())
129 $select = $this->getSelectMock();
131 $query = $this->getQueryMock();
132 $filters = $this->getDifferentFiltersMock();
138 $this->filterExtractorMock
139 ->method(
'extractFiltersFromQuery')
143 $consecutiveFilters = array_map(
151 ->expects($this->exactly(count(
$filters)))
153 ->withConsecutive(...$consecutiveFilters)
154 ->willReturnCallback(
156 return $filter->getField() .
'_alias';
160 $consecutiveFilters = array_map(
161 function ($filter) use (
$select) {
167 $this->filterStrategy
168 ->expects($this->exactly(count(
$filters)))
170 ->withConsecutive(...$consecutiveFilters)
178 $select = $this->getSelectMock();
180 $query = $this->getQueryMock();
181 $filters = $this->getSameFiltersMock();
188 $this->filterExtractorMock
189 ->method(
'extractFiltersFromQuery')
193 $consecutiveFilters = array_map(
201 ->expects($this->exactly(count(
$filters)))
203 ->withConsecutive(...$consecutiveFilters)
204 ->willReturnCallback(
206 return $filter->getField() .
'_alias';
210 $consecutiveUniqueFilters = array_map(
211 function ($filter) use (
$select) {
217 $this->filterStrategy
218 ->expects($this->exactly(count($uniqueFilters)))
220 ->withConsecutive(...$consecutiveUniqueFilters)
228 $select = $this->getSelectMock();
230 $query = $this->getQueryMock();
231 $filters = $this->getSameFiltersMock();
237 $this->filterExtractorMock
238 ->method(
'extractFiltersFromQuery')
242 $consecutiveFilters = array_map(
250 ->expects($this->exactly(count(
$filters)))
252 ->withConsecutive(...$consecutiveFilters)
253 ->willReturnCallback(
255 return $filter->getField() .
'_alias';
259 $consecutiveFilters = array_map(
260 function ($filter) use (
$select) {
266 $this->filterStrategy
267 ->expects($this->exactly(count(
$filters)))
269 ->withConsecutive(...$consecutiveFilters)
270 ->willReturnCallback(
272 return !($filter->
getName() ===
'name1' || $filter->
getName() ===
'name3')
284 private function getSelectMock()
286 return $this->getMockBuilder(\
Magento\Framework\DB\Select::class)
287 ->disableOriginalConstructor()
294 private function getRequestMock()
296 return $this->getMockBuilder(\
Magento\Framework\Search\RequestInterface::class)
297 ->disableOriginalConstructor()
304 private function getQueryMock()
306 return $this->getMockBuilder(QueryInterface::class)
307 ->disableOriginalConstructor()
308 ->getMockForAbstractClass();
314 private function getDifferentFiltersMock()
316 $visibilityFilter = $this->getMockBuilder(Term::class)
317 ->setConstructorArgs([
'name1',
'value1',
'visibility'])
321 $customFilter = $this->getMockBuilder(Term::class)
322 ->setConstructorArgs([
'name2',
'value2',
'field1'])
326 $nonCustomFilter = $this->getMockBuilder(Term::class)
327 ->setConstructorArgs([
'name3',
'value3',
'field2'])
331 return [$visibilityFilter, $customFilter, $nonCustomFilter];
337 private function getSameFiltersMock()
339 $visibilityFilter1 = $this->getMockBuilder(Term::class)
340 ->setConstructorArgs([
'name1',
'value1',
'visibility'])
344 $visibilityFilter2 = $this->getMockBuilder(Term::class)
345 ->setConstructorArgs([
'name2',
'value2',
'visibility'])
349 $customFilter1 = $this->getMockBuilder(Term::class)
350 ->setConstructorArgs([
'name3',
'value3',
'field1'])
354 $customFilter2 = $this->getMockBuilder(Term::class)
355 ->setConstructorArgs([
'name4',
'value4',
'field1'])
359 return [$visibilityFilter1, $visibilityFilter2, $customFilter1, $customFilter2];
testRequestHasDifferentFilters()
testRequestHasUnAppliedFilters()
testRequestHasNoFilters()
testRequestHasSameFilters()