function UrlAlterFunctionalTest::testUrlAlter

Test that URL altering works and that it occurs in the correct order.

File

drupal/core/modules/system/lib/Drupal/system/Tests/Path/UrlAlterFunctionalTest.php, line 35
Definition of Drupal\system\Tests\Path\UrlAlterFunctionalTest.

Class

UrlAlterFunctionalTest
Tests hook_url_alter functions.

Namespace

Drupal\system\Tests\Path

Code

function testUrlAlter() {
  $account = $this
    ->drupalCreateUser(array(
    'administer url aliases',
  ));
  $this
    ->drupalLogin($account);
  $uid = $account->uid;
  $name = $account->name;

  // Test a single altered path.
  $this
    ->drupalGet("user/{$name}");
  $this
    ->assertResponse('200', 'The user/username path gets resolved correctly');
  $this
    ->assertUrlOutboundAlter("user/{$uid}", "user/{$name}");

  // Test that a path always uses its alias.
  $path = array(
    'source' => "user/{$uid}/test1",
    'alias' => 'alias/test1',
  );
  $this->container
    ->get('path.crud')
    ->save($path['source'], $path['alias']);
  $this
    ->rebuildContainer();
  $this
    ->assertUrlInboundAlter('alias/test1', "user/{$uid}/test1");
  $this
    ->assertUrlOutboundAlter("user/{$uid}/test1", 'alias/test1');

  // Test adding an alias via the UI.
  $edit = array(
    'source' => "user/{$uid}/edit",
    'alias' => 'alias/test2',
  );
  $this
    ->drupalPost('admin/config/search/path/add', $edit, t('Save'));
  $this
    ->assertText(t('The alias has been saved.'));
  $this
    ->drupalGet('alias/test2');
  $this
    ->assertResponse('200', 'The path alias gets resolved correctly');
  $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
    ->assertText('General discussion', 'The community path gets resolved correctly');
  $this
    ->assertUrlOutboundAlter('forum', 'community');
  $forum_vid = config('forum.settings')
    ->get('vocabulary');
  $term_name = $this
    ->randomName();
  $term = entity_create('taxonomy_term', array(
    'name' => $term_name,
    'vid' => $forum_vid,
  ));
  $term
    ->save();
  $this
    ->drupalGet("community/" . $term
    ->id());
  $this
    ->assertText($term_name, 'The community/{tid} path gets resolved correctly');
  $this
    ->assertUrlOutboundAlter("forum/" . $term
    ->id(), "community/" . $term
    ->id());
}