19 private $objectManager;
25 private $conditionManager;
28 private $storeManager;
31 private $eavConfigMock;
34 private $visibilityFilter;
37 private $answerToLifeTheUniverseAndEverything = 42;
42 $this->resource = $this->objectManager->create(ResourceConnection::class);
43 $this->conditionManager = $this->objectManager->create(ConditionManager::class);
44 $this->storeManager = $this->objectManager->create(StoreManagerInterface::class);
46 $this->eavConfigMock = $this->getMockBuilder(EavConfig::class)
47 ->disableOriginalConstructor()
50 $this->visibilityFilter = $this->objectManager->create(
51 VisibilityFilter::class,
53 'eavConfig' => $this->eavConfigMock
64 $select = $this->resource->getConnection()->select();
65 $filter = $this->mockFilter();
67 $this->visibilityFilter->apply(
$select, $filter,
'Luke, I am your father!');
72 $select = $this->resource->getConnection()->select();
74 [
'some_index' =>
'some_table'],
75 [
'entity_id' =>
'entity_id']
78 $filter = $this->mockFilter();
82 ->method(
'getAttribute')
86 $expectedSelect = $this->getExpectedSelectForWhereFilter();
89 (
string) $expectedSelect,
90 (
string) $resultSelect,
91 'Select queries must be the same' 97 $select = $this->resource->getConnection()->select();
99 [
'some_index' =>
'some_table'],
100 [
'entity_id' =>
'entity_id']
103 $filter = $this->mockFilter();
107 ->method(
'getAttribute')
111 $expectedSelect = $this->getExpectedSelectForJoinFilter();
114 (
string) $expectedSelect,
115 (
string) $resultSelect,
116 'Select queries must be the same' 120 private function getExpectedSelectForWhereFilter()
122 $filter = $this->mockFilter();
123 $select = $this->resource->getConnection()->select();
125 [
'some_index' =>
'some_table'],
126 [
'entity_id' =>
'entity_id']
128 $this->conditionManager->combineQueries(
130 $this->conditionManager->generateCondition(
131 'some_index.attribute_id',
133 $this->answerToLifeTheUniverseAndEverything
135 $this->conditionManager->generateCondition(
137 is_array($filter->getValue()) ?
'in' :
'=',
140 $this->conditionManager->generateCondition(
141 'some_index.store_id',
143 $this->storeManager->getStore()->getId()
153 private function getExpectedSelectForJoinFilter()
155 $filter = $this->mockFilter();
156 $select = $this->resource->getConnection()->select();
158 [
'some_index' =>
'some_table'],
159 [
'entity_id' =>
'entity_id']
161 [
'visibility_filter' => $this->resource->getTableName(
'catalog_product_index_eav')],
162 $this->conditionManager->combineQueries(
164 'some_index.entity_id = visibility_filter.entity_id',
165 $this->conditionManager->generateCondition(
166 'visibility_filter.attribute_id',
168 $this->answerToLifeTheUniverseAndEverything
170 $this->conditionManager->generateCondition(
171 'visibility_filter.value',
172 is_array($filter->getValue()) ?
'in' :
'=',
175 $this->conditionManager->generateCondition(
176 'visibility_filter.store_id',
178 $this->storeManager->getStore()->getId()
189 private function mockFilter()
191 return $this->getMockBuilder(Term::class)
192 ->setConstructorArgs([
'name2', [42, 450],
'visibility'])
197 private function mockAttribute()
199 $attribute = $this->getMockBuilder(AbstractAttribute::class)
200 ->disableOriginalConstructor()
201 ->setMethods([
'getId'])
202 ->getMockForAbstractClass();
206 ->willReturn($this->answerToLifeTheUniverseAndEverything);
static getObjectManager()