123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Backend\Test\Unit\Model\Menu;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class ItemTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Backend\Model\Menu\Item
- */
- protected $_model;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $_aclMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $_menuFactoryMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $_urlModelMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $_scopeConfigMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $_moduleManager;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $_moduleListMock;
- /** @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager */
- private $objectManager;
- /**
- * @var array
- */
- protected $_params = [
- 'id' => 'item',
- 'title' => 'Item Title',
- 'action' => '/system/config',
- 'resource' => 'Magento_Config::config',
- 'dependsOnModule' => 'Magento_Backend',
- 'dependsOnConfig' => 'system/config/isEnabled',
- 'toolTip' => 'Item tooltip',
- ];
- protected function setUp()
- {
- $this->_aclMock = $this->createMock(\Magento\Framework\AuthorizationInterface::class);
- $this->_scopeConfigMock = $this->createMock(\Magento\Framework\App\Config\ScopeConfigInterface::class);
- $this->_menuFactoryMock = $this->createPartialMock(\Magento\Backend\Model\MenuFactory::class, ['create']);
- $this->_urlModelMock = $this->createMock(\Magento\Backend\Model\Url::class);
- $this->_moduleManager = $this->createMock(\Magento\Framework\Module\Manager::class);
- $validatorMock = $this->createMock(\Magento\Backend\Model\Menu\Item\Validator::class);
- $validatorMock->expects($this->any())->method('validate');
- $this->_moduleListMock = $this->createMock(\Magento\Framework\Module\ModuleListInterface::class);
- $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->_model = $this->objectManager->getObject(
- \Magento\Backend\Model\Menu\Item::class,
- [
- 'validator' => $validatorMock,
- 'authorization' => $this->_aclMock,
- 'scopeConfig' => $this->_scopeConfigMock,
- 'menuFactory' => $this->_menuFactoryMock,
- 'urlModel' => $this->_urlModelMock,
- 'moduleList' => $this->_moduleListMock,
- 'moduleManager' => $this->_moduleManager,
- 'data' => $this->_params
- ]
- );
- }
- public function testGetUrlWithEmptyActionReturnsHashSign()
- {
- $this->_params['action'] = '';
- $item = $this->objectManager->getObject(
- \Magento\Backend\Model\Menu\Item::class,
- ['menuFactory' => $this->_menuFactoryMock, 'data' => $this->_params]
- );
- $this->assertEquals('#', $item->getUrl());
- }
- public function testGetUrlWithValidActionReturnsUrl()
- {
- $this->_urlModelMock->expects(
- $this->once()
- )->method(
- 'getUrl'
- )->with(
- $this->equalTo('/system/config')
- )->will(
- $this->returnValue('Url')
- );
- $this->assertEquals('Url', $this->_model->getUrl());
- }
- public function testHasClickCallbackReturnsFalseIfItemHasAction()
- {
- $this->assertFalse($this->_model->hasClickCallback());
- }
- public function testHasClickCallbackReturnsTrueIfItemHasNoAction()
- {
- $this->_params['action'] = '';
- $item = $this->objectManager->getObject(
- \Magento\Backend\Model\Menu\Item::class,
- ['menuFactory' => $this->_menuFactoryMock, 'data' => $this->_params]
- );
- $this->assertTrue($item->hasClickCallback());
- }
- public function testGetClickCallbackReturnsStoppingJsIfItemDoesntHaveAction()
- {
- $this->_params['action'] = '';
- $item = $this->objectManager->getObject(
- \Magento\Backend\Model\Menu\Item::class,
- ['menuFactory' => $this->_menuFactoryMock, 'data' => $this->_params]
- );
- $this->assertEquals('return false;', $item->getClickCallback());
- }
- public function testGetClickCallbackReturnsEmptyStringIfItemHasAction()
- {
- $this->assertEquals('', $this->_model->getClickCallback());
- }
- public function testIsDisabledReturnsTrueIfModuleOutputIsDisabled()
- {
- $this->_moduleManager->expects($this->once())->method('isOutputEnabled')->will($this->returnValue(false));
- $this->assertTrue($this->_model->isDisabled());
- }
- public function testIsDisabledReturnsTrueIfModuleDependenciesFail()
- {
- $this->_moduleManager->expects($this->once())->method('isOutputEnabled')->will($this->returnValue(true));
- $this->_moduleListMock->expects($this->once())->method('has')->will($this->returnValue(true));
- $this->assertTrue($this->_model->isDisabled());
- }
- public function testIsDisabledReturnsTrueIfConfigDependenciesFail()
- {
- $this->_moduleManager->expects($this->once())->method('isOutputEnabled')->will($this->returnValue(true));
- $this->_moduleListMock->expects($this->once())->method('has')->will($this->returnValue(true));
- $this->assertTrue($this->_model->isDisabled());
- }
- public function testIsDisabledReturnsFalseIfNoDependenciesFail()
- {
- $this->_moduleManager->expects($this->once())->method('isOutputEnabled')->will($this->returnValue(true));
- $this->_moduleListMock->expects($this->once())->method('has')->will($this->returnValue(true));
- $this->_scopeConfigMock->expects($this->once())->method('isSetFlag')->will($this->returnValue(true));
- $this->assertFalse($this->_model->isDisabled());
- }
- public function testIsAllowedReturnsTrueIfResourceIsAvailable()
- {
- $this->_aclMock->expects(
- $this->once()
- )->method(
- 'isAllowed'
- )->with(
- 'Magento_Config::config'
- )->will(
- $this->returnValue(true)
- );
- $this->assertTrue($this->_model->isAllowed());
- }
- public function testIsAllowedReturnsFalseIfResourceIsNotAvailable()
- {
- $this->_aclMock->expects(
- $this->once()
- )->method(
- 'isAllowed'
- )->with(
- 'Magento_Config::config'
- )->will(
- $this->throwException(new \Magento\Framework\Exception\LocalizedException(__('Error')))
- );
- $this->assertFalse($this->_model->isAllowed());
- }
- public function testGetChildrenCreatesSubmenuOnFirstCall()
- {
- $menuMock = $this->createMock(\Magento\Backend\Model\Menu::class);
- $this->_menuFactoryMock->expects($this->once())->method('create')->will($this->returnValue($menuMock));
- $this->_model->getChildren();
- $this->_model->getChildren();
- }
- /**
- * @param array $data
- * @param array $expected
- * @dataProvider toArrayDataProvider
- */
- public function testToArray(array $data, array $expected)
- {
- $menuMock = $this->createMock(\Magento\Backend\Model\Menu::class);
- $this->_menuFactoryMock->method('create')->will($this->returnValue($menuMock));
- $menuMock->method('toArray')
- ->willReturn($data['sub_menu']);
- $model = $this->objectManager->getObject(
- \Magento\Backend\Model\Menu\Item::class,
- [
- 'authorization' => $this->_aclMock,
- 'scopeConfig' => $this->_scopeConfigMock,
- 'menuFactory' => $this->_menuFactoryMock,
- 'urlModel' => $this->_urlModelMock,
- 'moduleList' => $this->_moduleListMock,
- 'moduleManager' => $this->_moduleManager,
- 'data' => $data
- ]
- );
- $this->assertEquals($expected, $model->toArray());
- }
- /**
- * @return array
- */
- public function toArrayDataProvider()
- {
- return include __DIR__ . '/../_files/menu_item_data.php';
- }
- /**
- * @param array $constructorData
- * @param array $populateFromData
- * @param array $expected
- * @dataProvider populateFromArrayDataProvider
- */
- public function testPopulateFromArray(
- array $constructorData,
- array $populateFromData,
- array $expected
- ) {
- $menuMock = $this->createMock(\Magento\Backend\Model\Menu::class);
- $this->_menuFactoryMock->method('create')->willReturn($menuMock);
- $menuMock->method('toArray')
- ->willReturn(['submenuArray']);
- $model = $this->objectManager->getObject(
- \Magento\Backend\Model\Menu\Item::class,
- [
- 'authorization' => $this->_aclMock,
- 'scopeConfig' => $this->_scopeConfigMock,
- 'menuFactory' => $this->_menuFactoryMock,
- 'urlModel' => $this->_urlModelMock,
- 'moduleList' => $this->_moduleListMock,
- 'moduleManager' => $this->_moduleManager,
- 'data' => $constructorData
- ]
- );
- $model->populateFromArray($populateFromData);
- $this->assertEquals($expected, $model->toArray());
- }
- /**
- * @return array
- */
- public function populateFromArrayDataProvider()
- {
- return include __DIR__ . '/../_files/menu_item_constructor_data.php';
- }
- }
|