|
5 | 5 | */
|
6 | 6 | namespace Magento\Sales\Test\Unit\Model\Service;
|
7 | 7 |
|
| 8 | +use Magento\Framework\Exception\LocalizedException; |
| 9 | +use Magento\Framework\Phrase\RendererInterface; |
8 | 10 | use Magento\Sales\Model\Order;
|
9 | 11 |
|
10 | 12 | /**
|
@@ -311,4 +313,90 @@ public function testRefundDoNotExpectsId()
|
311 | 313 | $creditMemoMock->expects($this->once())->method('getId')->willReturn(444);
|
312 | 314 | $this->creditmemoService->refund($creditMemoMock, true);
|
313 | 315 | }
|
| 316 | + |
| 317 | + /** |
| 318 | + * @expectedException \Magento\Framework\Exception\LocalizedException |
| 319 | + */ |
| 320 | + public function testRefundWithException() |
| 321 | + { |
| 322 | + $creditMemoMock = $this->getMockBuilder(\Magento\Sales\Api\Data\CreditmemoInterface::class) |
| 323 | + ->setMethods(['getId', 'getOrder', 'getInvoice']) |
| 324 | + ->disableOriginalConstructor() |
| 325 | + ->getMockForAbstractClass(); |
| 326 | + $creditMemoMock->expects($this->once())->method('getId')->willReturn(null); |
| 327 | + $orderMock = $this->getMockBuilder(Order::class)->disableOriginalConstructor()->getMock(); |
| 328 | + |
| 329 | + $creditMemoMock->expects($this->atLeastOnce())->method('getOrder')->willReturn($orderMock); |
| 330 | + $orderMock->expects($this->once())->method('getBaseTotalRefunded')->willReturn(0); |
| 331 | + $orderMock->expects($this->once())->method('getBaseTotalPaid')->willReturn(10); |
| 332 | + $creditMemoMock->expects($this->once())->method('getBaseGrandTotal')->willReturn(10); |
| 333 | + |
| 334 | + $this->priceCurrencyMock->expects($this->any()) |
| 335 | + ->method('round') |
| 336 | + ->willReturnArgument(0); |
| 337 | + |
| 338 | + // Set payment adapter dependency |
| 339 | + $refundAdapterMock = $this->getMockBuilder(\Magento\Sales\Model\Order\RefundAdapterInterface::class) |
| 340 | + ->disableOriginalConstructor() |
| 341 | + ->getMockForAbstractClass(); |
| 342 | + $this->objectManagerHelper->setBackwardCompatibleProperty( |
| 343 | + $this->creditmemoService, |
| 344 | + 'refundAdapter', |
| 345 | + $refundAdapterMock |
| 346 | + ); |
| 347 | + |
| 348 | + // Set resource dependency |
| 349 | + $resourceMock = $this->getMockBuilder(\Magento\Framework\App\ResourceConnection::class) |
| 350 | + ->disableOriginalConstructor() |
| 351 | + ->getMock(); |
| 352 | + $this->objectManagerHelper->setBackwardCompatibleProperty( |
| 353 | + $this->creditmemoService, |
| 354 | + 'resource', |
| 355 | + $resourceMock |
| 356 | + ); |
| 357 | + |
| 358 | + // Set order repository dependency |
| 359 | + $orderRepositoryMock = $this->getMockBuilder(\Magento\Sales\Api\OrderRepositoryInterface::class) |
| 360 | + ->disableOriginalConstructor() |
| 361 | + ->getMockForAbstractClass(); |
| 362 | + $this->objectManagerHelper->setBackwardCompatibleProperty( |
| 363 | + $this->creditmemoService, |
| 364 | + 'orderRepository', |
| 365 | + $orderRepositoryMock |
| 366 | + ); |
| 367 | + |
| 368 | + $adapterMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\AdapterInterface::class) |
| 369 | + ->disableOriginalConstructor() |
| 370 | + ->getMockForAbstractClass(); |
| 371 | + $resourceMock->expects($this->once())->method('getConnection')->with('sales')->willReturn($adapterMock); |
| 372 | + $adapterMock->expects($this->once())->method('beginTransaction'); |
| 373 | + |
| 374 | + /** @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject $rendererMock */ |
| 375 | + $rendererMock = $this->getMockBuilder(RendererInterface::class) |
| 376 | + ->setMethods(['render']) |
| 377 | + ->getMockForAbstractClass(); |
| 378 | + |
| 379 | + $rendererMock->expects($this->atLeastOnce()) |
| 380 | + ->method('render') |
| 381 | + ->with(['Something went wrong'], []) |
| 382 | + ->willReturn('Algo salió mal'); |
| 383 | + |
| 384 | + \Magento\Framework\Phrase::setRenderer($rendererMock); |
| 385 | + |
| 386 | + $exception = new \Exception('Something went wrong'); |
| 387 | + $thrownException = new LocalizedException(new \Magento\Framework\Phrase('Something went wrong')); |
| 388 | + |
| 389 | + $refundAdapterMock->expects($this->once()) |
| 390 | + ->method('refund') |
| 391 | + ->with($creditMemoMock, $orderMock, false) |
| 392 | + ->will($this->throwException($exception)); |
| 393 | + |
| 394 | + $adapterMock->expects($this->once())->method('rollBack'); |
| 395 | + $this->assertEquals( |
| 396 | + new \Magento\Framework\Phrase($exception->getMessage()), |
| 397 | + $thrownException->getMessage() |
| 398 | + ); |
| 399 | + |
| 400 | + $this->creditmemoService->refund($creditMemoMock, true); |
| 401 | + } |
314 | 402 | }
|
0 commit comments