class PathProcessorTest
Same name in this branch
- 11.x core/modules/forum/tests/modules/forum_url_alter_test/src/PathProcessorTest.php \Drupal\forum_url_alter_test\PathProcessorTest
- 11.x core/modules/system/tests/modules/url_alter_test/src/PathProcessorTest.php \Drupal\url_alter_test\PathProcessorTest
Same name in other branches
- 9 core/modules/system/tests/modules/url_alter_test/src/PathProcessorTest.php \Drupal\url_alter_test\PathProcessorTest
- 9 core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php \Drupal\Tests\Core\PathProcessor\PathProcessorTest
- 8.9.x core/modules/system/tests/modules/url_alter_test/src/PathProcessorTest.php \Drupal\url_alter_test\PathProcessorTest
- 8.9.x core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php \Drupal\Tests\Core\PathProcessor\PathProcessorTest
- 10 core/modules/forum/tests/modules/forum_url_alter_test/src/PathProcessorTest.php \Drupal\forum_url_alter_test\PathProcessorTest
- 10 core/modules/system/tests/modules/url_alter_test/src/PathProcessorTest.php \Drupal\url_alter_test\PathProcessorTest
- 10 core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php \Drupal\Tests\Core\PathProcessor\PathProcessorTest
Tests processing of the inbound path.
@group PathProcessor
Hierarchy
- class \Drupal\Tests\UnitTestCase extends \PHPUnit\Framework\TestCase uses \Drupal\Tests\PhpUnitCompatibilityTrait, \Prophecy\PhpUnit\ProphecyTrait, \Drupal\TestTools\Extension\DeprecationBridge\ExpectDeprecationTrait, \Drupal\Tests\RandomGeneratorTrait
- class \Drupal\Tests\Core\PathProcessor\PathProcessorTest extends \Drupal\Tests\UnitTestCase
Expanded class hierarchy of PathProcessorTest
File
-
core/
tests/ Drupal/ Tests/ Core/ PathProcessor/ PathProcessorTest.php, line 24
Namespace
Drupal\Tests\Core\PathProcessorView source
class PathProcessorTest extends UnitTestCase {
/**
* Configuration for the languageManager stub.
*
* @var \Drupal\Core\Language\LanguageInterface[]
*/
protected $languages;
/**
* The language manager stub used to construct a PathProcessorLanguage object.
*
* @var \Drupal\language\ConfigurableLanguageManagerInterface|\PHPUnit\Framework\MockObject\MockBuilder
*/
protected $languageManager;
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
// Set up some languages to be used by the language-based path processor.
$languages = [];
foreach ([
'en',
'fr',
] as $langcode) {
$language = new Language([
'id' => $langcode,
]);
$languages[$langcode] = $language;
}
$this->languages = $languages;
// Create a stub configuration.
$language_prefixes = array_keys($this->languages);
$config = [
'url' => [
'prefixes' => array_combine($language_prefixes, $language_prefixes),
],
];
// Create a language manager stub.
$language_manager = $this->getMockBuilder('Drupal\\language\\ConfigurableLanguageManagerInterface')
->getMock();
$language_manager->expects($this->any())
->method('getCurrentLanguage')
->willReturn($languages['en']);
$language_manager->expects($this->any())
->method('getLanguages')
->willReturn($this->languages);
$language_manager->expects($this->any())
->method('getLanguageTypes')
->willReturn([
LanguageInterface::TYPE_INTERFACE,
]);
$this->languageManager = $language_manager;
}
/**
* Tests resolving the inbound path to the system path.
*/
public function testProcessInbound() : void {
// Create an alias manager stub.
$alias_manager = $this->getMockBuilder(AliasManager::class)
->disableOriginalConstructor()
->getMock();
$system_path_map = [
// Set up one proper alias that can be resolved to a system path.
[
'/foo',
NULL,
'/user/1',
],
// Passing in anything else should return the same string.
[
'/fr/foo',
NULL,
'/fr/foo',
],
[
'/fr',
NULL,
'/fr',
],
[
'/user/login',
NULL,
'/user/login',
],
];
$alias_manager->expects($this->any())
->method('getPathByAlias')
->willReturnMap($system_path_map);
// Create a stub config factory with all config settings that will be checked
// during this test.
$config_factory_stub = $this->getConfigFactoryStub([
'system.site' => [
'page.front' => '/user/login',
],
'language.negotiation' => [
'url' => [
'prefixes' => [
'fr' => 'fr',
],
'source' => LanguageNegotiationUrl::CONFIG_PATH_PREFIX,
],
],
]);
// Create a language negotiator stub.
$negotiator = $this->getMockBuilder('Drupal\\language\\LanguageNegotiatorInterface')
->getMock();
$negotiator->expects($this->any())
->method('getNegotiationMethods')
->willReturn([
LanguageNegotiationUrl::METHOD_ID => [
'class' => 'Drupal\\language\\Plugin\\LanguageNegotiation\\LanguageNegotiationUrl',
'weight' => 9,
],
]);
$method = new LanguageNegotiationUrl();
$method->setConfig($config_factory_stub);
$method->setLanguageManager($this->languageManager);
$negotiator->expects($this->any())
->method('getNegotiationMethodInstance')
->willReturn($method);
// Create a user stub.
$current_user = $this->getMockBuilder('Drupal\\Core\\Session\\AccountInterface')
->getMock();
// Create a config event subscriber stub.
$config_subscriber = $this->getMockBuilder('Drupal\\language\\EventSubscriber\\ConfigSubscriber')
->disableOriginalConstructor()
->getMock();
// Create the processors.
$alias_processor = new AliasPathProcessor($alias_manager);
$decode_processor = new PathProcessorDecode();
$front_processor = new PathProcessorFront($config_factory_stub);
$language_processor = new PathProcessorLanguage($config_factory_stub, $this->languageManager, $negotiator, $current_user, $config_subscriber);
// First, test the processor manager with the processors in the incorrect
// order. The alias processor will run before the language processor, meaning
// aliases will not be found.
$priorities = [
1000 => $alias_processor,
500 => $decode_processor,
300 => $front_processor,
200 => $language_processor,
];
// Create the processor manager and add the processors.
$processor_manager = new PathProcessorManager();
foreach ($priorities as $priority => $processor) {
$processor_manager->addInbound($processor, $priority);
}
// Test resolving the French homepage using the incorrect processor order.
$test_path = '/fr';
$request = Request::create($test_path);
$processed = $processor_manager->processInbound($test_path, $request);
$this->assertEquals('/', $processed, 'Processing in the incorrect order fails to resolve the system path from the empty path');
// Test resolving an existing alias using the incorrect processor order.
$test_path = '/fr/foo';
$request = Request::create($test_path);
$processed = $processor_manager->processInbound($test_path, $request);
$this->assertEquals('/foo', $processed, 'Processing in the incorrect order fails to resolve the system path from an alias');
// Now create a new processor manager and add the processors, this time in
// the correct order.
$processor_manager = new PathProcessorManager();
$priorities = [
1000 => $decode_processor,
500 => $language_processor,
300 => $front_processor,
200 => $alias_processor,
];
foreach ($priorities as $priority => $processor) {
$processor_manager->addInbound($processor, $priority);
}
// Test resolving the French homepage using the correct processor order.
$test_path = '/fr';
$request = Request::create($test_path);
$processed = $processor_manager->processInbound($test_path, $request);
$this->assertEquals('/user/login', $processed, 'Processing in the correct order resolves the system path from the empty path.');
// Test resolving an existing alias using the correct processor order.
$test_path = '/fr/foo';
$request = Request::create($test_path);
$processed = $processor_manager->processInbound($test_path, $request);
$this->assertEquals('/user/1', $processed, 'Processing in the correct order resolves the system path from an alias.');
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
ExpectDeprecationTrait::expectDeprecation | public | function | Adds an expected deprecation. | |
ExpectDeprecationTrait::getCallableName | private static | function | Returns a callable as a string suitable for inclusion in a message. | |
ExpectDeprecationTrait::setUpErrorHandler | public | function | Sets up the test error handler. | |
ExpectDeprecationTrait::tearDownErrorHandler | public | function | Tears down the test error handler. | |
PathProcessorTest::$languageManager | protected | property | The language manager stub used to construct a PathProcessorLanguage object. | |
PathProcessorTest::$languages | protected | property | Configuration for the languageManager stub. | |
PathProcessorTest::setUp | protected | function | Overrides UnitTestCase::setUp | |
PathProcessorTest::testProcessInbound | public | function | Tests resolving the inbound path to the system path. | |
RandomGeneratorTrait::getRandomGenerator | protected | function | Gets the random generator for the utility methods. | |
RandomGeneratorTrait::randomMachineName | protected | function | Generates a unique random string containing letters and numbers. | |
RandomGeneratorTrait::randomObject | public | function | Generates a random PHP object. | |
RandomGeneratorTrait::randomString | public | function | Generates a pseudo-random string of ASCII characters of codes 32 to 126. | |
UnitTestCase::$root | protected | property | The app root. | |
UnitTestCase::getClassResolverStub | protected | function | Returns a stub class resolver. | |
UnitTestCase::getConfigFactoryStub | public | function | Returns a stub config factory that behaves according to the passed array. | |
UnitTestCase::getConfigStorageStub | public | function | Returns a stub config storage that returns the supplied configuration. | |
UnitTestCase::getContainerWithCacheTagsInvalidator | protected | function | Sets up a container with a cache tags invalidator. | |
UnitTestCase::getStringTranslationStub | public | function | Returns a stub translation manager that just returns the passed string. | |
UnitTestCase::setUpBeforeClass | public static | function |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.