DataTest.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Test\Unit\Helper;
  7. class DataTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var string
  11. */
  12. private static $htmlTransactionId =
  13. '<a target="_blank" href="https://www%1$s.paypal.com/cgi-bin/webscr?cmd=_view-a-trans&id=%2$s">%2$s</a>';
  14. /**
  15. * @var string
  16. */
  17. private static $txnId = 'XXX123123XXX';
  18. /**
  19. * @var \Magento\Payment\Api\PaymentMethodListInterface|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. private $paymentMethodList;
  22. /**
  23. * @var \Magento\Payment\Model\Method\InstanceFactory|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $paymentMethodInstanceFactory;
  26. /**
  27. * @var \Magento\Paypal\Model\Config | \PHPUnit_Framework_MockObject_MockObject
  28. */
  29. protected $configMock;
  30. /**
  31. * @var \Magento\Paypal\Helper\Data
  32. */
  33. protected $_helper;
  34. protected function setUp()
  35. {
  36. $this->paymentMethodList = $this->getMockBuilder(\Magento\Payment\Api\PaymentMethodListInterface::class)
  37. ->disableOriginalConstructor()
  38. ->getMockForAbstractClass();
  39. $this->paymentMethodInstanceFactory = $this->getMockBuilder(
  40. \Magento\Payment\Model\Method\InstanceFactory::class
  41. )->disableOriginalConstructor()->getMock();
  42. $this->configMock = $this->getMockBuilder(\Magento\Paypal\Model\Config::class)
  43. ->disableOriginalConstructor()
  44. ->getMock();
  45. $configMockFactory = $this->getMockBuilder(\Magento\Paypal\Model\ConfigFactory::class)
  46. ->disableOriginalConstructor()
  47. ->setMethods(['create'])
  48. ->getMock();
  49. $configMockFactory->expects($this->any())->method('create')->willReturn($this->configMock);
  50. $this->configMock->expects($this->any())->method('setMethod')->will($this->returnSelf());
  51. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  52. $this->_helper = $objectManager->getObject(
  53. \Magento\Paypal\Helper\Data::class,
  54. [
  55. 'methodCodes' => ['expressCheckout' => 'paypal_express', 'hostedPro' => 'hosted_pro'],
  56. 'configFactory' => $configMockFactory
  57. ]
  58. );
  59. $objectManager->setBackwardCompatibleProperty(
  60. $this->_helper,
  61. 'paymentMethodList',
  62. $this->paymentMethodList
  63. );
  64. $objectManager->setBackwardCompatibleProperty(
  65. $this->_helper,
  66. 'paymentMethodInstanceFactory',
  67. $this->paymentMethodInstanceFactory
  68. );
  69. }
  70. /**
  71. * @dataProvider getBillingAgreementMethodsDataProvider
  72. * @param $store
  73. * @param $quote
  74. * @param $paymentMethodsMap
  75. * @param $expectedResult
  76. */
  77. public function testGetBillingAgreementMethods($store, $quote, $paymentMethodsMap, $expectedResult)
  78. {
  79. $this->paymentMethodList->expects(static::once())
  80. ->method('getActiveList')
  81. ->with($store)
  82. ->willReturn(array_column($paymentMethodsMap, 0));
  83. $this->paymentMethodInstanceFactory->expects(static::any())
  84. ->method('create')
  85. ->willReturnMap($paymentMethodsMap);
  86. $this->assertEquals($expectedResult, $this->_helper->getBillingAgreementMethods($store, $quote));
  87. }
  88. /**
  89. * @return array
  90. */
  91. public function getBillingAgreementMethodsDataProvider()
  92. {
  93. $quoteMock = $this->getMockBuilder(
  94. \Magento\Quote\Model\Quote::class
  95. )->disableOriginalConstructor()->getMock();
  96. $methodMock = $this->getMockBuilder(
  97. \Magento\Payment\Api\Data\PaymentMethodInterface::class
  98. )->getMock();
  99. $agreementMethodInstanceMock = $this->getMockBuilder(
  100. \Magento\Paypal\Model\Method\Agreement::class
  101. )->disableOriginalConstructor()->getMock();
  102. $agreementMethodInstanceMock->expects($this->any())
  103. ->method('isAvailable')
  104. ->willReturn(true);
  105. $abstractMethodInstanceMock = $this->getMockBuilder(
  106. \Magento\Payment\Model\Method\Cc::class
  107. )->disableOriginalConstructor()->getMock();
  108. $adapterMethodInstanceMock = $this->getMockBuilder(
  109. \Magento\Payment\Model\Method\Adapter::class
  110. )->disableOriginalConstructor()->getMock();
  111. return [
  112. [
  113. '1',
  114. $quoteMock,
  115. [
  116. [$methodMock, $agreementMethodInstanceMock]
  117. ],
  118. [$agreementMethodInstanceMock]
  119. ],
  120. [
  121. '1',
  122. $quoteMock,
  123. [
  124. [$methodMock, $abstractMethodInstanceMock]
  125. ],
  126. []
  127. ],
  128. [
  129. '1',
  130. $quoteMock,
  131. [
  132. [$methodMock, $adapterMethodInstanceMock]
  133. ],
  134. []
  135. ]
  136. ];
  137. }
  138. /**
  139. * Sandbox mode
  140. * Expected link <a target="_blank" href="https://www.sandbox.paypal.com/...</a>
  141. *
  142. * @param string $methodCode
  143. * @dataProvider getHtmlTransactionIdProvider
  144. */
  145. public function testGetHtmlTransactionSandboxLink($methodCode)
  146. {
  147. $expectedLink = sprintf(self::$htmlTransactionId, '.sandbox', self::$txnId);
  148. $this->configMock->expects($this->once())
  149. ->method('getValue')
  150. ->with('sandboxFlag')
  151. ->willReturn(true);
  152. $this->assertEquals(
  153. $expectedLink,
  154. $this->_helper->getHtmlTransactionId($methodCode, self::$txnId)
  155. );
  156. }
  157. /**
  158. * Real mode
  159. * Expected link <a target="_blank" href="https://www.paypal.com/... </a>
  160. *
  161. * @param string $methodCode
  162. * @dataProvider getHtmlTransactionIdProvider
  163. */
  164. public function testGetHtmlTransactionRealLink($methodCode)
  165. {
  166. $expectedLink = sprintf(self::$htmlTransactionId, '', self::$txnId);
  167. $this->configMock->expects($this->once())
  168. ->method('getValue')
  169. ->with('sandboxFlag')
  170. ->willReturn(false);
  171. $this->assertEquals(
  172. $expectedLink,
  173. $this->_helper->getHtmlTransactionId($methodCode, self::$txnId)
  174. );
  175. }
  176. /**
  177. * @return array
  178. */
  179. public function getHtmlTransactionIdProvider()
  180. {
  181. return [
  182. ['paypal_express'],
  183. ['hosted_pro']
  184. ];
  185. }
  186. /**
  187. * Invokes with method not in payment list
  188. * Expected result just returned txtId: "XXX123123XXX"
  189. */
  190. public function testGetHtmlTransactionMethodNotInPaymentList()
  191. {
  192. $methodCode = 'payflow_express';
  193. $this->assertEquals(self::$txnId, $this->_helper->getHtmlTransactionId($methodCode, self::$txnId));
  194. }
  195. }