123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 |
- <?php
- /**
- * \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\Integration\Block\Adminhtml\Integration\Edit\Tab\Info;
- use Magento\Integration\Model\Integration as IntegrationModel;
- use Magento\Security\Model\SecurityCookie;
- /**
- * @SuppressWarnings(PHPMD.TooManyFields)
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- abstract class IntegrationTest extends \PHPUnit\Framework\TestCase
- {
- /** @var \Magento\Integration\Controller\Adminhtml\Integration */
- protected $_controller;
- /** @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager $objectManagerHelper */
- protected $_objectManagerHelper;
- /** @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_objectManagerMock;
- /** @var \Magento\Backend\Model\View\Layout\Filter\Acl|\PHPUnit_Framework_MockObject_MockObject */
- protected $_layoutFilterMock;
- /** @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_configMock;
- /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_eventManagerMock;
- /** @var \Magento\Framework\Translate|\PHPUnit_Framework_MockObject_MockObject */
- protected $_translateModelMock;
- /** @var \Magento\Backend\Model\Session|\PHPUnit_Framework_MockObject_MockObject */
- protected $_backendSessionMock;
- /** @var \Magento\Backend\App\Action\Context|\PHPUnit_Framework_MockObject_MockObject */
- protected $_backendActionCtxMock;
- /** @var SecurityCookie|\PHPUnit_Framework_MockObject_MockObject */
- protected $securityCookieMock;
- /** @var \Magento\Integration\Api\IntegrationServiceInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_integrationSvcMock;
- /** @var \Magento\Integration\Api\OauthServiceInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_oauthSvcMock;
- /** @var \Magento\Backend\Model\Auth|\PHPUnit_Framework_MockObject_MockObject */
- protected $_authMock;
- /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject */
- protected $_userMock;
- /** @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject */
- protected $_registryMock;
- /** @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject */
- protected $_requestMock;
- /** @var \Magento\Framework\App\Response\Http|\PHPUnit_Framework_MockObject_MockObject */
- protected $_responseMock;
- /** @var \PHPUnit_Framework_MockObject_MockObject */
- protected $_messageManager;
- /** @var \Magento\Framework\Config\ScopeInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_configScopeMock;
- /** @var \Magento\Integration\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
- protected $_integrationHelperMock;
- /** @var \Magento\Framework\App\ViewInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_viewMock;
- /** @var \Magento\Framework\View\Model\Layout\Merge|\PHPUnit_Framework_MockObject_MockObject */
- protected $_layoutMergeMock;
- /** @var \Magento\Framework\View\LayoutInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $_layoutMock;
- /**
- * @var \Magento\Framework\View\Result\Page|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $resultPageMock;
- /**
- * @var \Magento\Framework\View\Page\Config|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $viewConfigMock;
- /**
- * @var \Magento\Framework\View\Page\Title|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $pageTitleMock;
- /**
- * @var \Magento\Framework\Escaper|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $_escaper;
- /**
- * @var \Magento\Backend\Model\View\Result\RedirectFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $resultRedirectFactory;
- /**
- * @var \Magento\Framework\Controller\ResultFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $resultFactory;
- /** Sample integration ID */
- const INTEGRATION_ID = 1;
- /**
- * Setup object manager and initialize mocks
- */
- protected function setUp()
- {
- /** @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager $objectManagerHelper */
- $this->_objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->_objectManagerMock = $this->createMock(\Magento\Framework\ObjectManagerInterface::class);
- // Initialize mocks which are used in several test cases
- $this->_configMock = $this->getMockBuilder(
- \Magento\Framework\App\Config\ScopeConfigInterface::class
- )->disableOriginalConstructor()->getMock();
- $this->_eventManagerMock = $this->getMockBuilder(\Magento\Framework\Event\ManagerInterface::class)
- ->disableOriginalConstructor()
- ->setMethods(['dispatch'])
- ->getMock();
- $this->_layoutFilterMock = $this->getMockBuilder(
- \Magento\Backend\Model\Layout\Filter\Acl::class
- )->disableOriginalConstructor()->getMock();
- $this->_backendSessionMock = $this->getMockBuilder(\Magento\Backend\Model\Session::class)
- ->setMethods(['__call', 'getIntegrationData'])
- ->disableOriginalConstructor()
- ->getMock();
- $this->_userMock = $this->getMockBuilder(\Magento\User\Model\User::class)
- ->disableOriginalConstructor()
- ->setMethods(['getId', 'load', 'performIdentityCheck'])
- ->getMock();
- $this->_translateModelMock = $this->getMockBuilder(
- \Magento\Framework\TranslateInterface::class
- )->disableOriginalConstructor()->getMock();
- $this->_integrationSvcMock = $this->getMockBuilder(
- \Magento\Integration\Api\IntegrationServiceInterface::class
- )->disableOriginalConstructor()->getMock();
- $this->_oauthSvcMock = $this->getMockBuilder(
- \Magento\Integration\Api\OauthServiceInterface::class
- )->disableOriginalConstructor()->getMock();
- $this->_authMock = $this->getMockBuilder(\Magento\Backend\Model\Auth::class)
- ->disableOriginalConstructor()
- ->setMethods(['getUser', 'logout'])
- ->getMock();
- $this->_requestMock = $this->getMockBuilder(
- \Magento\Framework\App\Request\Http::class
- )->disableOriginalConstructor()->getMock();
- $this->_responseMock = $this->getMockBuilder(
- \Magento\Framework\App\Response\Http::class
- )->disableOriginalConstructor()->getMock();
- $this->_registryMock = $this->getMockBuilder(\Magento\Framework\Registry::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->_configScopeMock = $this->getMockBuilder(
- \Magento\Framework\Config\ScopeInterface::class
- )->disableOriginalConstructor()->getMock();
- $this->_integrationHelperMock = $this->getMockBuilder(
- \Magento\Integration\Helper\Data::class
- )->disableOriginalConstructor()->getMock();
- $this->_messageManager = $this->getMockBuilder(
- \Magento\Framework\Message\ManagerInterface::class
- )->disableOriginalConstructor()->getMock();
- $this->_escaper = $this->getMockBuilder(
- \Magento\Framework\Escaper::class
- )->setMethods(
- ['escapeHtml']
- )->disableOriginalConstructor()->getMock();
- $this->resultPageMock = $this->getMockBuilder(\Magento\Framework\View\Result\Page::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->viewConfigMock = $this->getMockBuilder(\Magento\Framework\View\Page\Config::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->pageTitleMock = $this->getMockBuilder(\Magento\Framework\View\Page\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(\Magento\Framework\App\ViewInterface::class)
- ->getMock();
- $this->_layoutMock = $this->getMockBuilder(\Magento\Framework\View\LayoutInterface::class)
- ->setMethods(['getNode'])
- ->getMockForAbstractClass();
- $this->_layoutMergeMock = $this->getMockBuilder(
- \Magento\Framework\View\Model\Layout\Merge::class
- )->disableOriginalConstructor()->getMock();
- $this->_layoutMock->expects(
- $this->any()
- )->method(
- 'getUpdate'
- )->will(
- $this->returnValue($this->_layoutMergeMock)
- );
- $testElement = new \Magento\Framework\Simplexml\Element('<test>test</test>');
- $this->_layoutMock->expects($this->any())->method('getNode')->will($this->returnValue($testElement));
- // for _setActiveMenu
- $this->_viewMock->expects($this->any())->method('getLayout')->will($this->returnValue($this->_layoutMock));
- $blockMock = $this->getMockBuilder(\Magento\Backend\Block\Menu::class)->disableOriginalConstructor()->getMock();
- $menuMock = $this->getMockBuilder(\Magento\Backend\Model\Menu::class)
- ->setConstructorArgs([$this->createMock(\Psr\Log\LoggerInterface::class)])
- ->getMock();
- $loggerMock = $this->getMockBuilder(\Psr\Log\LoggerInterface::class)->getMock();
- $loggerMock->expects($this->any())->method('critical')->will($this->returnSelf());
- $menuMock->expects($this->any())->method('getParentItems')->will($this->returnValue([]));
- $blockMock->expects($this->any())->method('getMenuModel')->will($this->returnValue($menuMock));
- $this->_layoutMock->expects($this->any())->method('getMessagesBlock')->will($this->returnValue($blockMock));
- $this->_layoutMock->expects($this->any())->method('getBlock')->will($this->returnValue($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(\Magento\Backend\Model\View\Result\RedirectFactory::class)
- ->disableOriginalConstructor()
- ->setMethods(['create'])
- ->getMock();
- $this->resultFactory = $this->getMockBuilder(\Magento\Framework\Controller\ResultFactory::class)
- ->disableOriginalConstructor()
- ->setMethods(['create'])
- ->getMock();
- $this->_authMock->expects(
- $this->any()
- )->method(
- 'getUser'
- )->will(
- $this->returnValue($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(
- \Magento\Backend\App\Action\Context::class,
- $contextParameters
- );
- $integrationCollection =
- $this->getMockBuilder(\Magento\Integration\Model\ResourceModel\Integration\Collection::class)
- ->disableOriginalConstructor()
- ->setMethods(['addUnsecureUrlsFilter', 'getSize'])
- ->getMock();
- $integrationCollection->expects($this->any())
- ->method('addUnsecureUrlsFilter')
- ->will($this->returnValue($integrationCollection));
- $integrationCollection->expects($this->any())
- ->method('getSize')
- ->will($this->returnValue(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 = [
- [\Magento\Framework\App\Config\ScopeConfigInterface::class, $this->_configMock],
- [\Magento\Backend\Model\Layout\Filter\Acl::class, $this->_layoutFilterMock],
- [\Magento\Backend\Model\Session::class, $this->_backendSessionMock],
- [\Magento\Framework\TranslateInterface::class, $this->_translateModelMock],
- [\Magento\Framework\Config\ScopeInterface::class, $this->_configScopeMock],
- ];
- $this->_objectManagerMock->expects($this->any())->method('get')->will($this->returnValueMap($map));
- }
- /**
- * Return sample Integration Data
- *
- * @return \Magento\Framework\DataObject
- */
- protected function _getSampleIntegrationData()
- {
- return new \Magento\Framework\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|\PHPUnit_Framework_MockObject_MockObject
- */
- protected function _getIntegrationModelMock()
- {
- $integrationModelMock = $this->createPartialMock(
- \Magento\Integration\Model\Integration::class,
- ['save', '__wakeup', 'setStatus', 'getData']
- );
- $integrationModelMock->expects($this->any())->method('setStatus')->will($this->returnSelf());
- $integrationModelMock->expects(
- $this->any()
- )->method(
- 'getData'
- )->will(
- $this->returnValue($this->_getSampleIntegrationData())
- );
- return $integrationModelMock;
- }
- }
|