123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?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 PayflowNvpTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var PayflowNvp
- */
- 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(PayflowNvp::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_WPP_PE_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 and discount are present in the request.
- *
- * @magentoDataFixture Magento/Paypal/_files/quote_payflowpro.php
- * @magentoDbIsolation disabled
- */
- public function testRequestLineItems()
- {
- $quote = $this->getQuote('100000015');
- /** @var CartFactory $cartFactory */
- $cartFactory = $this->objectManager->get(CartFactory::class);
- $cart = $cartFactory->create(['salesModel' => $quote]);
- $request = 'TENDER=P&AMT=52.14&FREIGHTAMT=0.00&TAXAMT=0.00&'
- . 'L_NAME0=Simple 1&L_QTY0=1&L_COST0=7.69&'
- . 'L_NAME1=Simple 2&L_QTY1=2&L_COST1=9.69&'
- . 'L_NAME2=Simple 3&L_QTY2=3&L_COST2=11.69&'
- . 'L_NAME3=Discount&L_QTY3=1&L_COST3=-10.00&'
- . 'TRXTYPE=A&ACTION=S&BUTTONSOURCE=Magento_Cart_';
- $this->httpClient->method('write')
- ->with(
- 'POST',
- 'https://payflowpro.paypal.com/transaction',
- '1.1',
- ['PAYPAL-NVP: Y'],
- self::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();
- }
- /**
- * 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);
- }
- }
|