mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
431 lines
15 KiB
PHP
431 lines
15 KiB
PHP
<?php declare(strict_types=1);
|
|
/**
|
|
* \Magento\Integration\Controller\Adminhtml
|
|
*
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Integration\Test\Unit\Controller\Adminhtml;
|
|
|
|
use Magento\Backend\App\Action\Context;
|
|
use Magento\Backend\Block\Menu;
|
|
use Magento\Backend\Model\Auth;
|
|
use Magento\Backend\Model\Session;
|
|
use Magento\Backend\Model\View\Result\RedirectFactory;
|
|
use Magento\Framework\App\Config\ScopeConfigInterface;
|
|
use Magento\Framework\App\Request\Http;
|
|
use Magento\Framework\App\ViewInterface;
|
|
use Magento\Framework\Config\ScopeInterface;
|
|
use Magento\Framework\Controller\ResultFactory;
|
|
use Magento\Framework\DataObject;
|
|
use Magento\Framework\Escaper;
|
|
use Magento\Framework\Event\ManagerInterface;
|
|
use Magento\Framework\ObjectManagerInterface;
|
|
use Magento\Framework\Registry;
|
|
use Magento\Framework\Simplexml\Element;
|
|
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
|
|
use Magento\Framework\Translate;
|
|
use Magento\Framework\TranslateInterface;
|
|
use Magento\Framework\View\LayoutInterface;
|
|
use Magento\Framework\View\Model\Layout\Merge;
|
|
use Magento\Framework\View\Page\Config;
|
|
use Magento\Framework\View\Page\Title;
|
|
use Magento\Framework\View\Result\Page;
|
|
use Magento\Integration\Api\IntegrationServiceInterface;
|
|
use Magento\Integration\Api\OauthServiceInterface;
|
|
use Magento\Integration\Block\Adminhtml\Integration\Edit\Tab\Info;
|
|
use Magento\Integration\Helper\Data;
|
|
use Magento\Integration\Model\Integration as IntegrationModel;
|
|
use Magento\Integration\Model\ResourceModel\Integration\Collection;
|
|
use Magento\Security\Model\SecurityCookie;
|
|
use Magento\User\Model\User;
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
/**
|
|
* @SuppressWarnings(PHPMD.TooManyFields)
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
*/
|
|
abstract class IntegrationTest extends TestCase
|
|
{
|
|
/** @var \Magento\Integration\Controller\Adminhtml\Integration */
|
|
protected $_controller;
|
|
|
|
/** @var ObjectManager $objectManagerHelper */
|
|
protected $_objectManagerHelper;
|
|
|
|
/** @var ObjectManagerInterface|MockObject */
|
|
protected $_objectManagerMock;
|
|
|
|
/** @var ScopeConfigInterface|MockObject */
|
|
protected $_configMock;
|
|
|
|
/** @var ManagerInterface|MockObject */
|
|
protected $_eventManagerMock;
|
|
|
|
/** @var Translate|MockObject */
|
|
protected $_translateModelMock;
|
|
|
|
/** @var Session|MockObject */
|
|
protected $_backendSessionMock;
|
|
|
|
/** @var Context|MockObject */
|
|
protected $_backendActionCtxMock;
|
|
|
|
/** @var SecurityCookie|MockObject */
|
|
protected $securityCookieMock;
|
|
|
|
/** @var IntegrationServiceInterface|MockObject */
|
|
protected $_integrationSvcMock;
|
|
|
|
/** @var OauthServiceInterface|MockObject */
|
|
protected $_oauthSvcMock;
|
|
|
|
/** @var Auth|MockObject */
|
|
protected $_authMock;
|
|
|
|
/** @var User|MockObject */
|
|
protected $_userMock;
|
|
|
|
/** @var Registry|MockObject */
|
|
protected $_registryMock;
|
|
|
|
/** @var Http|MockObject */
|
|
protected $_requestMock;
|
|
|
|
/** @var \Magento\Framework\App\Response\Http|MockObject */
|
|
protected $_responseMock;
|
|
|
|
/** @var MockObject */
|
|
protected $_messageManager;
|
|
|
|
/** @var ScopeInterface|MockObject */
|
|
protected $_configScopeMock;
|
|
|
|
/** @var \Magento\Integration\Helper\Data|MockObject */
|
|
protected $_integrationHelperMock;
|
|
|
|
/** @var ViewInterface|MockObject */
|
|
protected $_viewMock;
|
|
|
|
/** @var Merge|MockObject */
|
|
protected $_layoutMergeMock;
|
|
|
|
/** @var LayoutInterface|MockObject */
|
|
protected $_layoutMock;
|
|
|
|
/**
|
|
* @var Page|MockObject
|
|
*/
|
|
protected $resultPageMock;
|
|
|
|
/**
|
|
* @var Config|MockObject
|
|
*/
|
|
protected $viewConfigMock;
|
|
|
|
/**
|
|
* @var Title|MockObject
|
|
*/
|
|
protected $pageTitleMock;
|
|
|
|
/**
|
|
* @var Escaper|MockObject
|
|
*/
|
|
protected $_escaper;
|
|
|
|
/**
|
|
* @var RedirectFactory|MockObject
|
|
*/
|
|
protected $resultRedirectFactory;
|
|
|
|
/**
|
|
* @var ResultFactory|MockObject
|
|
*/
|
|
protected $resultFactory;
|
|
|
|
/** Sample integration ID */
|
|
const INTEGRATION_ID = 1;
|
|
|
|
/**
|
|
* Setup object manager and initialize mocks
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
/** @var ObjectManager $objectManagerHelper */
|
|
$this->_objectManagerHelper = new ObjectManager($this);
|
|
$this->_objectManagerMock = $this->getMockForAbstractClass(ObjectManagerInterface::class);
|
|
// Initialize mocks which are used in several test cases
|
|
$this->_configMock = $this->getMockBuilder(
|
|
ScopeConfigInterface::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_eventManagerMock = $this->getMockBuilder(ManagerInterface::class)
|
|
->disableOriginalConstructor()
|
|
->setMethods(['dispatch'])
|
|
->getMockForAbstractClass();
|
|
$this->_backendSessionMock = $this->getMockBuilder(Session::class)
|
|
->setMethods(['__call', 'getIntegrationData'])
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$this->_userMock = $this->getMockBuilder(User::class)
|
|
->disableOriginalConstructor()
|
|
->setMethods(['getId', 'load', 'performIdentityCheck'])
|
|
->getMock();
|
|
|
|
$this->_translateModelMock = $this->getMockBuilder(
|
|
TranslateInterface::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_integrationSvcMock = $this->getMockBuilder(
|
|
IntegrationServiceInterface::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_oauthSvcMock = $this->getMockBuilder(
|
|
OauthServiceInterface::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_authMock = $this->getMockBuilder(Auth::class)
|
|
->disableOriginalConstructor()
|
|
->setMethods(['getUser', 'logout'])
|
|
->getMock();
|
|
$this->_requestMock = $this->getMockBuilder(
|
|
Http::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_responseMock = $this->getMockBuilder(
|
|
\Magento\Framework\App\Response\Http::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_registryMock = $this->getMockBuilder(Registry::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_configScopeMock = $this->getMockBuilder(
|
|
ScopeInterface::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_integrationHelperMock = $this->getMockBuilder(
|
|
Data::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_messageManager = $this->getMockBuilder(
|
|
\Magento\Framework\Message\ManagerInterface::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_escaper = $this->getMockBuilder(
|
|
Escaper::class
|
|
)->setMethods(
|
|
['escapeHtml']
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->resultPageMock = $this->getMockBuilder(Page::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->viewConfigMock = $this->getMockBuilder(Config::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->pageTitleMock = $this->getMockBuilder(Title::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->securityCookieMock = $this->getMockBuilder(SecurityCookie::class)
|
|
->disableOriginalConstructor()
|
|
->setMethods(['setLogoutReasonCookie'])
|
|
->getMock();
|
|
}
|
|
|
|
/**
|
|
* @param string $actionName
|
|
* @return \Magento\Integration\Controller\Adminhtml\Integration
|
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
|
*/
|
|
protected function _createIntegrationController($actionName)
|
|
{
|
|
// Mock Layout passed into constructor
|
|
$this->_viewMock = $this->getMockBuilder(ViewInterface::class)
|
|
->getMock();
|
|
$this->_layoutMock = $this->getMockBuilder(LayoutInterface::class)
|
|
->setMethods(['getNode'])
|
|
->getMockForAbstractClass();
|
|
$this->_layoutMergeMock = $this->getMockBuilder(
|
|
Merge::class
|
|
)->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->_layoutMock->expects(
|
|
$this->any()
|
|
)->method(
|
|
'getUpdate'
|
|
)->willReturn(
|
|
$this->_layoutMergeMock
|
|
);
|
|
$testElement = new Element('<test>test</test>');
|
|
$this->_layoutMock->expects($this->any())->method('getNode')->willReturn($testElement);
|
|
// for _setActiveMenu
|
|
$this->_viewMock->expects($this->any())->method('getLayout')->willReturn($this->_layoutMock);
|
|
$blockMock = $this->getMockBuilder(Menu::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$menuMock = $this->getMockBuilder(\Magento\Backend\Model\Menu::class)
|
|
->setConstructorArgs([$this->getMockForAbstractClass(LoggerInterface::class)])
|
|
->getMock();
|
|
$loggerMock = $this->getMockBuilder(LoggerInterface::class)
|
|
->getMock();
|
|
$loggerMock->expects($this->any())->method('critical')->willReturnSelf();
|
|
$menuMock->expects($this->any())->method('getParentItems')->willReturn([]);
|
|
$blockMock->expects($this->any())->method('getMenuModel')->willReturn($menuMock);
|
|
$this->_layoutMock->expects($this->any())->method('getMessagesBlock')->willReturn($blockMock);
|
|
$this->_layoutMock->expects($this->any())->method('getBlock')->willReturn($blockMock);
|
|
$this->_viewMock->expects($this->any())
|
|
->method('getPage')
|
|
->willReturn($this->resultPageMock);
|
|
$this->resultPageMock->expects($this->any())
|
|
->method('getConfig')
|
|
->willReturn($this->viewConfigMock);
|
|
$this->viewConfigMock->expects($this->any())
|
|
->method('getTitle')
|
|
->willReturn($this->pageTitleMock);
|
|
|
|
$this->resultRedirectFactory = $this->getMockBuilder(RedirectFactory::class)
|
|
->disableOriginalConstructor()
|
|
->setMethods(['create'])
|
|
->getMock();
|
|
|
|
$this->resultFactory = $this->getMockBuilder(ResultFactory::class)
|
|
->disableOriginalConstructor()
|
|
->setMethods(['create'])
|
|
->getMock();
|
|
|
|
$this->_authMock->expects(
|
|
$this->any()
|
|
)->method(
|
|
'getUser'
|
|
)->willReturn(
|
|
$this->_userMock
|
|
);
|
|
|
|
$this->_userMock->expects($this->any())
|
|
->method('load')
|
|
->willReturn($this->_userMock);
|
|
|
|
$this->_backendSessionMock->expects($this->any())
|
|
->method('getIntegrationData')
|
|
->willReturn(['all_resources' => 1]);
|
|
|
|
$contextParameters = [
|
|
'view' => $this->_viewMock,
|
|
'objectManager' => $this->_objectManagerMock,
|
|
'session' => $this->_backendSessionMock,
|
|
'translator' => $this->_translateModelMock,
|
|
'request' => $this->_requestMock,
|
|
'response' => $this->_responseMock,
|
|
'messageManager' => $this->_messageManager,
|
|
'resultRedirectFactory' => $this->resultRedirectFactory,
|
|
'resultFactory' => $this->resultFactory,
|
|
'auth' => $this->_authMock,
|
|
'eventManager' => $this->_eventManagerMock
|
|
];
|
|
|
|
$this->_backendActionCtxMock = $this->_objectManagerHelper->getObject(
|
|
Context::class,
|
|
$contextParameters
|
|
);
|
|
|
|
$integrationCollection =
|
|
$this->getMockBuilder(Collection::class)
|
|
->disableOriginalConstructor()
|
|
->setMethods(['addUnsecureUrlsFilter', 'getSize'])
|
|
->getMock();
|
|
$integrationCollection->expects($this->any())
|
|
->method('addUnsecureUrlsFilter')
|
|
->willReturn($integrationCollection);
|
|
$integrationCollection->expects($this->any())
|
|
->method('getSize')
|
|
->willReturn(0);
|
|
|
|
$subControllerParams = [
|
|
'context' => $this->_backendActionCtxMock,
|
|
'integrationService' => $this->_integrationSvcMock,
|
|
'oauthService' => $this->_oauthSvcMock,
|
|
'registry' => $this->_registryMock,
|
|
'logger' => $loggerMock,
|
|
'integrationData' => $this->_integrationHelperMock,
|
|
'escaper' => $this->_escaper,
|
|
'integrationCollection' => $integrationCollection,
|
|
];
|
|
/** Create IntegrationController to test */
|
|
$controller = $this->_objectManagerHelper->getObject(
|
|
'\\Magento\\Integration\\Controller\\Adminhtml\\Integration\\' . $actionName,
|
|
$subControllerParams
|
|
);
|
|
if ($actionName == 'Save') {
|
|
$reflection = new \ReflectionClass(get_class($controller));
|
|
$reflectionProperty = $reflection->getProperty('securityCookie');
|
|
$reflectionProperty->setAccessible(true);
|
|
$reflectionProperty->setValue($controller, $this->securityCookieMock);
|
|
}
|
|
return $controller;
|
|
}
|
|
|
|
/**
|
|
* Common mock 'expect' pattern.
|
|
* Calls that need to be mocked out when
|
|
* \Magento\Backend\App\AbstractAction loadLayout() and renderLayout() are called.
|
|
*/
|
|
protected function _verifyLoadAndRenderLayout()
|
|
{
|
|
$map = [
|
|
[ScopeConfigInterface::class, $this->_configMock],
|
|
[Session::class, $this->_backendSessionMock],
|
|
[TranslateInterface::class, $this->_translateModelMock],
|
|
[ScopeInterface::class, $this->_configScopeMock],
|
|
];
|
|
$this->_objectManagerMock->expects($this->any())->method('get')->willReturnMap($map);
|
|
}
|
|
|
|
/**
|
|
* Return sample Integration Data
|
|
*
|
|
* @return DataObject
|
|
*/
|
|
protected function _getSampleIntegrationData()
|
|
{
|
|
return new DataObject(
|
|
[
|
|
Info::DATA_NAME => 'nameTest',
|
|
Info::DATA_ID => self::INTEGRATION_ID,
|
|
'id' => self::INTEGRATION_ID,
|
|
Info::DATA_EMAIL => 'test@magento.com',
|
|
Info::DATA_ENDPOINT => 'http://magento.ll/endpoint',
|
|
Info::DATA_SETUP_TYPE => IntegrationModel::TYPE_MANUAL,
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return integration model mock with sample data.
|
|
*
|
|
* @return \Magento\Integration\Model\Integration|MockObject
|
|
*/
|
|
protected function _getIntegrationModelMock()
|
|
{
|
|
$integrationModelMock = $this->getMockBuilder(\Magento\Integration\Model\Integration::class)->addMethods(
|
|
['setStatus']
|
|
)
|
|
->onlyMethods(['save', '__wakeup', 'getData'])
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$integrationModelMock->expects($this->any())->method('setStatus')->willReturnSelf();
|
|
$integrationModelMock->expects(
|
|
$this->any()
|
|
)->method(
|
|
'getData'
|
|
)->willReturn(
|
|
$this->_getSampleIntegrationData()
|
|
);
|
|
|
|
return $integrationModelMock;
|
|
}
|
|
}
|