123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Paypal\Model\Api;
- use Magento\Framework\Api\SearchCriteriaBuilder;
- use Magento\Framework\App\ProductMetadataInterface;
- use Magento\Framework\HTTP\Adapter\Curl;
- use Magento\Framework\HTTP\Adapter\CurlFactory;
- use Magento\Framework\ObjectManagerInterface;
- use Magento\Paypal\Model\CartFactory;
- use Magento\Paypal\Model\Config;
- use Magento\Quote\Model\Quote;
- use Magento\Quote\Model\QuoteRepository;
- use Magento\TestFramework\Helper\Bootstrap;
- use PHPUnit_Framework_MockObject_MockObject as MockObject;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class NvpTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var Nvp
- */
- private $nvpApi;
- /**
- * @var ObjectManagerInterface
- */
- private $objectManager;
- /**
- * @var Curl|MockObject
- */
- private $httpClient;
- /**
- * @inheritdoc
- */
- protected function setUp()
- {
- $this->objectManager = Bootstrap::getObjectManager();
- /** @var CurlFactory|MockObject $httpFactory */
- $httpFactory = $this->getMockBuilder(CurlFactory::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->httpClient = $this->getMockBuilder(Curl::class)
- ->disableOriginalConstructor()
- ->getMock();
- $httpFactory->method('create')
- ->willReturn($this->httpClient);
- $this->nvpApi = $this->objectManager->create(Nvp::class, [
- 'curlFactory' => $httpFactory
- ]);
- /** @var ProductMetadataInterface|MockObject $productMetadata */
- $productMetadata = $this->getMockBuilder(ProductMetadataInterface::class)
- ->getMock();
- $productMetadata->method('getEdition')
- ->willReturn('');
- /** @var Config $config */
- $config = $this->objectManager->get(Config::class);
- $config->setMethodCode(Config::METHOD_EXPRESS);
- $refObject = new \ReflectionObject($config);
- $refProperty = $refObject->getProperty('productMetadata');
- $refProperty->setAccessible(true);
- $refProperty->setValue($config, $productMetadata);
- $this->nvpApi->setConfigObject($config);
- }
- /**
- * Checks a case when items with FPT (Fixed Product Tax) are present in the request.
- *
- * @magentoConfigFixture current_store tax/weee/enable 1
- * @magentoConfigFixture current_store tax/weee/include_in_subtotal 0
- * @magentoDataFixture Magento/Paypal/_files/quote_with_fpt.php
- */
- public function testRequestTotalsAndLineItemsWithFPT()
- {
- $quote = $this->getQuote('100000016');
- /** @var CartFactory $cartFactory */
- $cartFactory = $this->objectManager->get(CartFactory::class);
- $cart = $cartFactory->create(['salesModel' => $quote]);
- $request = 'PAYMENTACTION=Authorization&AMT=112.70'
- . '&SHIPPINGAMT=0.00&ITEMAMT=112.70&TAXAMT=0.00'
- . '&L_NAME0=Simple+Product+FPT&L_QTY0=1&L_AMT0=100.00'
- . '&L_NAME1=FPT&L_QTY1=1&L_AMT1=12.70'
- . '&METHOD=SetExpressCheckout&VERSION=72.0&BUTTONSOURCE=Magento_Cart_';
- $this->httpClient->method('write')
- ->with(
- 'POST',
- 'https://api-3t.paypal.com/nvp',
- '1.1',
- [],
- $this->equalTo($request)
- );
- $this->httpClient->method('read')
- ->willReturn(
- "HTTP/1.1 200 OK\r\nConnection: close\r\n\r\nRESULT=0&RESPMSG=Approved"
- );
- $this->nvpApi->setAmount($quote->getBaseGrandTotal());
- $this->nvpApi->setPaypalCart($cart);
- $this->nvpApi->setQuote($quote);
- $this->nvpApi->setIsLineItemsEnabled(true);
- $this->nvpApi->callSetExpressCheckout();
- }
- /**
- * Test that the refund request to Paypal sends the correct data
- *
- * @magentoDataFixture Magento/Paypal/_files/order_express_with_tax.php
- */
- public function testCallRefundTransaction()
- {
- /** @var \Magento\Sales\Model\Order $order */
- $order = $this->objectManager->create(\Magento\Sales\Model\Order::class);
- $order->loadByIncrementId('100000001');
- /** @var \Magento\Sales\Model\Order\Payment $payment */
- $payment = $order->getPayment();
- $this->nvpApi->setPayment(
- $payment
- )->setTransactionId(
- 'fooTransactionId'
- )->setAmount(
- $payment->formatAmount($order->getBaseGrandTotal())
- )->setCurrencyCode(
- $order->getBaseCurrencyCode()
- )->setRefundType(
- Config::REFUND_TYPE_PARTIAL
- );
- $httpQuery = 'TRANSACTIONID=fooTransactionId&REFUNDTYPE=Partial'
- .'&CURRENCYCODE=USD&AMT=145.98&METHOD=RefundTransaction'
- .'&VERSION=72.0&BUTTONSOURCE=Magento_Cart_';
- $this->httpClient->expects($this->once())->method('write')
- ->with(
- 'POST',
- 'https://api-3t.paypal.com/nvp',
- '1.1',
- [],
- $httpQuery
- );
- $this->nvpApi->callRefundTransaction();
- }
- /**
- * Gets quote by reserved order id.
- *
- * @param string $reservedOrderId
- * @return Quote
- */
- private function getQuote($reservedOrderId)
- {
- /** @var SearchCriteriaBuilder $searchCriteriaBuilder */
- $searchCriteriaBuilder = $this->objectManager->create(SearchCriteriaBuilder::class);
- $searchCriteria = $searchCriteriaBuilder->addFilter('reserved_order_id', $reservedOrderId)
- ->create();
- /** @var QuoteRepository $quoteRepository */
- $quoteRepository = $this->objectManager->get(QuoteRepository::class);
- $items = $quoteRepository->getList($searchCriteria)
- ->getItems();
- return array_pop($items);
- }
- }
|