AddPaypalShortcutsObserverTest.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Test\Unit\Observer;
  7. use Magento\Catalog\Block\ShortcutButtons;
  8. use Magento\Catalog\Block\ShortcutInterface;
  9. use Magento\Framework\DataObject;
  10. use Magento\Framework\Event\Observer;
  11. use Magento\Framework\View\Layout;
  12. use Magento\Paypal\Block\Express\InContext\Minicart\SmartButton as MinicartButton;
  13. use Magento\Paypal\Block\Express\InContext\SmartButton as Button;
  14. use Magento\Paypal\Helper\Shortcut\Factory;
  15. use Magento\Paypal\Model\Config;
  16. use Magento\Paypal\Observer\AddPaypalShortcutsObserver;
  17. /**
  18. * Class AddPaypalShortcutsObserverTest
  19. *
  20. * @see \Magento\Paypal\Observer\AddPaypalShortcutsObserver
  21. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  22. */
  23. class AddPaypalShortcutsObserverTest extends \PHPUnit\Framework\TestCase
  24. {
  25. const PAYMENT_CODE = 'code';
  26. const PAYMENT_AVAILABLE = 'isAvailable';
  27. const PAYMENT_IS_BML = 'isBml';
  28. /**
  29. * @param array $blocks
  30. *
  31. * @dataProvider dataProviderShortcutsButtons
  32. *
  33. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  34. */
  35. public function testAddShortcutsButtons(array $blocks)
  36. {
  37. /** @var ShortcutButtons|\PHPUnit_Framework_MockObject_MockObject $shortcutButtonsMock */
  38. $shortcutButtonsMock = $this->getMockBuilder(ShortcutButtons::class)
  39. ->setMethods(['getLayout', 'addShortcut'])
  40. ->disableOriginalConstructor()
  41. ->getMock();
  42. /** @var ShortcutButtons|\PHPUnit_Framework_MockObject_MockObject $shortcutButtonsMock */
  43. $eventMock = $this->getMockBuilder(DataObject::class)
  44. ->setMethods(
  45. [
  46. 'getContainer',
  47. 'getCheckoutSession',
  48. 'getIsCatalogProduct',
  49. 'getOrPosition'
  50. ]
  51. )->disableOriginalConstructor()
  52. ->getMock();
  53. $eventMock->expects(self::once())
  54. ->method('getContainer')
  55. ->willReturn($shortcutButtonsMock);
  56. $observer = new Observer();
  57. $observer->setEvent($eventMock);
  58. /** @var Config|\PHPUnit_Framework_MockObject_MockObject $paypalConfigMock */
  59. $paypalConfigMock = $this->getMockBuilder(Config::class)
  60. ->disableOriginalConstructor()
  61. ->getMock();
  62. /** @var Factory|\PHPUnit_Framework_MockObject_MockObject $shortcutFactoryMock */
  63. $shortcutFactoryMock = $this->getMockBuilder(Factory::class)
  64. ->setMethods(['create'])
  65. ->disableOriginalConstructor()
  66. ->getMock();
  67. $model = new AddPaypalShortcutsObserver(
  68. $shortcutFactoryMock,
  69. $paypalConfigMock
  70. );
  71. /** @var Layout|\PHPUnit_Framework_MockObject_MockObject $layoutMock */
  72. $layoutMock = $this->getMockBuilder(Layout::class)
  73. ->setMethods(['createBlock'])
  74. ->disableOriginalConstructor()
  75. ->getMock();
  76. $callIndexBlock = 0;
  77. $callIndexShortcutFactory = 0;
  78. $callIndexAvailable = 0;
  79. $callIndexSession = 0;
  80. foreach ($blocks as $instanceName => $blockData) {
  81. $params = [];
  82. $paypalConfigMock->expects(self::at($callIndexAvailable))
  83. ->method('isMethodAvailable')
  84. ->with($blockData[self::PAYMENT_CODE])
  85. ->willReturn($blockData[self::PAYMENT_AVAILABLE]);
  86. ++$callIndexAvailable;
  87. if (!$blockData[self::PAYMENT_AVAILABLE]) {
  88. continue;
  89. }
  90. ++$callIndexSession;
  91. $params['shortcutValidator'] = 'test-shortcut-validator';
  92. $shortcutFactoryMock->expects(self::at($callIndexShortcutFactory))
  93. ->method('create')
  94. ->with('test-checkout-session')
  95. ->willReturn('test-shortcut-validator');
  96. ++$callIndexShortcutFactory;
  97. if (!$blockData[self::PAYMENT_IS_BML]) {
  98. $params['checkoutSession'] = 'test-checkout-session';
  99. ++$callIndexSession;
  100. }
  101. $blockMock = $this->getMockBuilder(MinicartButton::class)
  102. ->setMethods(['setIsInCatalogProduct', 'setShowOrPosition'])
  103. ->disableOriginalConstructor()
  104. ->getMockForAbstractClass();
  105. $blockMock->expects(self::once())
  106. ->method('setIsInCatalogProduct')
  107. ->willReturnSelf();
  108. $blockMock->expects(self::once())
  109. ->method('setShowOrPosition')
  110. ->willReturnSelf();
  111. $layoutMock->expects(self::at($callIndexBlock))
  112. ->method('createBlock')
  113. ->with($instanceName, '', $params)
  114. ->willReturn($blockMock);
  115. ++$callIndexBlock;
  116. }
  117. $shortcutButtonsMock->expects(self::exactly($callIndexBlock))
  118. ->method('addShortcut')
  119. ->with(self::isInstanceOf(ShortcutInterface::class));
  120. $shortcutButtonsMock->expects(self::exactly($callIndexBlock))
  121. ->method('getLayout')
  122. ->willReturn($layoutMock);
  123. $eventMock->expects(self::exactly($callIndexSession))
  124. ->method('getCheckoutSession')
  125. ->willReturn('test-checkout-session');
  126. $model->execute($observer);
  127. }
  128. /**
  129. * @return array
  130. */
  131. public function dataProviderShortcutsButtons()
  132. {
  133. return [
  134. [
  135. 'blocks1' => [
  136. MinicartButton::class => [
  137. self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
  138. self::PAYMENT_AVAILABLE => true,
  139. self::PAYMENT_IS_BML => false,
  140. ],
  141. Button::class => [
  142. self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
  143. self::PAYMENT_AVAILABLE => true,
  144. self::PAYMENT_IS_BML => false,
  145. ],
  146. \Magento\Paypal\Block\Express\Shortcut::class => [
  147. self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS,
  148. self::PAYMENT_AVAILABLE => true,
  149. self::PAYMENT_IS_BML => false,
  150. ],
  151. \Magento\Paypal\Block\Bml\Shortcut::class => [
  152. self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS,
  153. self::PAYMENT_AVAILABLE => true,
  154. self::PAYMENT_IS_BML => true,
  155. ],
  156. \Magento\Paypal\Block\WpsExpress\Shortcut::class => [
  157. self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
  158. self::PAYMENT_AVAILABLE => true,
  159. self::PAYMENT_IS_BML => false,
  160. ],
  161. \Magento\Paypal\Block\WpsBml\Shortcut::class => [
  162. self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
  163. self::PAYMENT_AVAILABLE => true,
  164. self::PAYMENT_IS_BML => false,
  165. ],
  166. \Magento\Paypal\Block\PayflowExpress\Shortcut::class => [
  167. self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS,
  168. self::PAYMENT_AVAILABLE => true,
  169. self::PAYMENT_IS_BML => false,
  170. ],
  171. \Magento\Paypal\Block\Payflow\Bml\Shortcut::class => [
  172. self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS,
  173. self::PAYMENT_AVAILABLE => true,
  174. self::PAYMENT_IS_BML => true,
  175. ]
  176. ],
  177. ],
  178. [
  179. 'blocks2' => [
  180. MinicartButton::class => [
  181. self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
  182. self::PAYMENT_AVAILABLE => false,
  183. self::PAYMENT_IS_BML => false,
  184. ],
  185. Button::class => [
  186. self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
  187. self::PAYMENT_AVAILABLE => true,
  188. self::PAYMENT_IS_BML => false,
  189. ],
  190. \Magento\Paypal\Block\Express\Shortcut::class => [
  191. self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS,
  192. self::PAYMENT_AVAILABLE => false,
  193. self::PAYMENT_IS_BML => false,
  194. ],
  195. \Magento\Paypal\Block\Bml\Shortcut::class => [
  196. self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS,
  197. self::PAYMENT_AVAILABLE => false,
  198. self::PAYMENT_IS_BML => true,
  199. ],
  200. \Magento\Paypal\Block\WpsExpress\Shortcut::class => [
  201. self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
  202. self::PAYMENT_AVAILABLE => false,
  203. self::PAYMENT_IS_BML => false,
  204. ],
  205. \Magento\Paypal\Block\WpsBml\Shortcut::class => [
  206. self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
  207. self::PAYMENT_AVAILABLE => false,
  208. self::PAYMENT_IS_BML => false,
  209. ],
  210. \Magento\Paypal\Block\PayflowExpress\Shortcut::class => [
  211. self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS,
  212. self::PAYMENT_AVAILABLE => false,
  213. self::PAYMENT_IS_BML => false,
  214. ],
  215. \Magento\Paypal\Block\Payflow\Bml\Shortcut::class => [
  216. self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS,
  217. self::PAYMENT_AVAILABLE => false,
  218. self::PAYMENT_IS_BML => true,
  219. ]
  220. ],
  221. ]
  222. ];
  223. }
  224. }