AgreementTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Controller\Billing;
  7. /**
  8. * Test class for \Magento\Paypal\Controller\Billing\Agreement
  9. */
  10. class AgreementTest extends \Magento\TestFramework\TestCase\AbstractController
  11. {
  12. /**
  13. * Test billing agreement record creation in Magento DB.
  14. *
  15. * All mocking effort is aimed to disable remote call for billing agreement creation in the external system.
  16. * Request parameters and current customer are emulated as well.
  17. *
  18. * @magentoDataFixture Magento/Customer/_files/customer.php
  19. * @magentoDbIsolation enabled
  20. */
  21. public function testReturnWizardAction()
  22. {
  23. $paymentMethod = "paypal_express";
  24. $token = "token_value";
  25. $referenceId = "Reference-id-1";
  26. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  27. /** Mock Request */
  28. $requestMock = $this->getMockForAbstractClass(\Magento\Framework\App\RequestInterface::class, [], '', false);
  29. $requestMock
  30. ->expects($this->any())
  31. ->method('getParam')
  32. ->will(
  33. $this->returnValueMap(
  34. [
  35. ['payment_method', null, $paymentMethod],
  36. ['token', null, $token],
  37. ]
  38. )
  39. );
  40. /**
  41. * Disable billing agreement placement using calls to remote system
  42. * in \Magento\Paypal\Model\Billing\Agreement::place()
  43. */
  44. $objectManagerMock = $this->createMock(\Magento\Framework\ObjectManagerInterface::class);
  45. $paymentMethodMock = $this->createPartialMock(
  46. \Magento\Paypal\Model\Express::class,
  47. ['getTitle', 'setStore', 'placeBillingAgreement']
  48. );
  49. $paymentMethodMock->expects($this->any())->method('placeBillingAgreement')->will($this->returnSelf());
  50. $paymentMethodMock->expects($this->any())->method('getTitle')->will($this->returnValue($paymentMethod));
  51. $paymentHelperMock = $this->createPartialMock(\Magento\Payment\Helper\Data::class, ['getMethodInstance']);
  52. $paymentHelperMock
  53. ->expects($this->any())
  54. ->method('getMethodInstance')
  55. ->will($this->returnValue($paymentMethodMock));
  56. $billingAgreement = $objectManager->create(
  57. \Magento\Paypal\Model\Billing\Agreement::class,
  58. ['paymentData' => $paymentHelperMock]
  59. );
  60. /** Reference ID is normally set by placeBillingAgreement() and is an agreement ID in the external system. */
  61. $billingAgreement->setBillingAgreementId($referenceId);
  62. $objectManagerMock
  63. ->expects($this->once())
  64. ->method('create')
  65. ->with(\Magento\Paypal\Model\Billing\Agreement::class, [])
  66. ->will($this->returnValue($billingAgreement));
  67. $storeManager = $objectManager->get(\Magento\Store\Model\StoreManager::class);
  68. $customerSession = $objectManager->get(\Magento\Customer\Model\Session::class);
  69. $objectManagerMock
  70. ->expects($this->any())
  71. ->method('get')
  72. ->will(
  73. $this->returnValueMap(
  74. [
  75. [\Magento\Store\Model\StoreManager::class, $storeManager],
  76. [\Magento\Customer\Model\Session::class, $customerSession],
  77. ]
  78. )
  79. );
  80. $contextMock = $objectManager->create(
  81. \Magento\Framework\App\Action\Context::class,
  82. [
  83. 'objectManager' => $objectManagerMock,
  84. 'request' => $requestMock
  85. ]
  86. );
  87. /** @var \Magento\Paypal\Controller\Billing\Agreement $billingAgreementController */
  88. $billingAgreementController = $objectManager->create(
  89. \Magento\Paypal\Controller\Billing\Agreement\ReturnWizard::class,
  90. ['context' => $contextMock]
  91. );
  92. /** Initialize current customer */
  93. /** @var \Magento\Customer\Model\Session $customerSession */
  94. $customerSession = $objectManager->get(\Magento\Customer\Model\Session::class);
  95. $fixtureCustomerId = 1;
  96. $customerSession->setCustomerId($fixtureCustomerId);
  97. /** Execute SUT */
  98. $billingAgreementController->execute();
  99. /** Ensure that billing agreement record was created in the DB */
  100. /** @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection $billingAgreementCollection */
  101. $billingAgreementCollection = $objectManager->create(
  102. \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection::class
  103. );
  104. /** @var \Magento\Paypal\Model\Billing\Agreement $createdBillingAgreement */
  105. $createdBillingAgreement = $billingAgreementCollection->getLastItem();
  106. $this->assertEquals($fixtureCustomerId, $createdBillingAgreement->getCustomerId(), "Customer ID is invalid.");
  107. $this->assertEquals($referenceId, $createdBillingAgreement->getReferenceId(), "Reference ID is invalid.");
  108. $this->assertEquals($paymentMethod, $createdBillingAgreement->getMethodCode(), "Method code is invalid.");
  109. }
  110. }