PayflowTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Controller;
  7. use Magento\Checkout\Model\Session;
  8. use Magento\Paypal\Model\Config;
  9. use Magento\Quote\Model\Quote;
  10. use Magento\Quote\Api\CartRepositoryInterface;
  11. use Magento\Framework\Api\FilterBuilder;
  12. use Magento\Framework\Api\SearchCriteriaBuilder;
  13. use Magento\Sales\Api\Data\OrderInterface;
  14. use Magento\Sales\Api\OrderRepositoryInterface;
  15. /**
  16. * @magentoDataFixture Magento/Sales/_files/order.php
  17. */
  18. class PayflowTest extends \Magento\TestFramework\TestCase\AbstractController
  19. {
  20. /**
  21. * @var OrderRepositoryInterface
  22. */
  23. private $orderRepository;
  24. /**
  25. * @var CartRepositoryInterface
  26. */
  27. private $quoteRepository;
  28. /**
  29. * @var OrderInterface
  30. */
  31. private $order;
  32. /**
  33. * @inheritdoc
  34. */
  35. protected function setUp()
  36. {
  37. parent::setUp();
  38. /** @var FilterBuilder $filterBuilder */
  39. $filterBuilder = $this->_objectManager->get(FilterBuilder::class);
  40. $filters = [
  41. $filterBuilder->setField(OrderInterface::INCREMENT_ID)
  42. ->setValue('100000001')
  43. ->create(),
  44. ];
  45. /** @var SearchCriteriaBuilder $searchCriteriaBuilder */
  46. $searchCriteriaBuilder = $this->_objectManager->get(SearchCriteriaBuilder::class);
  47. $searchCriteria = $searchCriteriaBuilder->addFilters($filters)
  48. ->create();
  49. $this->orderRepository = $this->_objectManager->get(OrderRepositoryInterface::class);
  50. $orders = $this->orderRepository->getList($searchCriteria)
  51. ->getItems();
  52. /** @var OrderInterface $order */
  53. $this->order = array_pop($orders);
  54. $this->order->getPayment()->setMethod(Config::METHOD_PAYFLOWLINK);
  55. /** @var $quote \Magento\Quote\Model\Quote */
  56. $quote = $this->_objectManager->create(Quote::class)->setStoreid($this->order->getStoreId());
  57. $this->quoteRepository = $this->_objectManager->get(CartRepositoryInterface::class);
  58. $this->quoteRepository->save($quote);
  59. $this->order->setQuoteId($quote->getId());
  60. $this->orderRepository->save($this->order);
  61. $session = $this->_objectManager->get(Session::class);
  62. $session->setLastRealOrderId($this->order->getRealOrderId())->setLastQuoteId($this->order->getQuoteId());
  63. }
  64. public function testCancelPaymentActionIsContentGenerated()
  65. {
  66. $this->dispatch('paypal/payflow/cancelpayment');
  67. $this->assertContains("goToSuccessPage = ''", $this->getResponse()->getBody());
  68. }
  69. public function testReturnurlActionIsContentGenerated()
  70. {
  71. $checkoutHelper = $this->_objectManager->create(\Magento\Paypal\Helper\Checkout::class);
  72. $checkoutHelper->cancelCurrentOrder('test');
  73. $this->dispatch('paypal/payflow/returnurl');
  74. $this->assertContains("goToSuccessPage = ''", $this->getResponse()->getBody());
  75. }
  76. public function testFormActionIsContentGenerated()
  77. {
  78. $this->dispatch('paypal/payflow/form');
  79. $this->assertContains(
  80. '<form id="token_form" method="GET" action="https://payflowlink.paypal.com">',
  81. $this->getResponse()->getBody()
  82. );
  83. // Check P3P header
  84. $headerConstraints = [];
  85. foreach ($this->getResponse()->getHeaders() as $header) {
  86. $headerConstraints[] = new \PHPUnit\Framework\Constraint\IsEqual($header->getFieldName());
  87. }
  88. $constraint = new \PHPUnit\Framework\Constraint\LogicalOr();
  89. $constraint->setConstraints($headerConstraints);
  90. $this->assertThat('P3P', $constraint);
  91. }
  92. /**
  93. * @magentoConfigFixture current_store payment/paypal_payflow/active 1
  94. * @magentoConfigFixture current_store paypal/general/business_account merchant_2012050718_biz@example.com
  95. * @return void
  96. */
  97. public function testCancelAction(): void
  98. {
  99. $orderId = $this->order->getEntityId();
  100. /** @var \Magento\Sales\Model\Order $order */
  101. $order = $this->orderRepository->get($orderId);
  102. /** @var $quote \Magento\Quote\Model\Quote */
  103. $quote = $this->quoteRepository->get($order->getQuoteId());
  104. $session = $this->_objectManager->get(Session::class);
  105. $session->setQuoteId($quote->getId());
  106. $session->setPaypalStandardQuoteId($quote->getId())->setLastRealOrderId('100000001');
  107. $this->dispatch('paypal/payflow/cancelpayment');
  108. $order = $this->_objectManager->create(OrderRepositoryInterface::class)->get($orderId);
  109. $this->assertEquals('canceled', $order->getState());
  110. $this->assertEquals($session->getQuote()->getGrandTotal(), $quote->getGrandTotal());
  111. $this->assertEquals($session->getQuote()->getItemsCount(), $quote->getItemsCount());
  112. }
  113. }