123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Paypal\Controller;
- use Magento\Checkout\Model\Session;
- use Magento\Framework\Session\Generic as GenericSession;
- use Magento\Paypal\Model\Api\Nvp;
- use Magento\Paypal\Model\Api\Type\Factory as ApiFactory;
- use Magento\Paypal\Model\Session as PaypalSession;
- use Magento\Quote\Model\Quote;
- use Magento\TestFramework\Helper\Bootstrap;
- /**
- * Tests of Paypal Express actions
- *
- * @package Magento\Paypal\Controller
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class ExpressTest extends \Magento\TestFramework\TestCase\AbstractController
- {
- /**
- * @magentoDataFixture Magento/Sales/_files/quote.php
- * @magentoDataFixture Magento/Paypal/_files/quote_payment.php
- */
- public function testReviewAction()
- {
- $quote = Bootstrap::getObjectManager()->create(Quote::class);
- $quote->load('test01', 'reserved_order_id');
- Bootstrap::getObjectManager()->get(
- Session::class
- )->setQuoteId(
- $quote->getId()
- );
- $this->dispatch('paypal/express/review');
- $html = $this->getResponse()->getBody();
- $this->assertContains('Simple Product', $html);
- $this->assertContains('Review', $html);
- $this->assertContains('/paypal/express/placeOrder/', $html);
- }
- /**
- * @magentoDataFixture Magento/Paypal/_files/quote_payment_express.php
- * @magentoConfigFixture current_store paypal/general/business_account merchant_2012050718_biz@example.com
- */
- public function testCancelAction()
- {
- $quote = $this->_objectManager->create(Quote::class);
- $quote->load('100000002', 'reserved_order_id');
- $order = $this->_objectManager->create(\Magento\Sales\Model\Order::class);
- $order->load('100000002', 'increment_id');
- $session = $this->_objectManager->get(Session::class);
- $session->setLoadInactive(true);
- $session->setLastRealOrderId(
- $order->getRealOrderId()
- )->setLastOrderId(
- $order->getId()
- )->setLastQuoteId(
- $order->getQuoteId()
- )->setQuoteId(
- $order->getQuoteId()
- );
- /** @var $paypalSession Generic */
- $paypalSession = $this->_objectManager->get(PaypalSession::class);
- $paypalSession->setExpressCheckoutToken('token');
- $this->dispatch('paypal/express/cancel');
- $order->load('100000002', 'increment_id');
- $this->assertEquals('canceled', $order->getState());
- $this->assertEquals($session->getQuote()->getGrandTotal(), $quote->getGrandTotal());
- $this->assertEquals($session->getQuote()->getItemsCount(), $quote->getItemsCount());
- }
- /**
- * Test ensures only that customer data was copied to quote correctly.
- *
- * Note that test does not verify communication during remote calls to PayPal.
- *
- * @magentoDataFixture Magento/Sales/_files/quote.php
- * @magentoDataFixture Magento/Customer/_files/customer.php
- */
- public function testStartActionCustomerToQuote()
- {
- $fixtureCustomerId = 1;
- $fixtureCustomerEmail = 'customer@example.com';
- $fixtureCustomerFirstname = 'John';
- $fixtureQuoteReserveId = 'test01';
- /** Preconditions */
- /** @var \Magento\Customer\Model\Session $customerSession */
- $customerSession = $this->_objectManager->get(\Magento\Customer\Model\Session::class);
- /** @var \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository */
- $customerRepository = $this->_objectManager->get(\Magento\Customer\Api\CustomerRepositoryInterface::class);
- $customerData = $customerRepository->getById($fixtureCustomerId);
- $customerSession->setCustomerDataObject($customerData);
- /** @var Quote $quote */
- $quote = $this->_objectManager->create(Quote::class);
- $quote->load($fixtureQuoteReserveId, 'reserved_order_id');
- /** @var Session $checkoutSession */
- $checkoutSession = $this->_objectManager->get(Session::class);
- $checkoutSession->setQuoteId($quote->getId());
- /** Preconditions check */
- $this->assertNotEquals(
- $fixtureCustomerEmail,
- $quote->getCustomerEmail(),
- "Precondition failed: customer email in quote is invalid."
- );
- $this->assertNotEquals(
- $fixtureCustomerFirstname,
- $quote->getCustomerFirstname(),
- "Precondition failed: customer first name in quote is invalid."
- );
- /** Execute SUT */
- $this->dispatch('paypal/express/start');
- /** Check if customer data was copied to quote correctly */
- /** @var Quote $updatedQuote */
- $updatedQuote = $this->_objectManager->create(Quote::class);
- $updatedQuote->load($fixtureQuoteReserveId, 'reserved_order_id');
- $this->assertEquals(
- $fixtureCustomerEmail,
- $updatedQuote->getCustomer()->getEmail(),
- "Customer email in quote is invalid."
- );
- $this->assertEquals(
- $fixtureCustomerFirstname,
- $updatedQuote->getCustomer()->getFirstname(),
- "Customer first name in quote is invalid."
- );
- }
- /**
- * Test return action with configurable product.
- *
- * @magentoDataFixture Magento/Paypal/_files/quote_express_configurable.php
- */
- public function testReturnAction()
- {
- $quote = $this->_objectManager->create(Quote::class);
- $quote->load('test_cart_with_configurable', 'reserved_order_id');
- $payment = $quote->getPayment();
- $payment->setMethod(\Magento\Paypal\Model\Config::METHOD_WPP_EXPRESS)
- ->setAdditionalInformation(\Magento\Paypal\Model\Express\Checkout::PAYMENT_INFO_TRANSPORT_PAYER_ID, 123);
- $quote->save();
- $this->_objectManager->removeSharedInstance(Session::class);
- $session = $this->_objectManager->get(Session::class);
- $session->setQuoteId($quote->getId());
- $nvpMethods = [
- 'setToken',
- 'setPayerId',
- 'setAmount',
- 'setPaymentAction',
- 'setNotifyUrl',
- 'setInvNum',
- 'setCurrencyCode',
- 'setPaypalCart',
- 'setIsLineItemsEnabled',
- 'setAddress',
- 'setBillingAddress',
- 'callDoExpressCheckoutPayment',
- 'callGetExpressCheckoutDetails',
- 'getExportedBillingAddress'
- ];
- $nvpMock = $this->getMockBuilder(Nvp::class)
- ->setMethods($nvpMethods)
- ->disableOriginalConstructor()
- ->getMock();
- foreach ($nvpMethods as $method) {
- $nvpMock->method($method)
- ->willReturnSelf();
- }
- $apiFactoryMock = $this->getMockBuilder(ApiFactory::class)
- ->disableOriginalConstructor()
- ->setMethods(['create'])
- ->getMock();
- $apiFactoryMock->method('create')
- ->with(Nvp::class)
- ->willReturn($nvpMock);
- $this->_objectManager->addSharedInstance($apiFactoryMock, ApiFactory::class);
- $sessionMock = $this->getMockBuilder(GenericSession::class)
- ->setMethods(['getExpressCheckoutToken'])
- ->setConstructorArgs(
- [
- $this->_objectManager->get(\Magento\Framework\App\Request\Http::class),
- $this->_objectManager->get(\Magento\Framework\Session\SidResolverInterface::class),
- $this->_objectManager->get(\Magento\Framework\Session\Config\ConfigInterface::class),
- $this->_objectManager->get(\Magento\Framework\Session\SaveHandlerInterface::class),
- $this->_objectManager->get(\Magento\Framework\Session\ValidatorInterface::class),
- $this->_objectManager->get(\Magento\Framework\Session\StorageInterface::class),
- $this->_objectManager->get(\Magento\Framework\Stdlib\CookieManagerInterface::class),
- $this->_objectManager->get(\Magento\Framework\Stdlib\Cookie\CookieMetadataFactory::class),
- $this->_objectManager->get(\Magento\Framework\App\State::class),
- ]
- )
- ->getMock();
- $sessionMock->method('getExpressCheckoutToken')
- ->willReturn(true);
- $this->_objectManager->addSharedInstance($sessionMock, PaypalSession::class);
- $this->dispatch('paypal/express/returnAction');
- $this->assertRedirect($this->stringContains('checkout/onepage/success'));
- $this->_objectManager->removeSharedInstance(ApiFactory::class);
- $this->_objectManager->removeSharedInstance(PaypalSession::class);
- }
- }
|