Beispiel #1
0
 /**
  * Creates a search criteria DTO based on the array of field filters.
  *
  * @return SearchCriteria
  */
 protected function getSearchCriteria()
 {
     foreach ($this->fieldFilters as $filter) {
         // array of fields, put filters in array to use 'or' group
         /** @var Filter[] $filterGroup */
         $filterGroup = array();
         if (!is_array($filter['field'])) {
             // just one field
             $filterGroup = [$this->createFilterData($filter['field'], $filter['condition'])];
         } else {
             foreach ($filter['field'] as $index => $field) {
                 $filterGroup[] = $this->createFilterData($field, $filter['condition'][$index]);
             }
         }
         $this->searchCriteriaBuilder->addFilter($filterGroup);
     }
     foreach ($this->_orders as $field => $direction) {
         /** @var \Magento\Framework\Service\V1\Data\SortOrder $sortOrder */
         /** @var string $direction */
         $direction = $direction == 'ASC' ? SearchCriteria::SORT_ASC : SearchCriteria::SORT_DESC;
         $sortOrder = $this->sortOrderBuilder->setField($field)->setDirection($direction)->create();
         $this->searchCriteriaBuilder->addSortOrder($sortOrder);
     }
     $this->searchCriteriaBuilder->setCurrentPage($this->_curPage);
     $this->searchCriteriaBuilder->setPageSize($this->_pageSize);
     return $this->searchCriteriaBuilder->create();
 }
 public function testSearch()
 {
     $metadata = array();
     $attributeCodes = ['price', 'id', 'sku'];
     foreach ($attributeCodes as $code) {
         $attributeMetadataMock = $this->getMockBuilder('\\Magento\\Catalog\\Service\\V1\\Data\\Eav\\AttributeMetadata')->disableOriginalConstructor()->getMock();
         $attributeMetadataMock->expects($this->once())->method('getAttributeCode')->will($this->returnValue($code));
         $metadata[] = $attributeMetadataMock;
     }
     $this->metadataServiceMock->expects($this->any())->method('getProductAttributesMetadata')->will($this->returnValue($metadata));
     $collection = $this->getMockBuilder('\\Magento\\Catalog\\Model\\Resource\\Product\\Collection')->disableOriginalConstructor()->getMock();
     $collection->expects($this->any())->method('addAttributeToSelect');
     $collection->expects($this->any())->method('joinAttribute');
     $collection->expects($this->any())->method('addOrder')->with($this->equalTo('price'), $this->equalTo('ASC'));
     $collection->expects($this->once())->method('setCurPage')->with($this->equalTo(1));
     $collection->expects($this->once())->method('setPageSize')->with($this->equalTo(10));
     $collection->expects($this->once())->method('getSize')->will($this->returnValue(5));
     $this->productCollection->expects($this->once())->method('create')->will($this->returnValue($collection));
     $this->_mockReturnValue($collection, array('getSize' => 1, '_getItems' => array($this->_productMock), 'getIterator' => new \ArrayIterator(array($this->_productMock))));
     $productDataBuilder = $this->getMockBuilder('\\Magento\\Catalog\\Service\\V1\\Data\\ProductBuilder')->disableOriginalConstructor()->getMock();
     $productDataBuilder->setPrice('10.000');
     $productDataBuilder->setSku('test');
     $productDataBuilder->setStoreId(10);
     $this->converterMock->expects($this->once())->method('createProductBuilderFromModel')->will($this->returnValue($productDataBuilder));
     $this->searchResultsBuilderMock->expects($this->once())->method('setItems')->with($this->equalTo(array($productDataBuilder->create())));
     $this->searchResultsBuilderMock->expects($this->once())->method('create')->will($this->returnValue(array($productDataBuilder->create())));
     $productService = $this->_objectManager->getObject('Magento\\Catalog\\Service\\V1\\ProductService', ['productLoader' => $this->_productLoaderMock, 'productCollection' => $this->productCollection, 'searchResultsBuilder' => $this->searchResultsBuilderMock, 'metadataService' => $this->metadataServiceMock, 'converter' => $this->converterMock]);
     $helper = new \Magento\TestFramework\Helper\ObjectManager($this);
     $filterBuilder = $helper->getObject('\\Magento\\Framework\\Service\\V1\\Data\\FilterBuilder');
     $filter = $filterBuilder->setField('price')->setValue('10.000')->setConditionType('eq')->create();
     $this->_searchBuilder->addFilter([$filter]);
     $sortOrderBuilder = $helper->getObject('\\Magento\\Framework\\Service\\V1\\Data\\SortOrderBuilder');
     $sortOrder = $sortOrderBuilder->setField('price')->setDirection(SearchCriteria::SORT_ASC)->create();
     $this->_searchBuilder->addSortOrder($sortOrder);
     $this->_searchBuilder->setCurrentPage(1);
     $this->_searchBuilder->setPageSize(10);
     $productService->search($this->_searchBuilder->create());
 }