class UrlAlterFunctionalTest in Drupal 10
Same name and namespace in other branches
- 8 core/modules/path_alias/tests/src/Functional/UrlAlterFunctionalTest.php \Drupal\Tests\path_alias\Functional\UrlAlterFunctionalTest
- 9 core/modules/path_alias/tests/src/Functional/UrlAlterFunctionalTest.php \Drupal\Tests\path_alias\Functional\UrlAlterFunctionalTest
Tests altering the inbound path and the outbound path.
@group path_alias
Hierarchy
- class \Drupal\Tests\BrowserTestBase extends \PHPUnit\Framework\TestCase uses \Drupal\Tests\PhpUnitCompatibilityTrait, \Symfony\Bridge\PhpUnit\ExpectDeprecationTrait, FunctionalTestSetupTrait, TestSetupTrait, BlockCreationTrait, ConfigTestTrait, ExtensionListTestTrait, ContentTypeCreationTrait, NodeCreationTrait, RandomGeneratorTrait, TestRequirementsTrait, PhpUnitWarnings, UiHelperTrait, UserCreationTrait, XdebugRequestTrait
- class \Drupal\Tests\path_alias\Functional\UrlAlterFunctionalTest uses PathAliasTestTrait
Expanded class hierarchy of UrlAlterFunctionalTest
1 string reference to 'UrlAlterFunctionalTest'
- drupal7.php in core/
modules/ migrate_drupal/ tests/ fixtures/ drupal7.php - A database agnostic dump for testing purposes.
File
- core/
modules/ path_alias/ tests/ src/ Functional/ UrlAlterFunctionalTest.php, line 17
Namespace
Drupal\Tests\path_alias\FunctionalView source
class UrlAlterFunctionalTest extends BrowserTestBase {
use PathAliasTestTrait;
/**
* Modules to enable.
*
* @var array
*/
protected static $modules = [
'path',
'forum',
'url_alter_test',
];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* Tests that URL altering works and that it occurs in the correct order.
*/
public function testUrlAlter() {
// Ensure that the path_alias table exists after Drupal installation.
$this
->assertTrue(Database::getConnection()
->schema()
->tableExists('path_alias'), 'The path_alias table exists after Drupal installation.');
// User names can have quotes and plus signs so we should ensure that URL
// altering works with this.
$account = $this
->drupalCreateUser([
'administer url aliases',
], "it's+bar");
$this
->drupalLogin($account);
$uid = $account
->id();
$name = $account
->getAccountName();
// Test a single altered path.
$this
->drupalGet("user/{$name}");
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertUrlOutboundAlter("/user/{$uid}", "/user/{$name}");
// Test that a path always uses its alias.
$this
->createPathAlias("/user/{$uid}/test1", '/alias/test1');
$this
->rebuildContainer();
$this
->assertUrlInboundAlter('/alias/test1', "/user/{$uid}/test1");
$this
->assertUrlOutboundAlter("/user/{$uid}/test1", '/alias/test1');
// Test adding an alias via the UI.
$edit = [
'path[0][value]' => "/user/{$uid}/edit",
'alias[0][value]' => '/alias/test2',
];
$this
->drupalGet('admin/config/search/path/add');
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->pageTextContains('The alias has been saved.');
$this
->drupalGet('alias/test2');
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertUrlOutboundAlter("/user/{$uid}/edit", '/alias/test2');
// Test a non-existent user is not altered.
$uid++;
$this
->assertUrlOutboundAlter("/user/{$uid}", "/user/{$uid}");
// Test that 'forum' is altered to 'community' correctly, both at the root
// level and for a specific existing forum.
$this
->drupalGet('community');
$this
->assertSession()
->pageTextContains('General discussion');
$this
->assertUrlOutboundAlter('/forum', '/community');
$forum_vid = $this
->config('forum.settings')
->get('vocabulary');
$term_name = $this
->randomMachineName();
$term = Term::create([
'name' => $term_name,
'vid' => $forum_vid,
]);
$term
->save();
$this
->drupalGet("community/" . $term
->id());
$this
->assertSession()
->pageTextContains($term_name);
$this
->assertUrlOutboundAlter("/forum/" . $term
->id(), "/community/" . $term
->id());
// Test outbound query string altering.
$url = Url::fromRoute('user.login');
$this
->assertSame(\Drupal::request()
->getBaseUrl() . '/user/login?foo=bar', $url
->toString());
}
/**
* Assert that an outbound path is altered to an expected value.
*
* @param string $original
* A string with the original path that is run through generateFrommPath().
* @param string $final
* A string with the expected result after generateFrommPath().
*
* @internal
*/
protected function assertUrlOutboundAlter(string $original, string $final) : void {
// Test outbound altering.
$result = $this->container
->get('path_processor_manager')
->processOutbound($original);
$this
->assertSame($final, $result, new FormattableMarkup('Altered outbound URL %original, expected %final, and got %result.', [
'%original' => $original,
'%final' => $final,
'%result' => $result,
]));
}
/**
* Assert that an inbound path is altered to an expected value.
*
* @param string $original
* The original path before it has been altered by inbound URL processing.
* @param string $final
* A string with the expected result.
*
* @internal
*/
protected function assertUrlInboundAlter(string $original, string $final) : void {
// Test inbound altering.
$result = $this->container
->get('path_alias.manager')
->getPathByAlias($original);
$this
->assertSame($final, $result, new FormattableMarkup('Altered inbound URL %original, expected %final, and got %result.', [
'%original' => $original,
'%final' => $final,
'%result' => $result,
]));
}
}