PaymentMethodListTest.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Payment\Test\Unit\Model;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  8. /**
  9. * Class PaymentMethodListTest.
  10. */
  11. class PaymentMethodListTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var ObjectManagerHelper
  15. */
  16. private $objectManagerHelper;
  17. /**
  18. * @var \Magento\Payment\Model\PaymentMethodList|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. private $paymentMethodList;
  21. /**
  22. * @var \Magento\Payment\Api\Data\PaymentMethodInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. private $methodFactoryMock;
  25. /**
  26. * @var \Magento\Payment\Helper\Data|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. private $helperMock;
  29. /**
  30. * Setup.
  31. *
  32. * @return void
  33. */
  34. public function setUp()
  35. {
  36. $this->methodFactoryMock = $this->getMockBuilder(\Magento\Payment\Api\Data\PaymentMethodInterfaceFactory::class)
  37. ->setMethods(['create'])
  38. ->disableOriginalConstructor()
  39. ->getMock();
  40. $this->helperMock = $this->getMockBuilder(\Magento\Payment\Helper\Data::class)
  41. ->disableOriginalConstructor()
  42. ->getMock();
  43. $this->objectManagerHelper = new ObjectManagerHelper($this);
  44. $this->paymentMethodList = $this->objectManagerHelper->getObject(
  45. \Magento\Payment\Model\PaymentMethodList::class,
  46. [
  47. 'methodFactory' => $this->methodFactoryMock,
  48. 'helper' => $this->helperMock
  49. ]
  50. );
  51. }
  52. /**
  53. * Setup getList method.
  54. *
  55. * @param array $paymentMethodConfig
  56. * @param array $methodInstancesMap
  57. * @return void
  58. */
  59. private function setUpGetList($paymentMethodConfig, $methodInstancesMap)
  60. {
  61. $this->helperMock->expects($this->once())
  62. ->method('getPaymentMethods')
  63. ->willReturn($paymentMethodConfig);
  64. $this->helperMock->expects($this->any())
  65. ->method('getMethodInstance')
  66. ->willReturnMap($methodInstancesMap);
  67. $this->methodFactoryMock->expects($this->any())
  68. ->method('create')
  69. ->willReturnCallback(function ($data) {
  70. $paymentMethod = $this->getMockBuilder(\Magento\Payment\Api\Data\PaymentMethodInterface::class)
  71. ->getMockForAbstractClass();
  72. $paymentMethod->expects($this->any())
  73. ->method('getCode')
  74. ->willReturn($data['code']);
  75. $paymentMethod->expects($this->any())
  76. ->method('getIsActive')
  77. ->willReturn($data['isActive']);
  78. return $paymentMethod;
  79. });
  80. }
  81. /**
  82. * Test getList.
  83. *
  84. * @param int $storeId
  85. * @param array $paymentMethodConfig
  86. * @param array $methodInstancesMap
  87. * @param array $expected
  88. * @return void
  89. *
  90. * @dataProvider getListDataProvider
  91. */
  92. public function testGetList($storeId, $paymentMethodConfig, $methodInstancesMap, $expected)
  93. {
  94. $this->setUpGetList($paymentMethodConfig, $methodInstancesMap);
  95. $codes = array_map(
  96. function ($method) {
  97. return $method->getCode();
  98. },
  99. $this->paymentMethodList->getList($storeId)
  100. );
  101. $this->assertEquals($expected, $codes);
  102. }
  103. /**
  104. * Data provider for getList.
  105. *
  106. * @return array
  107. */
  108. public function getListDataProvider()
  109. {
  110. return [
  111. [
  112. 1,
  113. ['method_code_1' => [], 'method_code_2' => []],
  114. [
  115. ['method_code_1', $this->mockPaymentMethodInstance(1, 10, 'method_code_1', 'title', true)],
  116. ['method_code_2', $this->mockPaymentMethodInstance(1, 5, 'method_code_2', 'title', true)]
  117. ],
  118. ['method_code_2', 'method_code_1']
  119. ]
  120. ];
  121. }
  122. /**
  123. * Test getActiveList.
  124. *
  125. * @param int $storeId
  126. * @param array $paymentMethodConfig
  127. * @param array $methodInstancesMap
  128. * @param array $expected
  129. * @return void
  130. *
  131. * @dataProvider getActiveListDataProvider
  132. */
  133. public function testGetActiveList($storeId, $paymentMethodConfig, $methodInstancesMap, $expected)
  134. {
  135. $this->setUpGetList($paymentMethodConfig, $methodInstancesMap);
  136. $codes = array_map(
  137. function ($method) {
  138. return $method->getCode();
  139. },
  140. $this->paymentMethodList->getActiveList($storeId)
  141. );
  142. $this->assertEquals($expected, $codes);
  143. }
  144. /**
  145. * Data provider for getActiveList.
  146. *
  147. * @return array
  148. */
  149. public function getActiveListDataProvider()
  150. {
  151. return [
  152. [
  153. 1,
  154. ['method_code_1' => [], 'method_code_2' => []],
  155. [
  156. ['method_code_1', $this->mockPaymentMethodInstance(1, 10, 'method_code_1', 'title', false)],
  157. ['method_code_2', $this->mockPaymentMethodInstance(1, 5, 'method_code_2', 'title', true)]
  158. ],
  159. ['method_code_2']
  160. ]
  161. ];
  162. }
  163. /**
  164. * Mock payment method instance.
  165. *
  166. * @param int $storeId
  167. * @param int $sortOrder
  168. * @param string $code
  169. * @param string $title
  170. * @param bool $isActive
  171. * @return \PHPUnit_Framework_MockObject_MockObject
  172. */
  173. private function mockPaymentMethodInstance($storeId, $sortOrder, $code, $title, $isActive)
  174. {
  175. $paymentMethodInstance = $this->getMockBuilder(\Magento\Payment\Model\Method\AbstractMethod::class)
  176. ->setMethods(['getCode', 'getTitle', 'isActive', 'getConfigData'])
  177. ->disableOriginalConstructor()
  178. ->getMockForAbstractClass();
  179. $paymentMethodInstance->expects($this->any())
  180. ->method('getConfigData')
  181. ->willReturnMap([
  182. ['sort_order', $storeId, $sortOrder]
  183. ]);
  184. $paymentMethodInstance->expects($this->any())
  185. ->method('getCode')
  186. ->willReturn($code);
  187. $paymentMethodInstance->expects($this->any())
  188. ->method('getTitle')
  189. ->willReturn($title);
  190. $paymentMethodInstance->expects($this->any())
  191. ->method('isActive')
  192. ->willReturn($isActive);
  193. return $paymentMethodInstance;
  194. }
  195. }