getMockBuilder(ShortcutButtons::class) ->setMethods(['getLayout', 'addShortcut']) ->disableOriginalConstructor() ->getMock(); /** @var ShortcutButtons|\PHPUnit_Framework_MockObject_MockObject $shortcutButtonsMock */ $eventMock = $this->getMockBuilder(DataObject::class) ->setMethods( [ 'getContainer', 'getCheckoutSession', 'getIsCatalogProduct', 'getOrPosition' ] )->disableOriginalConstructor() ->getMock(); $eventMock->expects(self::once()) ->method('getContainer') ->willReturn($shortcutButtonsMock); $observer = new Observer(); $observer->setEvent($eventMock); /** @var Config|\PHPUnit_Framework_MockObject_MockObject $paypalConfigMock */ $paypalConfigMock = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->getMock(); /** @var Factory|\PHPUnit_Framework_MockObject_MockObject $shortcutFactoryMock */ $shortcutFactoryMock = $this->getMockBuilder(Factory::class) ->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); $model = new AddPaypalShortcutsObserver( $shortcutFactoryMock, $paypalConfigMock ); /** @var Layout|\PHPUnit_Framework_MockObject_MockObject $layoutMock */ $layoutMock = $this->getMockBuilder(Layout::class) ->setMethods(['createBlock']) ->disableOriginalConstructor() ->getMock(); $callIndexBlock = 0; $callIndexShortcutFactory = 0; $callIndexAvailable = 0; $callIndexSession = 0; foreach ($blocks as $instanceName => $blockData) { $params = []; $paypalConfigMock->expects(self::at($callIndexAvailable)) ->method('isMethodAvailable') ->with($blockData[self::PAYMENT_CODE]) ->willReturn($blockData[self::PAYMENT_AVAILABLE]); ++$callIndexAvailable; if (!$blockData[self::PAYMENT_AVAILABLE]) { continue; } ++$callIndexSession; $params['shortcutValidator'] = 'test-shortcut-validator'; $shortcutFactoryMock->expects(self::at($callIndexShortcutFactory)) ->method('create') ->with('test-checkout-session') ->willReturn('test-shortcut-validator'); ++$callIndexShortcutFactory; if (!$blockData[self::PAYMENT_IS_BML]) { $params['checkoutSession'] = 'test-checkout-session'; ++$callIndexSession; } $blockMock = $this->getMockBuilder(MinicartButton::class) ->setMethods(['setIsInCatalogProduct', 'setShowOrPosition']) ->disableOriginalConstructor() ->getMockForAbstractClass(); $blockMock->expects(self::once()) ->method('setIsInCatalogProduct') ->willReturnSelf(); $blockMock->expects(self::once()) ->method('setShowOrPosition') ->willReturnSelf(); $layoutMock->expects(self::at($callIndexBlock)) ->method('createBlock') ->with($instanceName, '', $params) ->willReturn($blockMock); ++$callIndexBlock; } $shortcutButtonsMock->expects(self::exactly($callIndexBlock)) ->method('addShortcut') ->with(self::isInstanceOf(ShortcutInterface::class)); $shortcutButtonsMock->expects(self::exactly($callIndexBlock)) ->method('getLayout') ->willReturn($layoutMock); $eventMock->expects(self::exactly($callIndexSession)) ->method('getCheckoutSession') ->willReturn('test-checkout-session'); $model->execute($observer); } /** * @return array */ public function dataProviderShortcutsButtons() { return [ [ 'blocks1' => [ MinicartButton::class => [ self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS, self::PAYMENT_AVAILABLE => true, self::PAYMENT_IS_BML => false, ], Button::class => [ self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS, self::PAYMENT_AVAILABLE => true, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\Express\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS, self::PAYMENT_AVAILABLE => true, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\Bml\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS, self::PAYMENT_AVAILABLE => true, self::PAYMENT_IS_BML => true, ], \Magento\Paypal\Block\WpsExpress\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS, self::PAYMENT_AVAILABLE => true, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\WpsBml\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS, self::PAYMENT_AVAILABLE => true, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\PayflowExpress\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS, self::PAYMENT_AVAILABLE => true, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\Payflow\Bml\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS, self::PAYMENT_AVAILABLE => true, self::PAYMENT_IS_BML => true, ] ], ], [ 'blocks2' => [ MinicartButton::class => [ self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS, self::PAYMENT_AVAILABLE => false, self::PAYMENT_IS_BML => false, ], Button::class => [ self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS, self::PAYMENT_AVAILABLE => true, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\Express\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS, self::PAYMENT_AVAILABLE => false, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\Bml\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPP_EXPRESS, self::PAYMENT_AVAILABLE => false, self::PAYMENT_IS_BML => true, ], \Magento\Paypal\Block\WpsExpress\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS, self::PAYMENT_AVAILABLE => false, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\WpsBml\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPS_EXPRESS, self::PAYMENT_AVAILABLE => false, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\PayflowExpress\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS, self::PAYMENT_AVAILABLE => false, self::PAYMENT_IS_BML => false, ], \Magento\Paypal\Block\Payflow\Bml\Shortcut::class => [ self::PAYMENT_CODE => Config::METHOD_WPP_PE_EXPRESS, self::PAYMENT_AVAILABLE => false, self::PAYMENT_IS_BML => true, ] ], ] ]; } }