/** * @magentoApiDataFixture Magento/Sales/_files/quote.php */ public function testGetList() { $cart = $this->getCart('test01'); // The following two filters are used as alternatives. The target cart does not match the first one. $grandTotalFilter = $this->filterBuilder->setField('grand_total')->setConditionType('gteq')->setValue(15)->create(); $subtotalFilter = $this->filterBuilder->setField('subtotal')->setConditionType('eq')->setValue($cart->getSubtotal())->create(); $yesterdayDate = (new \DateTime($cart->getCreatedAt()))->sub(new \DateInterval('P1D'))->format('Y-m-d'); $tomorrowDate = (new \DateTime($cart->getCreatedAt()))->add(new \DateInterval('P1D'))->format('Y-m-d'); $minCreatedAtFilter = $this->filterBuilder->setField('created_at')->setConditionType('gteq')->setValue($yesterdayDate)->create(); $maxCreatedAtFilter = $this->filterBuilder->setField('created_at')->setConditionType('lteq')->setValue($tomorrowDate)->create(); $this->searchCriteriaBuilder->addFilters([$grandTotalFilter, $subtotalFilter]); $this->searchCriteriaBuilder->addFilters([$minCreatedAtFilter]); $this->searchCriteriaBuilder->addFilters([$maxCreatedAtFilter]); /** @var SortOrder $sortOrder */ $sortOrder = $this->sortOrderBuilder->setField('subtotal')->setDirection(SortOrder::SORT_ASC)->create(); $this->searchCriteriaBuilder->setSortOrders([$sortOrder]); $searchCriteria = $this->searchCriteriaBuilder->create()->__toArray(); $requestData = ['searchCriteria' => $searchCriteria]; $serviceInfo = ['rest' => ['resourcePath' => '/V1/carts/search' . '?' . http_build_query($requestData), 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET], 'soap' => ['service' => 'quoteCartRepositoryV1', 'serviceVersion' => 'V1', 'operation' => 'quoteCartRepositoryV1GetList']]; $searchResult = $this->_webApiCall($serviceInfo, $requestData); $this->assertArrayHasKey('total_count', $searchResult); $this->assertEquals(1, $searchResult['total_count']); $this->assertArrayHasKey('items', $searchResult); $this->assertCount(1, $searchResult['items']); $cartData = $searchResult['items'][0]; $this->assertEquals($cart->getId(), $cartData['id']); $this->assertEquals($cart->getCreatedAt(), $cartData['created_at']); $this->assertEquals($cart->getUpdatedAt(), $cartData['updated_at']); $this->assertEquals($cart->getIsActive(), $cartData['is_active']); $this->assertContains('customer_is_guest', $cartData); $this->assertEquals(1, $cartData['customer_is_guest']); }
/** * 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 = []; 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\Api\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(); }
/** * @magentoApiDataFixture Magento/Sales/_files/invoice.php */ public function testAutoGeneratedGetList() { $this->getExpectedExtensionAttributes(); /** @var SortOrder $sortOrder */ $sortOrder = $this->sortOrderBuilder->setField('store_id')->setDirection(SearchCriteria::SORT_ASC)->create(); $this->searchBuilder->setSortOrders([$sortOrder]); $this->searchBuilder->addFilters([$this->filterBuilder->setField('state')->setValue(2)->create()]); $searchCriteria = $this->searchBuilder->create()->__toArray(); $requestData = ['criteria' => $searchCriteria]; $restResourcePath = '/V1/invoices/'; $soapService = 'salesInvoiceRepositoryV1'; $expectedExtensionAttributes = $this->getExpectedExtensionAttributes(); $serviceInfo = ['rest' => ['resourcePath' => $restResourcePath . '?' . http_build_query($requestData), 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET], 'soap' => ['service' => $soapService, 'operation' => $soapService . 'GetList']]; $searchResult = $this->_webApiCall($serviceInfo, $requestData); $this->assertArrayHasKey('items', $searchResult); $itemData = array_pop($searchResult['items']); $this->assertArrayHasKey('extension_attributes', $itemData); $this->assertArrayHasKey('invoice_api_test_attribute', $itemData['extension_attributes']); $testAttribute = $itemData['extension_attributes']['invoice_api_test_attribute']; $this->assertEquals($expectedExtensionAttributes['firstname'], $testAttribute['first_name']); $this->assertEquals($expectedExtensionAttributes['lastname'], $testAttribute['last_name']); $this->assertEquals($expectedExtensionAttributes['email'], $testAttribute['email']); }
/** * @param int $transactionType * @param int $paymentId * @param int $orderId * @return bool|\Magento\Framework\Model\AbstractModel|mixed * @throws \Magento\Framework\Exception\InputException * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function getByTransactionType($transactionType, $paymentId, $orderId) { $identityFieldsForCache = [$transactionType, $paymentId]; $cacheStorage = 'txn_type'; $entity = $this->entityStorage->getByIdentifyingFields($identityFieldsForCache, $cacheStorage); if (!$entity) { $filters[] = $this->filterBuilder->setField(TransactionInterface::TXN_TYPE)->setValue($transactionType)->create(); $filters[] = $this->filterBuilder->setField(TransactionInterface::PAYMENT_ID)->setValue($paymentId)->create(); $transactionIdSort = $this->sortOrderBuilder->setField('transaction_id')->setDirection(Collection::SORT_ORDER_DESC)->create(); $createdAtSort = $this->sortOrderBuilder->setField('created_at')->setDirection(Collection::SORT_ORDER_DESC)->create(); $entity = current($this->getList($this->searchCriteriaBuilder->addFilters($filters)->addSortOrder($transactionIdSort)->addSortOrder($createdAtSort)->create())->getItems()); if ($entity) { $this->entityStorage->addByIdentifyingFields($entity, $identityFieldsForCache, $cacheStorage); } } return $entity; }
public function testGetSearchCriteriaAnd() { // Test ((A > 1) and (B > 1)) $fieldA = 'A'; $fieldB = 'B'; $value = 1; $sortOrder = $this->sortOrderBuilder->setField('name')->setDirection(SortOrder::SORT_ASC)->create(); /** @var SearchCriteria $expectedSearchCriteria */ $expectedSearchCriteria = $this->searchCriteriaBuilder->setCurrentPage(1)->setPageSize(0)->addSortOrder($sortOrder)->addFilters([$this->filterBuilder->setField($fieldA)->setConditionType('gt')->setValue($value)->create()])->addFilters([$this->filterBuilder->setField($fieldB)->setConditionType('gt')->setValue($value)->create()])->create(); // Verifies that the search criteria Data Object created by the serviceCollection matches expected $this->groupRepositoryMock->expects($this->once())->method('getList')->with($this->equalTo($expectedSearchCriteria))->will($this->returnValue($this->searchResults)); // Now call service collection to load the data. This causes it to create the search criteria Data Object $this->serviceCollection->addFieldToFilter($fieldA, ['gt' => $value]); $this->serviceCollection->addFieldToFilter($fieldB, ['gt' => $value]); $this->serviceCollection->setOrder('name', ServiceCollection::SORT_ORDER_ASC); $this->serviceCollection->loadData(); }
/** * @param string $field * @param string, $direction * @param string, $methodName * @param array $expectedResult * * @dataProvider sortOrderDataProvider */ public function testGetListSortOrder($field, $direction, $methodName, $expectedResult) { /** @var \Magento\Framework\Api\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); $searchResults = $this->groupRepository->getList($this->searchCriteriaBuilder->create()); /** @var \Magento\Customer\Api\Data\GroupInterface[] $resultItems */ $resultItems = $searchResults->getItems(); $this->assertTrue(count($resultItems) > 0); $result = []; foreach ($resultItems as $item) { /** @var \Magento\Customer\Model\Data\Group $item */ $result[] = $item->{$methodName}(); } $this->assertEquals($expectedResult, $result); }
public function testSearchTaxRatesCz() { // TODO: This test fails in SOAP, a generic bug searching in SOAP $this->_markTestAsRestOnly(); $rates = $this->setupTaxRatesForSearch(); // Find rates which country id 'CZ' $filter = $this->filterBuilder->setField(Rate::KEY_COUNTRY_ID)->setValue('CZ')->create(); $sortOrder = $this->sortOrderBuilder->setField(Rate::KEY_POSTCODE)->setDirection(SearchCriteria::SORT_DESC)->create(); // Order them by descending postcode (not the default order) $this->searchCriteriaBuilder->addFilter([$filter])->addSortOrder($sortOrder); $searchData = $this->searchCriteriaBuilder->create()->__toArray(); $requestData = ['searchCriteria' => $searchData]; $serviceInfo = ['rest' => ['resourcePath' => self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData), 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET], 'soap' => ['service' => self::SERVICE_NAME, 'serviceVersion' => self::SERVICE_VERSION, 'operation' => self::SERVICE_NAME . 'GetList']]; /** @var \Magento\Framework\Api\SearchResults $searchResults */ $searchResults = $this->_webApiCall($serviceInfo, $requestData); $this->assertEquals(2, $searchResults['total_count']); $expectedRuleData = [['id' => (int) $rates['codeCz2']->getId(), 'tax_country_id' => $rates['codeCz2']->getTaxCountryId(), 'tax_postcode' => $rates['codeCz2']->getTaxPostcode(), 'code' => $rates['codeCz2']->getCode(), 'rate' => (double) $rates['codeCz2']->getRate(), 'tax_region_id' => 0, 'titles' => []], ['id' => (int) $rates['codeCz1']->getId(), 'tax_country_id' => $rates['codeCz1']->getTaxCountryId(), 'tax_postcode' => $rates['codeCz1']->getTaxPostcode(), 'code' => $rates['codeCz1']->getCode(), 'rate' => (double) $rates['codeCz1']->getRate(), 'tax_region_id' => 0, 'titles' => []]]; $this->assertEquals($expectedRuleData, $searchResults['items']); }
/** * Loading product attributes from group * * @param AttributeGroupInterface $group * @return ProductAttributeInterface[] */ private function loadAttributes(AttributeGroupInterface $group) { $attributes = []; $sortOrder = $this->sortOrderBuilder->setField('sort_order')->setAscendingDirection()->create(); $searchCriteria = $this->searchCriteriaBuilder->addFilter(AttributeGroupInterface::GROUP_ID, $group->getAttributeGroupId())->addFilter(ProductAttributeInterface::IS_VISIBLE, 1)->addSortOrder($sortOrder)->create(); $groupAttributes = $this->attributeRepository->getList($searchCriteria)->getItems(); $productType = $this->getProductType(); foreach ($groupAttributes as $attribute) { $applyTo = $attribute->getApplyTo(); $isRelated = !$applyTo || in_array($productType, $applyTo); if ($isRelated) { $attributes[] = $attribute; } } return $attributes; }