Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AddPaypalShortcutsObserverTest.php
Go to the documentation of this file.
1 <?php
7 
18 
25 class AddPaypalShortcutsObserverTest extends \PHPUnit\Framework\TestCase
26 {
27  const PAYMENT_CODE = 'code';
28 
29  const PAYMENT_AVAILABLE = 'isAvailable';
30 
31  const PAYMENT_IS_BML = 'isBml';
32 
40  public function testAddShortcutsButtons(array $blocks)
41  {
43  $shortcutButtonsMock = $this->getMockBuilder(ShortcutButtons::class)
44  ->setMethods(['getLayout', 'addShortcut'])
45  ->disableOriginalConstructor()
46  ->getMock();
47 
49  $eventMock = $this->getMockBuilder(DataObject::class)
50  ->setMethods(
51  [
52  'getContainer',
53  'getCheckoutSession',
54  'getIsCatalogProduct',
55  'getOrPosition'
56  ]
57  )->disableOriginalConstructor()
58  ->getMock();
59 
60  $eventMock->expects(self::once())
61  ->method('getContainer')
62  ->willReturn($shortcutButtonsMock);
63 
64  $observer = new Observer();
65  $observer->setEvent($eventMock);
66 
68  $paypalConfigMock = $this->getMockBuilder(Config::class)
69  ->disableOriginalConstructor()
70  ->getMock();
72  $shortcutFactoryMock = $this->getMockBuilder(Factory::class)
73  ->setMethods(['create'])
74  ->disableOriginalConstructor()
75  ->getMock();
76 
78  $shortcutFactoryMock,
79  $paypalConfigMock
80  );
81 
83  $layoutMock = $this->getMockBuilder(Layout::class)
84  ->setMethods(['createBlock'])
85  ->disableOriginalConstructor()
86  ->getMock();
87 
88  $callIndexBlock = 0;
89  $callIndexShortcutFactory = 0;
90  $callIndexAvailable = 0;
91  $callIndexSession = 0;
92 
93  foreach ($blocks as $instanceName => $blockData) {
94  $params = [];
95 
96  $paypalConfigMock->expects(self::at($callIndexAvailable))
97  ->method('isMethodAvailable')
98  ->with($blockData[self::PAYMENT_CODE])
99  ->willReturn($blockData[self::PAYMENT_AVAILABLE]);
100 
101  ++$callIndexAvailable;
102 
103  if (!$blockData[self::PAYMENT_AVAILABLE]) {
104  continue;
105  }
106 
107  ++$callIndexSession;
108  $params['shortcutValidator'] = 'test-shortcut-validator';
109 
110  $shortcutFactoryMock->expects(self::at($callIndexShortcutFactory))
111  ->method('create')
112  ->with('test-checkout-session')
113  ->willReturn('test-shortcut-validator');
114 
115  ++$callIndexShortcutFactory;
116 
117  if (!$blockData[self::PAYMENT_IS_BML]) {
118  $params['checkoutSession'] = 'test-checkout-session';
119  ++$callIndexSession;
120  }
121 
122  $blockMock = $this->getMockBuilder(Button::class)
123  ->setMethods(['setIsInCatalogProduct', 'setShowOrPosition'])
124  ->disableOriginalConstructor()
125  ->getMockForAbstractClass();
126 
127  $blockMock->expects(self::once())
128  ->method('setIsInCatalogProduct')
129  ->willReturnSelf();
130  $blockMock->expects(self::once())
131  ->method('setShowOrPosition')
132  ->willReturnSelf();
133 
134  $layoutMock->expects(self::at($callIndexBlock))
135  ->method('createBlock')
136  ->with($instanceName, '', $params)
137  ->willReturn($blockMock);
138 
139  ++$callIndexBlock;
140  }
141  $shortcutButtonsMock->expects(self::exactly($callIndexBlock))
142  ->method('addShortcut')
143  ->with(self::isInstanceOf(ShortcutInterface::class));
144  $shortcutButtonsMock->expects(self::exactly($callIndexBlock))
145  ->method('getLayout')
146  ->willReturn($layoutMock);
147  $eventMock->expects(self::exactly($callIndexSession))
148  ->method('getCheckoutSession')
149  ->willReturn('test-checkout-session');
150 
151  $model->execute($observer);
152  }
153 
158  {
159  return [
160  [
161  'blocks1' => [
162  \Magento\Paypal\Block\Express\InContext\Minicart\Button::class => [
163  self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
164  self::PAYMENT_AVAILABLE => true,
165  self::PAYMENT_IS_BML => false,
166  ],
167  \Magento\Paypal\Block\Express\Shortcut::class => [
168  self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS,
169  self::PAYMENT_AVAILABLE => true,
170  self::PAYMENT_IS_BML => false,
171  ],
172  \Magento\Paypal\Block\Bml\Shortcut::class => [
173  self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS,
174  self::PAYMENT_AVAILABLE => true,
175  self::PAYMENT_IS_BML => true,
176  ],
177  \Magento\Paypal\Block\WpsExpress\Shortcut::class => [
178  self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
179  self::PAYMENT_AVAILABLE => true,
180  self::PAYMENT_IS_BML => false,
181  ],
182  \Magento\Paypal\Block\WpsBml\Shortcut::class => [
183  self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
184  self::PAYMENT_AVAILABLE => true,
185  self::PAYMENT_IS_BML => false,
186  ],
187  \Magento\Paypal\Block\PayflowExpress\Shortcut::class => [
188  self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS,
189  self::PAYMENT_AVAILABLE => true,
190  self::PAYMENT_IS_BML => false,
191  ],
192  \Magento\Paypal\Block\Payflow\Bml\Shortcut::class => [
193  self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS,
194  self::PAYMENT_AVAILABLE => true,
195  self::PAYMENT_IS_BML => true,
196  ]
197  ],
198  ],
199  [
200  'blocks2' => [
201  \Magento\Paypal\Block\Express\InContext\Minicart\Button::class => [
202  self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
203  self::PAYMENT_AVAILABLE => false,
204  self::PAYMENT_IS_BML => false,
205  ],
206  \Magento\Paypal\Block\Express\Shortcut::class => [
207  self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS,
208  self::PAYMENT_AVAILABLE => false,
209  self::PAYMENT_IS_BML => false,
210  ],
211  \Magento\Paypal\Block\Bml\Shortcut::class => [
212  self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS,
213  self::PAYMENT_AVAILABLE => false,
214  self::PAYMENT_IS_BML => true,
215  ],
216  \Magento\Paypal\Block\WpsExpress\Shortcut::class => [
217  self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
218  self::PAYMENT_AVAILABLE => false,
219  self::PAYMENT_IS_BML => false,
220  ],
221  \Magento\Paypal\Block\WpsBml\Shortcut::class => [
222  self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS,
223  self::PAYMENT_AVAILABLE => false,
224  self::PAYMENT_IS_BML => false,
225  ],
226  \Magento\Paypal\Block\PayflowExpress\Shortcut::class => [
227  self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS,
228  self::PAYMENT_AVAILABLE => false,
229  self::PAYMENT_IS_BML => false,
230  ],
231  \Magento\Paypal\Block\Payflow\Bml\Shortcut::class => [
232  self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS,
233  self::PAYMENT_AVAILABLE => false,
234  self::PAYMENT_IS_BML => true,
235  ]
236  ],
237  ]
238  ];
239  }
240 }
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18