246 lines
7.5 KiB
PHP
Executable File
246 lines
7.5 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Backend\Model;
|
|
|
|
use Magento\Framework\App\RequestInterface;
|
|
use Magento\Framework\Encryption\EncryptorInterface;
|
|
use Magento\Framework\Escaper;
|
|
use Magento\Framework\ObjectManagerInterface;
|
|
use Magento\Framework\Session\SessionManagerInterface;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
|
|
/**
|
|
* Test class for \Magento\Backend\Model\UrlInterface.
|
|
*
|
|
* @magentoAppArea adminhtml
|
|
*/
|
|
class UrlTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
/**
|
|
* @var RequestInterface
|
|
*/
|
|
private $request;
|
|
|
|
/**
|
|
* @var UrlInterface
|
|
*/
|
|
private $_model;
|
|
|
|
/**
|
|
* @var ObjectManagerInterface
|
|
*/
|
|
private $objectManager;
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
$this->objectManager = Bootstrap::getObjectManager();
|
|
$this->request = $this->objectManager->get(RequestInterface::class);
|
|
$this->_model = $this->objectManager->create(UrlInterface::class);
|
|
}
|
|
|
|
/**
|
|
* App isolation is enabled to protect next tests from polluted registry by getUrl().
|
|
*
|
|
* @param string $routePath
|
|
* @param array $requestParams
|
|
* @param string $expectedResult
|
|
* @param array|null $routeParams
|
|
* @return void
|
|
*
|
|
* @dataProvider getUrlDataProvider
|
|
* @magentoAppIsolation enabled
|
|
*/
|
|
public function testGetUrl(
|
|
string $routePath,
|
|
array $requestParams,
|
|
string $expectedResult,
|
|
$routeParams = null
|
|
): void {
|
|
$this->request->setParams($requestParams);
|
|
$url = $this->_model->getUrl($routePath, $routeParams);
|
|
|
|
$this->assertStringContainsString($expectedResult, $url);
|
|
}
|
|
|
|
/**
|
|
* Data provider for getUrl method.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getUrlDataProvider(): array
|
|
{
|
|
/** @var $escaper Escaper */
|
|
$escaper = Bootstrap::getObjectManager()->get(Escaper::class);
|
|
|
|
return [
|
|
[
|
|
'routePath' => 'adminhtml/auth/login',
|
|
'requestParams' => [],
|
|
'expectedResult'=> 'admin/auth/login/key/',
|
|
],
|
|
[
|
|
'routePath' => 'adminhtml/auth/login',
|
|
'requestParams' => [],
|
|
'expectedResult'=> '/param1/a1==/',
|
|
'routeParams' => [
|
|
'_escape_params' => false,
|
|
'param1' => 'a1==',
|
|
],
|
|
],
|
|
[
|
|
'routePath' => 'adminhtml/auth/login',
|
|
'requestParams' => [],
|
|
'expectedResult'=> '/param1/a1==/',
|
|
'routeParams' => [
|
|
'_escape_params' => false,
|
|
'param1' => 'a1==',
|
|
],
|
|
],
|
|
[
|
|
'routePath' => 'adminhtml/auth/login',
|
|
'requestParams' => ['param2' => 'a2=='],
|
|
'expectedResult'=> '/param2/a2==/',
|
|
'routeParams' => [
|
|
'_current' => true,
|
|
'_escape_params' => false,
|
|
],
|
|
],
|
|
[
|
|
'routePath' => 'adminhtml/auth/login',
|
|
'requestParams' => [],
|
|
'expectedResult' => '/param3/' . $escaper->encodeUrlParam('a3==') . '/',
|
|
'routeParams' => [
|
|
'_escape_params' => true,
|
|
'param3' => 'a3==',
|
|
],
|
|
],
|
|
[
|
|
'routePath' => 'adminhtml/auth/login',
|
|
'requestParams' => ['param4' => 'a4=='],
|
|
'expectedResult' => '/param4/' . $escaper->encodeUrlParam('a4==') . '/',
|
|
'routeParams' => [
|
|
'_current' => true,
|
|
'_escape_params' => true,
|
|
],
|
|
],
|
|
[
|
|
'routePath' => 'route/controller/action/id/100',
|
|
'requestParams' => [],
|
|
'expectedResult' => 'id/100',
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @param string $routeName
|
|
* @param string $controller
|
|
* @param string $action
|
|
* @param string $expectedHash
|
|
* @return void
|
|
*
|
|
* @dataProvider getSecretKeyDataProvider
|
|
* @magentoAppIsolation enabled
|
|
*/
|
|
public function testGetSecretKey(string $routeName, string $controller, string $action, string $expectedHash): void
|
|
{
|
|
$this->request->setControllerName('default_controller')
|
|
->setActionName('default_action')
|
|
->setRouteName('default_router');
|
|
|
|
$this->_model->setRequest($this->request);
|
|
$this->objectManager->get(SessionManagerInterface::class)->setData('_form_key', 'salt');
|
|
|
|
$this->assertEquals($expectedHash, $this->_model->getSecretKey($routeName, $controller, $action));
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getSecretKeyDataProvider(): array
|
|
{
|
|
/** @var $encryptor EncryptorInterface */
|
|
$encryptor = Bootstrap::getObjectManager()->get(EncryptorInterface::class);
|
|
|
|
return [
|
|
[
|
|
'',
|
|
'',
|
|
'',
|
|
$encryptor->getHash('default_router' . 'default_controller' . 'default_action' . 'salt'),
|
|
],
|
|
['', '', 'action', $encryptor->getHash('default_router' . 'default_controller' . 'action' . 'salt')],
|
|
[
|
|
'',
|
|
'controller',
|
|
'',
|
|
$encryptor->getHash('default_router' . 'controller' . 'default_action' . 'salt'),
|
|
],
|
|
[
|
|
'',
|
|
'controller',
|
|
'action',
|
|
$encryptor->getHash('default_router' . 'controller' . 'action' . 'salt'),
|
|
],
|
|
[
|
|
'adminhtml',
|
|
'',
|
|
'',
|
|
$encryptor->getHash('adminhtml' . 'default_controller' . 'default_action' . 'salt'),
|
|
],
|
|
[
|
|
'adminhtml',
|
|
'',
|
|
'action',
|
|
$encryptor->getHash('adminhtml' . 'default_controller' . 'action' . 'salt'),
|
|
],
|
|
[
|
|
'adminhtml',
|
|
'controller',
|
|
'',
|
|
$encryptor->getHash('adminhtml' . 'controller' . 'default_action' . 'salt'),
|
|
],
|
|
[
|
|
'adminhtml',
|
|
'controller',
|
|
'action',
|
|
$encryptor->getHash('adminhtml' . 'controller' . 'action' . 'salt'),
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @magentoAppIsolation enabled
|
|
* @return void
|
|
*/
|
|
public function testGetSecretKeyForwarded(): void
|
|
{
|
|
/** @var $encryptor EncryptorInterface */
|
|
$encryptor = $this->objectManager->get(EncryptorInterface::class);
|
|
|
|
$this->request->setControllerName('controller')->setActionName('action');
|
|
$this->request->initForward()->setControllerName(uniqid())->setActionName(uniqid());
|
|
$this->_model->setRequest($this->request);
|
|
$this->objectManager->get(SessionManagerInterface::class)->setData('_form_key', 'salt');
|
|
|
|
$this->assertEquals($encryptor->getHash('controller' . 'action' . 'salt'), $this->_model->getSecretKey());
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function testUseSecretKey(): void
|
|
{
|
|
$this->_model->setNoSecret(true);
|
|
$this->assertFalse($this->_model->useSecretKey());
|
|
|
|
$this->_model->setNoSecret(false);
|
|
$this->assertTrue($this->_model->useSecretKey());
|
|
}
|
|
}
|