19 private $flatIndexerMock;
24 private $resourceMock;
29 private $scopeConfigMock;
34 private $storeManagerMock;
39 private $tableDataMock;
44 private $connectionMock;
49 private $metadataPoolMock;
54 private $metadataMock;
59 private $flatTableBuilder;
63 $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
64 $this->flatIndexerMock = $this->getMockBuilder(\
Magento\Catalog\
Helper\
Product\Flat\Indexer::class)
65 ->disableOriginalConstructor()
67 $this->resourceMock = $this->getMockBuilder(\
Magento\Framework\
App\ResourceConnection::class)
68 ->disableOriginalConstructor()
70 $this->scopeConfigMock = $this->getMockBuilder(\
Magento\Framework\
App\
Config\ScopeConfigInterface::class)
71 ->disableOriginalConstructor()
72 ->getMockForAbstractClass();
73 $this->storeManagerMock = $this->getMockBuilder(\
Magento\
Store\Model\StoreManagerInterface::class)
74 ->disableOriginalConstructor()
75 ->getMockForAbstractClass();
76 $this->tableDataMock = $this->getMockBuilder(
77 \
Magento\Catalog\Model\Indexer\
Product\Flat\TableDataInterface::class
78 )->disableOriginalConstructor()->getMockForAbstractClass();
79 $this->connectionMock = $this->getMockBuilder(\
Magento\Framework\DB\Adapter\AdapterInterface::class)
80 ->disableOriginalConstructor()
81 ->getMockForAbstractClass();
82 $this->metadataPoolMock = $this->getMockBuilder(\
Magento\Framework\EntityManager\MetadataPool::class)
83 ->disableOriginalConstructor()
85 $this->metadataMock = $this->getMockBuilder(
86 \
Magento\Framework\EntityManager\EntityMetadataInterface::class
87 )->disableOriginalConstructor()->getMockForAbstractClass();
88 $this->metadataMock->expects($this->any())->method(
'getLinkField')->willReturn(
'entity_id');
90 $this->flatTableBuilder = $objectManagerHelper->getObject(
91 \
Magento\Catalog\Model\Indexer\
Product\Flat\FlatTableBuilder::class,
93 'productIndexerHelper' => $this->flatIndexerMock,
94 'resource' => $this->resourceMock,
95 'config' => $this->scopeConfigMock,
96 'storeManager' => $this->storeManagerMock,
97 'tableData' => $this->tableDataMock,
98 '_connection' => $this->connectionMock
101 $objectManagerHelper->setBackwardCompatibleProperty(
102 $this->flatTableBuilder,
104 $this->metadataPoolMock
112 $valueFieldSuffix =
'_value';
113 $tableDropSuffix =
'';
114 $fillTmpTables =
true;
116 $attributeTable =
'catalog_product_entity_int';
117 $temporaryTableName =
'catalog_product_entity_int_tmp_indexer';
118 $temporaryValueTableName =
'catalog_product_entity_int_tmp_indexer_value';
119 $linkField =
'entity_id';
121 $eavCustomField =
'space_weight';
122 $eavCustomValueField = $eavCustomField . $valueFieldSuffix;
123 $this->flatIndexerMock->expects($this->once())->method(
'getAttributes')->willReturn([]);
124 $this->flatIndexerMock->expects($this->exactly(3))->method(
'getFlatColumns')
125 ->willReturnOnConsecutiveCalls([], [$eavCustomValueField => []], [$eavCustomValueField => []]);
126 $this->flatIndexerMock->expects($this->once())->method(
'getFlatIndexes')->willReturn([]);
127 $statusAttributeMock = $this->getMockBuilder(\
Magento\Eav\Model\Entity\Attribute::class)
128 ->disableOriginalConstructor()
130 $eavCustomAttributeMock = $this->getMockBuilder(\
Magento\Eav\Model\Entity\Attribute::class)
131 ->disableOriginalConstructor()
133 $this->flatIndexerMock->expects($this->once())->method(
'getTablesStructure')
136 'catalog_product_entity' => [$linkField => $statusAttributeMock],
137 'catalog_product_entity_int' => [
138 $linkField => $statusAttributeMock,
139 $eavCustomField => $eavCustomAttributeMock
143 $this->flatIndexerMock->expects($this->atLeastOnce())->method(
'getTable')
144 ->withConsecutive([
$tableName], [
'catalog_product_website'])
145 ->willReturnOnConsecutiveCalls(
$tableName,
'catalog_product_website');
146 $this->flatIndexerMock->expects($this->once())->method(
'getAttribute')
148 ->willReturn($statusAttributeMock);
149 $backendMock = $this->getMockBuilder(\
Magento\Eav\Model\Entity\
Attribute\Backend\AbstractBackend::class)
150 ->disableOriginalConstructor()
152 $backendMock->expects($this->atLeastOnce())->method(
'getTable')->willReturn($attributeTable);
153 $statusAttributeMock->expects($this->atLeastOnce())->method(
'getBackend')->willReturn(
156 $eavCustomAttributeMock->expects($this->atLeastOnce())->method(
'getBackend')->willReturn(
159 $statusAttributeMock->expects($this->atLeastOnce())->method(
'getId')->willReturn($statusId);
160 $tableMock = $this->getMockBuilder(\
Magento\Framework\DB\Ddl\Table::class)
161 ->disableOriginalConstructor()
163 $this->connectionMock->expects($this->any())->method(
'newTable')->willReturn($tableMock);
164 $selectMock = $this->getMockBuilder(\
Magento\Framework\DB\Select::class)
165 ->disableOriginalConstructor()
167 $this->connectionMock->expects($this->atLeastOnce())->method(
'select')->willReturn($selectMock);
168 $selectMock->expects($this->once())->method(
'from')->with(
169 [
'et' =>
'catalog_product_entity_tmp_indexer'],
170 [$linkField,
'type_id',
'attribute_set_id']
172 $selectMock->expects($this->atLeastOnce())->method(
'joinInner')->willReturnSelf();
173 $selectMock->expects($this->exactly(3))->method(
'joinLeft')
176 [
'dstatus' => $attributeTable],
178 'e.%s = dstatus.%s AND dstatus.store_id = %s AND dstatus.attribute_id = %s',
188 "e.{$linkField} = {$temporaryTableName}.{$linkField}",
189 [$linkField, $eavCustomField]
192 $temporaryValueTableName,
193 "e.{$linkField} = {$temporaryValueTableName}.{$linkField}",
194 [$eavCustomValueField]
197 $this->metadataPoolMock->expects($this->atLeastOnce())->method(
'getMetadata')->with(ProductInterface::class)
198 ->willReturn($this->metadataMock);
199 $storeMock = $this->getMockBuilder(\
Magento\
Store\Api\Data\StoreInterface::class)
200 ->disableOriginalConstructor()
201 ->getMockForAbstractClass();
202 $this->storeManagerMock->expects($this->once())->method(
'getStore')->with(
$storeId)->willReturn($storeMock);
203 $this->flatTableBuilder->build(
$storeId, $changedIds, $valueFieldSuffix, $tableDropSuffix, $fillTmpTables);