![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-paypal/Test/Unit/Observer/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Paypal\Test\Unit\Observer; use Magento\Catalog\Block\ShortcutButtons; use Magento\Catalog\Block\ShortcutInterface; use Magento\Framework\DataObject; use Magento\Framework\Event\Observer; use Magento\Framework\View\Layout; use Magento\Paypal\Block\Express\InContext\Minicart\SmartButton as MinicartButton; use Magento\Paypal\Block\Express\InContext\SmartButton as Button; use Magento\Paypal\Block\Express\Shortcut; use Magento\Paypal\Helper\Shortcut\Factory; use Magento\Paypal\Model\Config; use Magento\Paypal\Observer\AddPaypalShortcutsObserver; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @see \Magento\Paypal\Observer\AddPaypalShortcutsObserver * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AddPaypalShortcutsObserverTest extends TestCase { const PAYMENT_CODE = 'code'; const PAYMENT_AVAILABLE = 'isAvailable'; const PAYMENT_IS_BML = 'isBml'; /** * @param array $blocks * * @return void * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @dataProvider dataProviderShortcutsButtons */ public function testAddShortcutsButtons(array $blocks): void { /** @var ShortcutButtons|MockObject $shortcutButtonsMock */ $shortcutButtonsMock = $this->getMockBuilder(ShortcutButtons::class) ->onlyMethods(['getLayout', 'addShortcut']) ->disableOriginalConstructor() ->getMock(); /** @var ShortcutButtons|MockObject $shortcutButtonsMock */ $eventMock = $this->getMockBuilder(DataObject::class) ->addMethods( [ 'getContainer', 'getCheckoutSession', 'getIsCatalogProduct', 'getOrPosition' ] ) ->disableOriginalConstructor() ->getMock(); $eventMock->expects(self::once()) ->method('getContainer') ->willReturn($shortcutButtonsMock); $observer = new Observer(); $observer->setEvent($eventMock); /** @var Config|MockObject $paypalConfigMock */ $paypalConfigMock = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->getMock(); /** @var Factory|MockObject $shortcutFactoryMock */ $shortcutFactoryMock = $this->getMockBuilder(Factory::class) ->onlyMethods(['create']) ->disableOriginalConstructor() ->getMock(); $model = new AddPaypalShortcutsObserver( $shortcutFactoryMock, $paypalConfigMock ); /** @var Layout|MockObject $layoutMock */ $layoutMock = $this->getMockBuilder(Layout::class) ->onlyMethods(['createBlock']) ->disableOriginalConstructor() ->getMock(); $callIndexBlock = 0; $callIndexShortcutFactory = 0; $callIndexAvailable = 0; $callIndexSession = 0; $paypalConfigMockWithArgs = $paypalConfigMockReturnArgs = []; $shortcutFactoryMockWithArgs = $shortcutFactoryMockReturnArgs = []; $layoutMockWithArgs = $layoutMockReturnArgs = []; foreach ($blocks as $instanceName => $blockData) { $params = []; $paypalConfigMockWithArgs[] = [$blockData[self::PAYMENT_CODE]]; $paypalConfigMockReturnArgs[] = $blockData[self::PAYMENT_AVAILABLE]; ++$callIndexAvailable; if (!$blockData[self::PAYMENT_AVAILABLE]) { continue; } ++$callIndexSession; $params['shortcutValidator'] = 'test-shortcut-validator'; $shortcutFactoryMockWithArgs[] = ['test-checkout-session']; $shortcutFactoryMockReturnArgs[] = 'test-shortcut-validator'; ++$callIndexShortcutFactory; if (!$blockData[self::PAYMENT_IS_BML]) { $params['checkoutSession'] = 'test-checkout-session'; ++$callIndexSession; } $blockMock = $this->getMockBuilder(MinicartButton::class) ->addMethods(['setIsInCatalogProduct', 'setShowOrPosition']) ->disableOriginalConstructor() ->getMockForAbstractClass(); $blockMock->expects(self::once()) ->method('setIsInCatalogProduct') ->willReturnSelf(); $blockMock->expects(self::once()) ->method('setShowOrPosition') ->willReturnSelf(); $layoutMockWithArgs[] = [$instanceName, '', $params]; $layoutMockReturnArgs[] = $blockMock; ++$callIndexBlock; } $paypalConfigMock ->method('isMethodAvailable') ->withConsecutive(...$paypalConfigMockWithArgs) ->willReturnOnConsecutiveCalls(...$paypalConfigMockReturnArgs); $shortcutFactoryMock ->method('create') ->withConsecutive(...$shortcutFactoryMockWithArgs) ->willReturn(...$shortcutFactoryMockReturnArgs); $layoutMock ->method('createBlock') ->withConsecutive(...$layoutMockWithArgs) ->willReturnOnConsecutiveCalls(...$layoutMockReturnArgs); $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(): array { 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 ], 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 ] ] ], [ '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 ], 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 ] ] ] ]; } }