diff --git a/Model/Sales/OrderRepository.php b/Model/Sales/OrderRepository.php index d51680b268..0919294075 100644 --- a/Model/Sales/OrderRepository.php +++ b/Model/Sales/OrderRepository.php @@ -16,6 +16,7 @@ use Magento\Framework\Api\Search\FilterGroupBuilder; use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface; use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\Framework\Api\SortOrderBuilder; use Magento\Framework\Serialize\Serializer\Json as JsonSerializer; use Magento\Payment\Api\Data\PaymentAdditionalInfoInterfaceFactory; use Magento\Sales\Api\Data\OrderExtensionFactory; @@ -28,6 +29,7 @@ class OrderRepository extends SalesOrderRepository { private SearchCriteriaBuilder $searchCriteriaBuilder; + private SortOrderBuilder $sortOrderBuilder; private FilterBuilder $filterBuilder; private FilterGroupBuilder $filterGroupBuilder; @@ -35,6 +37,7 @@ public function __construct( SearchCriteriaBuilder $searchCriteriaBuilder, FilterBuilder $filterBuilder, FilterGroupBuilder $filterGroupBuilder, + SortOrderBuilder $sortOrderBuilder, Metadata $metadata, SearchResultFactory $searchResultFactory, CollectionProcessorInterface $collectionProcessor = null, @@ -56,6 +59,7 @@ public function __construct( ); $this->searchCriteriaBuilder = $searchCriteriaBuilder; + $this->sortOrderBuilder = $sortOrderBuilder; $this->filterBuilder = $filterBuilder; $this->filterGroupBuilder = $filterGroupBuilder; } @@ -68,9 +72,14 @@ public function getOrderByQuoteId(int $quoteId): OrderInterface|false ->create(); $quoteIdFilterGroup = $this->filterGroupBuilder->setFilters([$quoteIdFilter])->create(); + $sortOrder = $this->sortOrderBuilder->setField('entity_id') + ->setDescendingDirection() + ->create(); $searchCriteria = $this->searchCriteriaBuilder ->setFilterGroups([$quoteIdFilterGroup]) + ->setSortOrders([$sortOrder]) + ->setPageSize(1) ->create(); $orders = $this->getList($searchCriteria)->getItems(); diff --git a/Test/Unit/Model/Sales/OrderRepositoryTest.php b/Test/Unit/Model/Sales/OrderRepositoryTest.php index 261640f068..a0e9714810 100644 --- a/Test/Unit/Model/Sales/OrderRepositoryTest.php +++ b/Test/Unit/Model/Sales/OrderRepositoryTest.php @@ -19,6 +19,8 @@ use Magento\Framework\Api\Search\FilterGroupBuilder; use Magento\Framework\Api\SearchCriteria; use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\Framework\Api\SortOrder; +use Magento\Framework\Api\SortOrderBuilder; use Magento\Sales\Api\Data\OrderInterface; use Magento\Sales\Api\Data\OrderSearchResultInterface; use ReflectionClass; @@ -41,10 +43,15 @@ public function testGetOrderByQuoteId() $filterGroupBuilderMock->method('create') ->willReturn($this->createMock(FilterGroup::class)); + $sortOrderBuilderMock = $this->createPartialMock(SortOrderBuilder::class, ['create']); + $sortOrderBuilderMock->method('create') + ->willReturn($this->createMock(SortOrder::class)); + $orderRepository = $this->buildOrderRepositoryClass( $searchCriteriaBuilderMock, $filterBuilderMock, - $filterGroupBuilderMock + $filterGroupBuilderMock, + $sortOrderBuilderMock ); $order = $orderRepository->getOrderByQuoteId($quoteId); @@ -54,7 +61,8 @@ public function testGetOrderByQuoteId() public function buildOrderRepositoryClass( $searchCriteriaBuilderMock = null, $filterBuilderMock = null, - $filterGroupBuilderMock = null + $filterGroupBuilderMock = null, + $sortOrderBuilderMock = null ): OrderRepository { if (is_null($searchCriteriaBuilderMock)) { $searchCriteriaBuilderMock = $this->createMock(SearchCriteriaBuilder::class); @@ -68,6 +76,10 @@ public function buildOrderRepositoryClass( $filterGroupBuilderMock = $this->createMock(FilterGroupBuilder::class); } + if (is_null($sortOrderBuilderMock)) { + $sortOrderBuilderMock = $this->createMock(SortOrderBuilder::class); + } + $orderRepositoryPartialMock = $this->getMockBuilder(OrderRepository::class) ->setMethods(['getList']) ->disableOriginalConstructor() @@ -87,6 +99,10 @@ public function buildOrderRepositoryClass( $filterGroupBuilderProperty->setAccessible(true); $filterGroupBuilderProperty->setValue($orderRepositoryPartialMock, $filterGroupBuilderMock); + $sortOrderBuilderProperty = $reflection->getProperty('sortOrderBuilder'); + $sortOrderBuilderProperty->setAccessible(true); + $sortOrderBuilderProperty->setValue($orderRepositoryPartialMock, $sortOrderBuilderMock); + $orderSearchResultMock = $this->createConfiguredMock(OrderSearchResultInterface::class, [ 'getItems' => [$this->createMock(OrderInterface::class)] ]);