diff --git a/app/code/Magento/Sales/Model/Order.php b/app/code/Magento/Sales/Model/Order.php index 3fb8a1e677f6a..78e2b164db985 100644 --- a/app/code/Magento/Sales/Model/Order.php +++ b/app/code/Magento/Sales/Model/Order.php @@ -2065,7 +2065,7 @@ public function getTracksCollection() */ public function hasInvoices() { - return (bool)$this->getInvoiceCollection()->count(); + return $this->getInvoiceCollection()->getSize() > 0; } /** @@ -2075,7 +2075,7 @@ public function hasInvoices() */ public function hasShipments() { - return (bool)$this->getShipmentsCollection()->count(); + return $this->getShipmentsCollection()->getSize() > 0; } /** @@ -2085,7 +2085,7 @@ public function hasShipments() */ public function hasCreditmemos() { - return (bool)$this->getCreditmemosCollection()->count(); + return $this->getCreditmemosCollection()->getSize() > 0; } /** diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php index 8aaddd9449f02..fa4c4be510e1f 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php @@ -29,6 +29,7 @@ use Magento\Sales\Model\Order; use Magento\Sales\Model\ResourceModel\Order\Collection as OrderCollection; use Magento\Sales\Model\ResourceModel\Order\CollectionFactory as OrderCollectionFactory; +use Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection as OrderCreditmemoCollection; use Magento\Sales\Model\ResourceModel\Order\Invoice\Collection as OrderInvoiceCollection; use Magento\Sales\Model\Order\Item; use Magento\Sales\Model\ResourceModel\Order\Item\Collection as OrderItemCollection; @@ -36,6 +37,7 @@ use Magento\Sales\Model\ResourceModel\Order\Payment; use Magento\Sales\Model\ResourceModel\Order\Payment\Collection as PaymentCollection; use Magento\Sales\Model\ResourceModel\Order\Payment\CollectionFactory as PaymentCollectionFactory; +use Magento\Sales\Model\ResourceModel\Order\Shipment\Collection as OrderShipmentCollection; use Magento\Sales\Model\ResourceModel\Order\Status\History\Collection as HistoryCollection; use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory as HistoryCollectionFactory; use PHPUnit\Framework\MockObject\MockObject; @@ -634,6 +636,34 @@ public function testCanEditIfHasInvoices() $this->assertFalse($this->order->canEdit()); } + #[DataProvider('hasRelatedDocumentsDataProvider')] + public function testHasRelatedDocumentsUsesGetSize( + string $method, + string $collectionGetter, + string $collectionClass, + int $size, + bool $expected + ): void { + $collection = $this->createPartialMock($collectionClass, ['getSize', 'count', 'load']); + $collection->expects($this->once()) + ->method('getSize') + ->willReturn($size); + $collection->expects($this->never()) + ->method('count'); + $collection->expects($this->never()) + ->method('load'); + + $order = $this->getMockBuilder(Order::class) + ->disableOriginalConstructor() + ->onlyMethods([$collectionGetter]) + ->getMock(); + $order->expects($this->once()) + ->method($collectionGetter) + ->willReturn($collection); + + $this->assertSame($expected, $order->$method()); + } + /** * @covers \Magento\Sales\Model\Order::canReorder */ @@ -1345,4 +1375,16 @@ public static function canNotCreditMemoStatesProvider() [Order::STATE_PAYMENT_REVIEW] ]; } + + public static function hasRelatedDocumentsDataProvider(): array + { + return [ + ['hasInvoices', 'getInvoiceCollection', OrderInvoiceCollection::class, 1, true], + ['hasInvoices', 'getInvoiceCollection', OrderInvoiceCollection::class, 0, false], + ['hasShipments', 'getShipmentsCollection', OrderShipmentCollection::class, 1, true], + ['hasShipments', 'getShipmentsCollection', OrderShipmentCollection::class, 0, false], + ['hasCreditmemos', 'getCreditmemosCollection', OrderCreditmemoCollection::class, 1, true], + ['hasCreditmemos', 'getCreditmemosCollection', OrderCreditmemoCollection::class, 0, false], + ]; + } }