164 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?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(): void
 | 
						|
    {
 | 
						|
        $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(): void
 | 
						|
    {
 | 
						|
        $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);
 | 
						|
    }
 | 
						|
}
 |