diff --git a/app/code/Magento/Catalog/Model/Api/SearchCriteria/CollectionProcessor/FilterProcessor/ProductStoreFilter.php b/app/code/Magento/Catalog/Model/Api/SearchCriteria/CollectionProcessor/FilterProcessor/ProductStoreFilter.php new file mode 100644 index 0000000000000..0fa8aa4e75894 --- /dev/null +++ b/app/code/Magento/Catalog/Model/Api/SearchCriteria/CollectionProcessor/FilterProcessor/ProductStoreFilter.php @@ -0,0 +1,32 @@ +getConditionType() ? $filter->getConditionType() : 'eq'; + $storeFilter = [$conditionType => [$filter->getValue()]]; + + /** @var Collection $collection */ + $collection->addStoreFilter($storeFilter); + + return true; + } +} diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Api/SearchCriteria/CollectionProcessor/FilterProcessor/ProductStoreFilterTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Api/SearchCriteria/CollectionProcessor/FilterProcessor/ProductStoreFilterTest.php new file mode 100644 index 0000000000000..729e3ad5f6259 --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Model/Api/SearchCriteria/CollectionProcessor/FilterProcessor/ProductStoreFilterTest.php @@ -0,0 +1,73 @@ +model = new ProductStoreFilter(); + } + + public function testApply() + { + /** @var Filter|\PHPUnit_Framework_MockObject_MockObject $filterMock */ + $filterMock = $this->getMockBuilder(Filter::class) + ->disableOriginalConstructor() + ->getMock(); + + /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */ + $collectionMock = $this->getMockBuilder(Collection::class) + ->disableOriginalConstructor() + ->getMock(); + + $filterMock->expects($this->exactly(2)) + ->method('getConditionType') + ->willReturn('condition'); + $filterMock->expects($this->once()) + ->method('getValue') + ->willReturn('value'); + + $collectionMock->expects($this->once()) + ->method('addStoreFilter') + ->with(['condition' => ['value']]); + + $this->assertTrue($this->model->apply($filterMock, $collectionMock)); + } + + public function testApplyWithoutCondition() + { + /** @var Filter|\PHPUnit_Framework_MockObject_MockObject $filterMock */ + $filterMock = $this->getMockBuilder(Filter::class) + ->disableOriginalConstructor() + ->getMock(); + + /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */ + $collectionMock = $this->getMockBuilder(Collection::class) + ->disableOriginalConstructor() + ->getMock(); + + $filterMock->expects($this->once()) + ->method('getConditionType') + ->willReturn(null); + $filterMock->expects($this->once()) + ->method('getValue') + ->willReturn('value'); + + $collectionMock->expects($this->once()) + ->method('addStoreFilter') + ->with(['eq' => ['value']]); + + $this->assertTrue($this->model->apply($filterMock, $collectionMock)); + } +} diff --git a/app/code/Magento/Catalog/etc/di.xml b/app/code/Magento/Catalog/etc/di.xml index 023b39ddc37da..be7f3fe495739 100644 --- a/app/code/Magento/Catalog/etc/di.xml +++ b/app/code/Magento/Catalog/etc/di.xml @@ -826,6 +826,7 @@ Magento\Catalog\Model\Api\SearchCriteria\CollectionProcessor\FilterProcessor\ProductCategoryFilter + Magento\Catalog\Model\Api\SearchCriteria\CollectionProcessor\FilterProcessor\ProductStoreFilter