Skip to content

Commit 14b3eaf

Browse files
michielgerritsengelanivishal
authored andcommitted
Added checks to see if the payment is available
1 parent a474225 commit 14b3eaf

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

app/code/Magento/Payment/Observer/SalesOrderBeforeSaveObserver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public function execute(\Magento\Framework\Event\Observer $observer)
2121
/** @var \Magento\Sales\Model\Order $order */
2222
$order = $observer->getEvent()->getOrder();
2323

24-
if ($order->getPayment()->getMethodInstance()->getCode() != 'free') {
24+
if ($order->getPayment() && $order->getPayment()->getMethodInstance()->getCode() != 'free') {
2525
return $this;
2626
}
2727

app/code/Magento/Payment/Test/Unit/Observer/SalesOrderBeforeSaveObserverTest.php

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public function testSalesOrderBeforeSaveCantUnhold()
6161
$paymentMock = $this->getMockBuilder(
6262
\Magento\Sales\Model\Order\Payment::class
6363
)->disableOriginalConstructor()->setMethods([])->getMock();
64-
$order->expects($this->once())->method('getPayment')->will($this->returnValue($paymentMock));
64+
$order->method('getPayment')->will($this->returnValue($paymentMock));
6565
$methodInstance = $this->getMockBuilder(
6666
\Magento\Payment\Model\MethodInterface::class
6767
)->getMockForAbstractClass();
@@ -86,7 +86,7 @@ public function testSalesOrderBeforeSaveIsCanceled()
8686
$paymentMock = $this->getMockBuilder(
8787
\Magento\Sales\Model\Order\Payment::class
8888
)->disableOriginalConstructor()->setMethods([])->getMock();
89-
$order->expects($this->once())->method('getPayment')->will($this->returnValue($paymentMock));
89+
$order->method('getPayment')->will($this->returnValue($paymentMock));
9090
$methodInstance = $this->getMockBuilder(
9191
\Magento\Payment\Model\MethodInterface::class
9292
)->getMockForAbstractClass();
@@ -114,7 +114,7 @@ public function testSalesOrderBeforeSaveIsClosed()
114114
$paymentMock = $this->getMockBuilder(
115115
\Magento\Sales\Model\Order\Payment::class
116116
)->disableOriginalConstructor()->setMethods([])->getMock();
117-
$order->expects($this->once())->method('getPayment')->will($this->returnValue($paymentMock));
117+
$order->method('getPayment')->will($this->returnValue($paymentMock));
118118
$methodInstance = $this->getMockBuilder(
119119
\Magento\Payment\Model\MethodInterface::class
120120
)->getMockForAbstractClass();
@@ -156,6 +156,26 @@ public function testSalesOrderBeforeSaveSetForced()
156156
$this->salesOrderBeforeSaveObserver->execute($this->observerMock);
157157
}
158158

159+
/**
160+
* The method should check that the payment is available, as this is not always the case.
161+
*/
162+
public function testDoesNothingWhenNoPaymentIsAvailable()
163+
{
164+
$this->_prepareEventMockWithMethods(['getOrder']);
165+
166+
$order = $this->getMockBuilder(\Magento\Sales\Model\Order::class)->disableOriginalConstructor()->setMethods(
167+
array_merge(['__wakeup', 'getPayment'])
168+
)->getMock();
169+
170+
$this->eventMock->expects($this->once())->method('getOrder')->will(
171+
$this->returnValue($order)
172+
);
173+
174+
$order->expects($this->exactly(1))->method('getPayment')->willReturn(null);
175+
176+
$this->salesOrderBeforeSaveObserver->execute($this->observerMock);
177+
}
178+
159179
/**
160180
* Prepares EventMock with set of methods
161181
*
@@ -184,7 +204,7 @@ private function _getPreparedOrderMethod($methodCode, $orderMethods = [])
184204
$paymentMock = $this->getMockBuilder(
185205
\Magento\Sales\Model\Order\Payment::class
186206
)->disableOriginalConstructor()->setMethods([])->getMock();
187-
$order->expects($this->once())->method('getPayment')->will($this->returnValue($paymentMock));
207+
$order->method('getPayment')->will($this->returnValue($paymentMock));
188208
$methodInstance = $this->getMockBuilder(
189209
\Magento\Payment\Model\MethodInterface::class
190210
)->getMockForAbstractClass();

app/code/Magento/Paypal/Plugin/OrderCanInvoice.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ public function __construct(Express $express)
4040
*/
4141
public function afterCanInvoice(Order $order, bool $result): bool
4242
{
43+
if (!$order->getPayment()) {
44+
return false;
45+
}
46+
4347
if ($this->express->isOrderAuthorizationAllowed($order->getPayment())) {
4448
return false;
4549
}

0 commit comments

Comments
 (0)