/** * @covers \Magento\Sales\Model\Order\Payment::refund() */ public function testRefund() { $amount = 204.04; $this->creditMemoMock->expects(static::once())->method('getBaseGrandTotal')->willReturn($amount); $this->creditMemoMock->expects(static::once())->method('getGrandTotal')->willReturn($amount); $this->creditMemoMock->expects(static::once())->method('getDoTransaction')->willReturn(true); $this->paymentMethodMock->expects(static::once())->method('canRefund')->willReturn(true); $this->mockInvoice(self::TRANSACTION_ID, 0); $this->creditMemoMock->expects(static::once())->method('getInvoice')->willReturn($this->invoiceMock); $captureTranId = self::TRANSACTION_ID . '-' . Transaction::TYPE_CAPTURE; $captureTransaction = $this->getMockBuilder(Transaction::class)->disableOriginalConstructor()->setMethods(['getTxnId'])->getMock(); $refundTranId = $captureTranId . '-' . Transaction::TYPE_REFUND; $this->transactionManagerMock->expects(static::once())->method('generateTransactionId')->willReturn($refundTranId); $captureTransaction->expects(static::once())->method('getTxnId')->willReturn($captureTranId); $this->transactionRepositoryMock->expects(static::once())->method('getByTransactionId')->willReturn($captureTransaction); $this->paymentMethodMock->expects(static::once())->method('refund')->with($this->payment, $amount); $isOnline = true; $this->getTransactionBuilderMock([], $isOnline, Transaction::TYPE_REFUND, $refundTranId); $this->currencyMock->expects(static::once())->method('formatTxt')->willReturn($amount); $this->orderMock->expects(static::once())->method('getBaseCurrency')->willReturn($this->currencyMock); $status = 'status'; $message = 'We refunded ' . $amount . ' online. Transaction ID: "' . $refundTranId . '"'; $this->mockGetDefaultStatus(Order::STATE_PROCESSING, $status); $this->assertOrderUpdated(Order::STATE_PROCESSING, $status, $message); static::assertSame($this->payment, $this->payment->refund($this->creditMemoMock)); static::assertEquals($amount, $this->payment->getData('amount_refunded')); static::assertEquals($amount, $this->payment->getData('base_amount_refunded_online')); static::assertEquals($amount, $this->payment->getData('base_amount_refunded')); }
/** * {@inheritdoc} */ public function refund($creditmemo) { $pluginInfo = $this->pluginList->getNext($this->subjectType, 'refund'); if (!$pluginInfo) { return parent::refund($creditmemo); } else { return $this->___callPlugins('refund', func_get_args(), $pluginInfo); } }