@@ -243,6 +243,78 @@ public function testRefund()
243243 $ this ->assertSame ($ creditMemoMock , $ this ->creditmemoService ->refund ($ creditMemoMock , true ));
244244 }
245245
246+ public function testRefundPendingCreditMemo ()
247+ {
248+ $ creditMemoMock = $ this ->getMockBuilder (\Magento \Sales \Api \Data \CreditmemoInterface::class)
249+ ->setMethods (['getId ' , 'getOrder ' , 'getState ' , 'getInvoice ' ])
250+ ->disableOriginalConstructor ()
251+ ->getMockForAbstractClass ();
252+ $ creditMemoMock ->expects ($ this ->once ())->method ('getId ' )->willReturn (444 );
253+ $ creditMemoMock ->expects ($ this ->once ())->method ('getState ' )
254+ ->willReturn (\Magento \Sales \Model \Order \Creditmemo::STATE_OPEN );
255+ $ orderMock = $ this ->getMockBuilder (Order::class)->disableOriginalConstructor ()->getMock ();
256+
257+ $ creditMemoMock ->expects ($ this ->atLeastOnce ())->method ('getOrder ' )->willReturn ($ orderMock );
258+ $ orderMock ->expects ($ this ->once ())->method ('getBaseTotalRefunded ' )->willReturn (0 );
259+ $ orderMock ->expects ($ this ->once ())->method ('getBaseTotalPaid ' )->willReturn (10 );
260+ $ creditMemoMock ->expects ($ this ->once ())->method ('getBaseGrandTotal ' )->willReturn (10 );
261+
262+ $ this ->priceCurrencyMock ->expects ($ this ->any ())
263+ ->method ('round ' )
264+ ->willReturnArgument (0 );
265+
266+ // Set payment adapter dependency
267+ $ refundAdapterMock = $ this ->getMockBuilder (\Magento \Sales \Model \Order \RefundAdapterInterface::class)
268+ ->disableOriginalConstructor ()
269+ ->getMockForAbstractClass ();
270+ $ this ->objectManagerHelper ->setBackwardCompatibleProperty (
271+ $ this ->creditmemoService ,
272+ 'refundAdapter ' ,
273+ $ refundAdapterMock
274+ );
275+
276+ // Set resource dependency
277+ $ resourceMock = $ this ->getMockBuilder (\Magento \Framework \App \ResourceConnection::class)
278+ ->disableOriginalConstructor ()
279+ ->getMock ();
280+ $ this ->objectManagerHelper ->setBackwardCompatibleProperty (
281+ $ this ->creditmemoService ,
282+ 'resource ' ,
283+ $ resourceMock
284+ );
285+
286+ // Set order repository dependency
287+ $ orderRepositoryMock = $ this ->getMockBuilder (\Magento \Sales \Api \OrderRepositoryInterface::class)
288+ ->disableOriginalConstructor ()
289+ ->getMockForAbstractClass ();
290+ $ this ->objectManagerHelper ->setBackwardCompatibleProperty (
291+ $ this ->creditmemoService ,
292+ 'orderRepository ' ,
293+ $ orderRepositoryMock
294+ );
295+
296+ $ adapterMock = $ this ->getMockBuilder (\Magento \Framework \DB \Adapter \AdapterInterface::class)
297+ ->disableOriginalConstructor ()
298+ ->getMockForAbstractClass ();
299+ $ resourceMock ->expects ($ this ->once ())->method ('getConnection ' )->with ('sales ' )->willReturn ($ adapterMock );
300+ $ adapterMock ->expects ($ this ->once ())->method ('beginTransaction ' );
301+ $ refundAdapterMock ->expects ($ this ->once ())
302+ ->method ('refund ' )
303+ ->with ($ creditMemoMock , $ orderMock , false )
304+ ->willReturn ($ orderMock );
305+ $ orderRepositoryMock ->expects ($ this ->once ())
306+ ->method ('save ' )
307+ ->with ($ orderMock );
308+ $ creditMemoMock ->expects ($ this ->once ())
309+ ->method ('getInvoice ' )
310+ ->willReturn (null );
311+ $ adapterMock ->expects ($ this ->once ())->method ('commit ' );
312+ $ this ->creditmemoRepositoryMock ->expects ($ this ->once ())
313+ ->method ('save ' );
314+
315+ $ this ->assertSame ($ creditMemoMock , $ this ->creditmemoService ->refund ($ creditMemoMock , true ));
316+ }
317+
246318 /**
247319 * @expectedExceptionMessage The most money available to refund is 1.
248320 * @expectedException \Magento\Framework\Exception\LocalizedException
0 commit comments