11 use Magento\CatalogSearch\Model\Search\SelectContainer\SelectContainerFactory;
32 private $selectContainerFactoryMock;
37 private $fullTextSearchCheckMock;
42 private $customAttributeFilterCheckMock;
47 private $filtersExtractorMock;
52 private $scopeConfigInterfaceMock;
57 private $resourceConnectionMock;
67 private $selectContainerBuilder;
71 $this->selectContainerFactoryMock = $this->getMockBuilder(SelectContainerFactory::class)
72 ->disableOriginalConstructor()
73 ->setMethods([
'create'])
76 $this->fullTextSearchCheckMock = $this->getMockBuilder(FullTextSearchCheck::class)
77 ->disableOriginalConstructor()
80 $this->customAttributeFilterCheckMock = $this->getMockBuilder(CustomAttributeFilterCheck::class)
81 ->disableOriginalConstructor()
84 $this->filtersExtractorMock = $this->getMockBuilder(FiltersExtractor::class)
85 ->disableOriginalConstructor()
88 $this->scopeConfigInterfaceMock = $this->getMockBuilder(ScopeConfigInterface::class)
89 ->disableOriginalConstructor()
90 ->getMockForAbstractClass();
92 $this->resourceConnectionMock = $this->getMockBuilder(ResourceConnection::class)
93 ->disableOriginalConstructor()
96 $this->requestMock = $this->getMockBuilder(RequestInterface::class)
97 ->disableOriginalConstructor()
98 ->getMockForAbstractClass();
100 $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
101 $this->selectContainerBuilder = $objectManagerHelper->getObject(
102 SelectContainerBuilder::class,
104 'selectContainerFactory' => $this->selectContainerFactoryMock,
105 'fullTextSearchCheck' => $this->fullTextSearchCheckMock,
106 'customAttributeFilterCheck' => $this->customAttributeFilterCheckMock,
107 'filtersExtractor' => $this->filtersExtractorMock,
108 'scopeConfig' => $this->scopeConfigInterfaceMock,
109 'resource' => $this->resourceConnectionMock
116 list($visibilityFilter, $customFilter, $nonCustomFilter) = $this->mockFilters();
117 $requestGetQueryResult = $this->mockQuery();
118 $requestGetIndexResult =
'space-banana';
119 $requestGetDimensionsResult = [1, 2, 3];
120 $fullTextSearchCheckResult =
true;
121 $isShowOutOfStockEnabled =
true;
122 $selectContainerMock = $this->getMockBuilder(SelectContainer::class)
123 ->disableOriginalConstructor()
128 ->willReturn($requestGetQueryResult);
132 ->willReturn($requestGetIndexResult);
135 ->method(
'getDimensions')
136 ->willReturn($requestGetDimensionsResult);
138 $this->filtersExtractorMock
139 ->method(
'extractFiltersFromQuery')
140 ->with($requestGetQueryResult)
141 ->willReturn([$visibilityFilter, $customFilter, $nonCustomFilter]);
143 $this->customAttributeFilterCheckMock
145 ->withConsecutive([$visibilityFilter], [$customFilter], [$nonCustomFilter])
146 ->will($this->onConsecutiveCalls(
true,
true,
false));
148 $this->fullTextSearchCheckMock
149 ->method(
'isRequiredForQuery')
150 ->with($requestGetQueryResult)
151 ->willReturn($fullTextSearchCheckResult);
153 $selectMock = $this->getMockBuilder(Select::class)
154 ->disableOriginalConstructor()
157 $connectionMock = $this->getMockBuilder(AdapterInterface::class)
158 ->disableOriginalConstructor()
159 ->getMockForAbstractClass();
163 ->willReturn($selectMock);
165 $this->resourceConnectionMock
166 ->method(
'getConnection')
167 ->willReturn($connectionMock);
169 $this->scopeConfigInterfaceMock
170 ->method(
'isSetFlag')
172 ->willReturn($isShowOutOfStockEnabled);
174 $this->selectContainerFactoryMock
177 'nonCustomAttributesFilters' => [$nonCustomFilter],
178 'customAttributesFilters' => [$customFilter],
179 'visibilityFilter' => $visibilityFilter,
180 'isFullTextSearchRequired' => $fullTextSearchCheckResult,
181 'isShowOutOfStockEnabled' => $isShowOutOfStockEnabled,
182 'usedIndex' => $requestGetIndexResult,
183 'dimensions' => $requestGetDimensionsResult,
184 'select' => $selectMock
185 ])->willReturn($selectContainerMock);
188 $selectContainerMock,
189 $this->selectContainerBuilder->buildByRequest($this->requestMock)
196 private function mockQuery()
198 return $this->getMockBuilder(QueryInterface::class)
199 ->disableOriginalConstructor()
200 ->getMockForAbstractClass();
206 private function mockFilters()
208 $visibilityFilter = $this->getMockBuilder(Term::class)
209 ->setConstructorArgs([
'name1',
'value1',
'visibility'])
213 $customFilter = $this->getMockBuilder(Term::class)
214 ->setConstructorArgs([
'name2',
'value2',
'field1'])
218 $nonCustomFilter = $this->getMockBuilder(Term::class)
219 ->setConstructorArgs([
'name3',
'value3',
'field2'])
223 return [$visibilityFilter, $customFilter, $nonCustomFilter];