Esempio n. 1
0
 /**
  * test order list service
  */
 public function testInvoke()
 {
     $this->orderRepositoryMock->expects($this->once())->method('find')->with($this->equalTo($this->searchCriteriaMock))->will($this->returnValue([$this->orderMock]));
     $this->orderMapperMock->expects($this->once())->method('extractDto')->with($this->equalTo($this->orderMock))->will($this->returnValue($this->dataObjectMock));
     $this->searchResultsBuilderMock->expects($this->once())->method('setItems')->with($this->equalTo([$this->dataObjectMock]))->will($this->returnSelf());
     $this->searchResultsBuilderMock->expects($this->once())->method('setTotalCount')->with($this->equalTo(1))->will($this->returnSelf());
     $this->searchResultsBuilderMock->expects($this->once())->method('setSearchCriteria')->with($this->equalTo($this->searchCriteriaMock))->will($this->returnSelf());
     $this->searchResultsBuilderMock->expects($this->once())->method('create')->will($this->returnValue('expected-result'));
     $this->assertEquals('expected-result', $this->orderList->invoke($this->searchCriteriaMock));
 }
Esempio n. 2
0
 /**
  * {@inheritdoc}
  */
 public function getAllAttributeMetadata($entityType, SearchCriteria $searchCriteria)
 {
     $this->searchResultsBuilder->setSearchCriteria($searchCriteria);
     /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Collection $attributeCollection */
     $attributeCollection = $this->attributeCollectionFactory->create();
     $attributeCollection->join(array('entity_type' => $attributeCollection->getTable('eav_entity_type')), 'main_table.entity_type_id = entity_type.entity_type_id', []);
     $attributeCollection->addFieldToFilter('entity_type_code', ['eq' => $entityType]);
     $attributeCollection->join(['eav_entity_attribute' => $attributeCollection->getTable('eav_entity_attribute')], 'main_table.attribute_id = eav_entity_attribute.attribute_id', []);
     $attributeCollection->join(array('additional_table' => $attributeCollection->getTable('catalog_eav_attribute')), 'main_table.attribute_id = additional_table.attribute_id', []);
     //Add filters from root filter group to the collection
     foreach ($searchCriteria->getFilterGroups() as $group) {
         $this->addFilterGroupToCollection($group, $attributeCollection);
     }
     /** @var SortOrder $sortOrder */
     foreach ((array) $searchCriteria->getSortOrders() as $sortOrder) {
         $attributeCollection->addOrder($this->translateField($sortOrder->getField()), $sortOrder->getDirection() == SearchCriteria::SORT_ASC ? 'ASC' : 'DESC');
     }
     $totalCount = $attributeCollection->getSize();
     // Group attributes by id to prevent duplicates with different attribute sets
     $attributeCollection->addAttributeGrouping();
     $attributeCollection->setCurPage($searchCriteria->getCurrentPage());
     $attributeCollection->setPageSize($searchCriteria->getPageSize());
     $attributes = [];
     /** @var \Magento\Eav\Model\Entity\Attribute $attribute */
     foreach ($attributeCollection as $attribute) {
         $attributes[] = $this->getAttributeMetadata($entityType, $attribute->getAttributeCode());
     }
     $this->searchResultsBuilder->setItems($attributes);
     $this->searchResultsBuilder->setTotalCount($totalCount);
     return $this->searchResultsBuilder->create();
 }
Esempio n. 3
0
 /**
  * {@inheritdoc}
  * Example of request:
  * {
  *     "searchCriteria": {
  *         "filterGroups": [
  *             {
  *                 "filters": [
  *                     {"value": "16.000", "conditionType" : "eq", "field" : "price"}
  *                 ]
  *             }
  *         ]
  *     },
  *     "sort_orders" : {"id": "1"},
  *     "page_size" : "30",
  *     "current_page" : "10"
  * }
  *
  * products?searchCriteria[filterGroups][0][filters][0][field]=price&
  * searchCriteria[filterGroups][0][filters][0][value]=16.000&page_size=30&current_page=1&sort_orders[id]=1
  */
 public function search(SearchCriteria $searchCriteria)
 {
     $this->searchResultsBuilder->setSearchCriteria($searchCriteria);
     /** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
     $collection = $this->productCollection->create();
     // This is needed to make sure all the attributes are properly loaded
     foreach ($this->metadataService->getProductAttributesMetadata() as $metadata) {
         $collection->addAttributeToSelect($metadata->getAttributeCode());
     }
     $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner');
     $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner');
     //Add filters from root filter group to the collection
     foreach ($searchCriteria->getFilterGroups() as $group) {
         $this->addFilterGroupToCollection($group, $collection);
     }
     /** @var SortOrder $sortOrder*/
     foreach ((array) $searchCriteria->getSortOrders() as $sortOrder) {
         $field = $this->translateField($sortOrder->getField());
         $collection->addOrder($field, $sortOrder->getDirection() == SearchCriteria::SORT_ASC ? 'ASC' : 'DESC');
     }
     $collection->setCurPage($searchCriteria->getCurrentPage());
     $collection->setPageSize($searchCriteria->getPageSize());
     $products = array();
     /** @var \Magento\Catalog\Model\Product $productModel */
     foreach ($collection as $productModel) {
         $products[] = $this->converter->createProductDataFromModel($productModel);
     }
     $this->searchResultsBuilder->setItems($products);
     $this->searchResultsBuilder->setTotalCount($collection->getSize());
     return $this->searchResultsBuilder->create();
 }