123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Backend\Block;
- use Magento\Framework\App\State;
- use Magento\Framework\Component\ComponentRegistrar;
- /**
- * Test class for \Magento\Backend\Block\Menu
- * @magentoAppArea adminhtml
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class MenuTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Backend\Block\Menu $blockMenu
- */
- protected $blockMenu;
- /** @var \Magento\Framework\App\Cache\Type\Config $configCacheType */
- protected $configCacheType;
- /**
- * @var array
- */
- protected $backupRegistrar;
- /**
- * @var \Magento\Backend\Model\Menu\Config
- */
- private $menuConfig;
- protected function setUp()
- {
- $this->configCacheType = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
- \Magento\Framework\App\Cache\Type\Config::class
- );
- $this->configCacheType->save('', \Magento\Backend\Model\Menu\Config::CACHE_MENU_OBJECT);
- $reflection = new \ReflectionClass(\Magento\Framework\Component\ComponentRegistrar::class);
- $paths = $reflection->getProperty('paths');
- $paths->setAccessible(true);
- $this->backupRegistrar = $paths->getValue();
- $paths->setAccessible(false);
- $this->menuConfig = $this->prepareMenuConfig();
- $this->blockMenu = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
- \Magento\Backend\Block\Menu::class,
- ['menuConfig' => $this->menuConfig]
- );
- }
- /**
- * Verify that Admin Navigation Menu elements have correct titles & are located on correct levels
- */
- public function testRenderNavigation()
- {
- $menuHtml = $this->blockMenu->renderNavigation($this->menuConfig->getMenu());
- $menu = new \SimpleXMLElement($menuHtml);
- $item = $menu->xpath('/ul/li/a/span')[0];
- $this->assertEquals('System', (string)$item, '"System" item is absent or located on wrong menu level.');
- $item = $menu->xpath('/ul//ul/li/strong/span')[0];
- $this->assertEquals('Report', (string)$item, '"Report" item is absent or located on wrong menu level.');
- $liTitles = [
- 'Private Sales',
- 'Invite',
- 'Invited Customers',
- ];
- foreach ($menu->xpath('/ul//ul//ul/li/a/span') as $sortOrder => $item) {
- $this->assertEquals(
- $liTitles[$sortOrder],
- (string)$item,
- '"' . $liTitles[$sortOrder] . '" item is absent or located on wrong menu level.'
- );
- }
- }
- /**
- * @return \Magento\Backend\Model\Menu\Config
- */
- protected function prepareMenuConfig()
- {
- $this->loginAdminUser();
- $componentRegistrar = new \Magento\Framework\Component\ComponentRegistrar();
- $libraryPath = $componentRegistrar->getPath(ComponentRegistrar::LIBRARY, 'magento/framework');
- $reflection = new \ReflectionClass(\Magento\Framework\Component\ComponentRegistrar::class);
- $paths = $reflection->getProperty('paths');
- $paths->setAccessible(true);
- $paths->setValue(
- [
- ComponentRegistrar::MODULE => [],
- ComponentRegistrar::THEME => [],
- ComponentRegistrar::LANGUAGE => [],
- ComponentRegistrar::LIBRARY => []
- ]
- );
- $paths->setAccessible(false);
- ComponentRegistrar::register(ComponentRegistrar::LIBRARY, 'magento/framework', $libraryPath);
- ComponentRegistrar::register(
- ComponentRegistrar::MODULE,
- 'Magento_Backend',
- __DIR__ . '/_files/menu/Magento/Backend'
- );
- /* @var $validationState \Magento\Framework\App\Arguments\ValidationState */
- $validationState = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
- \Magento\Framework\App\Arguments\ValidationState::class,
- ['appMode' => State::MODE_DEFAULT]
- );
- /* @var $configReader \Magento\Backend\Model\Menu\Config\Reader */
- $configReader = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
- \Magento\Backend\Model\Menu\Config\Reader::class,
- ['validationState' => $validationState]
- );
- return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
- \Magento\Backend\Model\Menu\Config::class,
- [
- 'configReader' => $configReader,
- 'configCacheType' => $this->configCacheType
- ]
- );
- }
- /**
- * @return void
- */
- protected function loginAdminUser()
- {
- \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
- ->get(\Magento\Backend\Model\UrlInterface::class)
- ->turnOffSecretKey();
- $auth = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Backend\Model\Auth::class);
- $auth->login(\Magento\TestFramework\Bootstrap::ADMIN_NAME, \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD);
- }
- /**
- * @return void
- */
- protected function tearDown()
- {
- $this->configCacheType->save('', \Magento\Backend\Model\Menu\Config::CACHE_MENU_OBJECT);
- $reflection = new \ReflectionClass(\Magento\Framework\Component\ComponentRegistrar::class);
- $paths = $reflection->getProperty('paths');
- $paths->setAccessible(true);
- $paths->setValue($this->backupRegistrar);
- $paths->setAccessible(false);
- }
- }
|