Skip to content

Commit 63a1131

Browse files
ENGCOM-5405: #23345: Creditmemo getOrder() method loads order incorrectly. #23358
- Merge Pull Request #23358 from p-bystritsky/magento2:ISSUE-23345 - Merged commits: 1. 14212b1
2 parents adb5dff + 14212b1 commit 63a1131

File tree

2 files changed

+27
-17
lines changed

2 files changed

+27
-17
lines changed

app/code/Magento/Sales/Model/Order/Creditmemo.php

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
namespace Magento\Sales\Model\Order;
88

99
use Magento\Framework\Api\AttributeValueFactory;
10+
use Magento\Framework\App\Config\ScopeConfigInterface;
1011
use Magento\Framework\App\ObjectManager;
1112
use Magento\Framework\Pricing\PriceCurrencyInterface;
1213
use Magento\Sales\Api\Data\CreditmemoInterface;
14+
use Magento\Sales\Api\OrderRepositoryInterface;
1315
use Magento\Sales\Model\AbstractModel;
1416
use Magento\Sales\Model\EntityInterface;
15-
use Magento\Sales\Model\Order\InvoiceFactory;
16-
use Magento\Framework\App\Config\ScopeConfigInterface;
1717

1818
/**
1919
* Order creditmemo model
@@ -126,6 +126,11 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
126126
*/
127127
private $scopeConfig;
128128

129+
/**
130+
* @var OrderRepositoryInterface
131+
*/
132+
private $orderRepository;
133+
129134
/**
130135
* @param \Magento\Framework\Model\Context $context
131136
* @param \Magento\Framework\Registry $registry
@@ -144,6 +149,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
144149
* @param array $data
145150
* @param InvoiceFactory $invoiceFactory
146151
* @param ScopeConfigInterface $scopeConfig
152+
* @param OrderRepositoryInterface $orderRepository
147153
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
148154
*/
149155
public function __construct(
@@ -163,7 +169,8 @@ public function __construct(
163169
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
164170
array $data = [],
165171
InvoiceFactory $invoiceFactory = null,
166-
ScopeConfigInterface $scopeConfig = null
172+
ScopeConfigInterface $scopeConfig = null,
173+
OrderRepositoryInterface $orderRepository = null
167174
) {
168175
$this->_creditmemoConfig = $creditmemoConfig;
169176
$this->_orderFactory = $orderFactory;
@@ -175,6 +182,7 @@ public function __construct(
175182
$this->priceCurrency = $priceCurrency;
176183
$this->invoiceFactory = $invoiceFactory ?: ObjectManager::getInstance()->get(InvoiceFactory::class);
177184
$this->scopeConfig = $scopeConfig ?: ObjectManager::getInstance()->get(ScopeConfigInterface::class);
185+
$this->orderRepository = $orderRepository ?? ObjectManager::getInstance()->get(OrderRepositoryInterface::class);
178186
parent::__construct(
179187
$context,
180188
$registry,
@@ -237,8 +245,11 @@ public function setOrder(\Magento\Sales\Model\Order $order)
237245
public function getOrder()
238246
{
239247
if (!$this->_order instanceof \Magento\Sales\Model\Order) {
240-
$this->_order = $this->_orderFactory->create()->load($this->getOrderId());
248+
$this->_order = $this->getOrderId() ?
249+
$this->orderRepository->get($this->getOrderId()) :
250+
$this->_orderFactory->create();
241251
}
252+
242253
return $this->_order->setHistoryEntityName($this->entityType);
243254
}
244255

@@ -449,6 +460,7 @@ public function canVoid()
449460
* Retrieve Creditmemo states array
450461
*
451462
* @return array
463+
* phpcs:disable Magento2.Functions.StaticFunction
452464
*/
453465
public static function getStates()
454466
{
@@ -461,11 +473,12 @@ public static function getStates()
461473
}
462474
return static::$_states;
463475
}
476+
// phpcs:enable
464477

465478
/**
466479
* Retrieve Creditmemo state name by state identifier
467480
*
468-
* @param int $stateId
481+
* @param int $stateId
469482
* @return \Magento\Framework\Phrase
470483
*/
471484
public function getStateName($stateId = null)

app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoTest.php

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
namespace Magento\Sales\Test\Unit\Model\Order;
88

9+
use Magento\Sales\Api\OrderRepositoryInterface;
910
use Magento\Sales\Model\ResourceModel\OrderFactory;
1011
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
1112
use Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\CollectionFactory;
@@ -20,9 +21,9 @@
2021
class CreditmemoTest extends \PHPUnit\Framework\TestCase
2122
{
2223
/**
23-
* @var OrderFactory |\PHPUnit_Framework_MockObject_MockObject
24+
* @var OrderRepositoryInterface |\PHPUnit_Framework_MockObject_MockObject
2425
*/
25-
protected $orderFactory;
26+
protected $orderRepository;
2627

2728
/**
2829
* @var \Magento\Sales\Model\Order\Creditmemo
@@ -41,7 +42,7 @@ class CreditmemoTest extends \PHPUnit\Framework\TestCase
4142

4243
protected function setUp()
4344
{
44-
$this->orderFactory = $this->createPartialMock(\Magento\Sales\Model\OrderFactory::class, ['create']);
45+
$this->orderRepository = $this->createMock(OrderRepositoryInterface::class);
4546
$this->scopeConfigMock = $this->createMock(ScopeConfigInterface::class);
4647

4748
$objectManagerHelper = new ObjectManagerHelper($this);
@@ -61,15 +62,15 @@ protected function setUp()
6162
'creditmemoConfig' => $this->createMock(
6263
\Magento\Sales\Model\Order\Creditmemo\Config::class
6364
),
64-
'orderFactory' => $this->orderFactory,
6565
'cmItemCollectionFactory' => $this->cmItemCollectionFactoryMock,
6666
'calculatorFactory' => $this->createMock(\Magento\Framework\Math\CalculatorFactory::class),
6767
'storeManager' => $this->createMock(\Magento\Store\Model\StoreManagerInterface::class),
6868
'commentFactory' => $this->createMock(\Magento\Sales\Model\Order\Creditmemo\CommentFactory::class),
6969
'commentCollectionFactory' => $this->createMock(
7070
\Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory::class
7171
),
72-
'scopeConfig' => $this->scopeConfigMock
72+
'scopeConfig' => $this->scopeConfigMock,
73+
'orderRepository' => $this->orderRepository,
7374
];
7475
$this->creditmemo = $objectManagerHelper->getObject(
7576
\Magento\Sales\Model\Order\Creditmemo::class,
@@ -91,14 +92,10 @@ public function testGetOrder()
9192
->method('setHistoryEntityName')
9293
->with($entityName)
9394
->will($this->returnSelf());
94-
$order->expects($this->atLeastOnce())
95-
->method('load')
95+
$this->orderRepository->expects($this->atLeastOnce())
96+
->method('get')
9697
->with($orderId)
97-
->will($this->returnValue($order));
98-
99-
$this->orderFactory->expects($this->atLeastOnce())
100-
->method('create')
101-
->will($this->returnValue($order));
98+
->willReturn($order);
10299

103100
$this->assertEquals($order, $this->creditmemo->getOrder());
104101
}

0 commit comments

Comments
 (0)