/**
  * @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();
 }
示例#3
0
 /**
  * @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']);
 }
示例#4
0
 /**
  * @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();
 }
示例#6
0
 /**
  * @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);
 }
示例#7
0
 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']);
 }
示例#8
0
 public function testModifyData()
 {
     $sourceData = ['1' => ['product' => [ProductAttributeInterface::CODE_PRICE => '19.99']]];
     $this->locatorMock->expects($this->any())->method('getProduct')->willReturn($this->productMock);
     $this->productMock->expects($this->any())->method('getId')->willReturn(1);
     $this->productMock->expects($this->once())->method('getAttributeSetId')->willReturn(4);
     $this->productMock->expects($this->once())->method('getData')->with(ProductAttributeInterface::CODE_PRICE)->willReturn('19.9900');
     $this->searchCriteriaBuilderMock->expects($this->any())->method('addFilter')->willReturnSelf();
     $this->searchCriteriaBuilderMock->expects($this->any())->method('create')->willReturn($this->searchCriteriaMock);
     $this->attributeGroupRepositoryMock->expects($this->any())->method('getList')->willReturn($this->searchCriteriaMock);
     $this->searchCriteriaMock->expects($this->once())->method('getItems')->willReturn([$this->attributeGroupMock]);
     $this->sortOrderBuilderMock->expects($this->once())->method('setField')->willReturnSelf();
     $this->sortOrderBuilderMock->expects($this->once())->method('setAscendingDirection')->willReturnSelf();
     $dataObjectMock = $this->getMock('\\Magento\\Framework\\Api\\AbstractSimpleObject', [], [], '', false);
     $this->sortOrderBuilderMock->expects($this->once())->method('create')->willReturn($dataObjectMock);
     $this->searchCriteriaBuilderMock->expects($this->any())->method('addFilter')->willReturnSelf();
     $this->searchCriteriaBuilderMock->expects($this->once())->method('addSortOrder')->willReturnSelf();
     $this->searchCriteriaBuilderMock->expects($this->any())->method('create')->willReturn($this->searchCriteriaMock);
     $this->attributeRepositoryMock->expects($this->once())->method('getList')->with($this->searchCriteriaMock)->willReturn($this->searchResultsMock);
     $this->eavAttributeMock->expects($this->any())->method('getAttributeGroupCode')->willReturn('product-details');
     $this->eavAttributeMock->expects($this->once())->method('getApplyTo')->willReturn([]);
     $this->eavAttributeMock->expects($this->once())->method('getFrontendInput')->willReturn('price');
     $this->eavAttributeMock->expects($this->any())->method('getAttributeCode')->willReturn(ProductAttributeInterface::CODE_PRICE);
     $this->searchResultsMock->expects($this->once())->method('getItems')->willReturn([$this->eavAttributeMock]);
     $this->storeMock->expects($this->once())->method('getBaseCurrencyCode')->willReturn('en_US');
     $this->storeManagerMock->expects($this->once())->method('getStore')->willReturn($this->storeMock);
     $this->currencyMock->expects($this->once())->method('toCurrency')->willReturn('19.99');
     $this->currencyLocaleMock->expects($this->once())->method('getCurrency')->willReturn($this->currencyMock);
     $this->assertEquals($sourceData, $this->eav->modifyData([]));
 }
 /**
  * @param string $field
  * @param string $direction
  * @return $this
  */
 public function addSortOrder($field, $direction)
 {
     $this->sortOrderBuilder->setDirection($direction)->setField($field);
     return $this;
 }
示例#10
0
 /**
  * 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;
 }