@@ -243,6 +243,78 @@ public function testRefund()
243
243
$ this ->assertSame ($ creditMemoMock , $ this ->creditmemoService ->refund ($ creditMemoMock , true ));
244
244
}
245
245
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
+
246
318
/**
247
319
* @expectedExceptionMessage The most money available to refund is 1.
248
320
* @expectedException \Magento\Framework\Exception\LocalizedException
0 commit comments