storeManagerMock = $this->getMockForAbstractClass(StoreManagerInterface::class); $this->resourceContextMock = $this->createMock(Context::class); $this->resourceConnectionMock = $this->createMock(ResourceConnection::class); $this->resourceContextMock->expects($this->any()) ->method('getResources') ->willReturn($this->resourceConnectionMock); $this->adapterMock = $this->getMockForAbstractClass(AdapterInterface::class); $this->resourceConnectionMock->expects($this->any()) ->method('getConnection') ->willReturn($this->adapterMock); $this->metadataPoolMock = $this->createMock(MetadataPool::class); /** @var IndexScopeResolver|MockObject $indexScopeResolverMock */ $indexScopeResolverMock = $this->createMock(IndexScopeResolver::class); /** @var Traversable|MockObject $traversableMock */ $traversableMock = $this->createMock(Traversable::class); /** @var MultiDimensionProvider|MockObject $dimensionsMock */ $dimensionsMock = $this->createMock(MultiDimensionProvider::class); $dimensionsMock->method('getIterator')->willReturn($traversableMock); /** @var DimensionCollectionFactory|MockObject $dimensionFactoryMock */ $dimensionFactoryMock = $this->createMock(DimensionCollectionFactory::class); $dimensionFactoryMock->method('create')->willReturn($dimensionsMock); $this->model = new Index( $this->resourceContextMock, $this->storeManagerMock, $this->metadataPoolMock, 'connectionName', $indexScopeResolverMock, $dimensionFactoryMock ); } /** * @return void */ public function testGetPriceIndexDataUsesFrontendPriceIndexerTable(): void { $storeId = 1; $storeMock = $this->getMockForAbstractClass(StoreInterface::class); $storeMock->expects($this->any())->method('getId')->willReturn($storeId); $storeMock->method('getWebsiteId')->willReturn(1); $this->storeManagerMock->expects($this->once()) ->method('getStore') ->with($storeId)->willReturn($storeMock); $selectMock = $this->createMock(Select::class); $selectMock->expects($this->any())->method('from')->willReturnSelf(); $selectMock->expects($this->any())->method('where')->willReturnSelf(); $selectMock->expects($this->any())->method('union')->willReturnSelf(); $this->adapterMock->expects($this->once())->method('select')->willReturn($selectMock); $this->adapterMock->expects($this->once())->method('fetchAll')->with($selectMock)->willReturn([]); $this->assertEmpty($this->model->getPriceIndexData([1], $storeId)); } /** * @param array $testData * @dataProvider providerForTestPriceIndexData * * @return void */ public function testGetPriceIndexData(array $testData): void { $storeMock = $this->getMockForAbstractClass(StoreInterface::class); $storeMock->expects($this->any())->method('getId')->willReturn(1); $storeMock->method('getWebsiteId')->willReturn($testData['website_id']); $this->storeManagerMock->expects($this->once()) ->method('getStore') ->with(1)->willReturn($storeMock); $selectMock = $this->createMock(Select::class); $selectMock->expects($this->any())->method('union')->willReturnSelf(); $this->adapterMock->expects($this->any())->method('select')->willReturn($selectMock); $this->adapterMock->expects($this->any())->method('fetchAll')->with($selectMock)->willReturn([$testData]); $expectedData = [ $testData['entity_id'] => [ $testData['customer_group_id'] => round((float) $testData['min_price'], 2) ] ]; $this->assertEquals($this->model->getPriceIndexData([1], 1), $expectedData); } /** * @return array */ public function providerForTestPriceIndexData(): array { return [ [ [ 'website_id' => 1, 'entity_id' => 1, 'customer_group_id' => 1, 'min_price' => '12.12' ] ], [ [ 'website_id' => 1, 'entity_id' => 2, 'customer_group_id' => 2, 'min_price' => null ] ], [ [ 'website_id' => 1, 'entity_id' => 3, 'customer_group_id' => 3, 'min_price' => 12.12 ] ], [ [ 'website_id' => 1, 'entity_id' => 3, 'customer_group_id' => 3, 'min_price' => '' ] ] ]; } }