function AliasTest::testCRUD

File

drupal/core/modules/system/lib/Drupal/system/Tests/Path/AliasTest.php, line 40
Definition of Drupal\system\Tests\Path\CrudTest.

Class

AliasTest
Tests path alias CRUD and lookup functionality.

Namespace

Drupal\system\Tests\Path

Code

function testCRUD() {

  //Prepare database table.
  $connection = Database::getConnection();
  $this->fixtures
    ->createTables($connection);

  //Create AliasManager and Path object.
  $aliasManager = new AliasManager($connection, $this->container
    ->get('keyvalue'));
  $path = new Path($connection, $aliasManager);
  $aliases = $this->fixtures
    ->sampleUrlAliases();

  //Create a few aliases
  foreach ($aliases as $idx => $alias) {
    $path
      ->save($alias['source'], $alias['alias'], $alias['langcode']);
    $result = $connection
      ->query('SELECT * FROM {url_alias} WHERE source = :source AND alias= :alias AND langcode = :langcode', array(
      ':source' => $alias['source'],
      ':alias' => $alias['alias'],
      ':langcode' => $alias['langcode'],
    ));
    $rows = $result
      ->fetchAll();
    $this
      ->assertEqual(count($rows), 1, format_string('Created an entry for %alias.', array(
      '%alias' => $alias['alias'],
    )));

    //Cache the pid for further tests.
    $aliases[$idx]['pid'] = $rows[0]->pid;
  }

  //Load a few aliases
  foreach ($aliases as $alias) {
    $pid = $alias['pid'];
    $loadedAlias = $path
      ->load(array(
      'pid' => $pid,
    ));
    $this
      ->assertEqual($loadedAlias, $alias, format_string('Loaded the expected path with pid %pid.', array(
      '%pid' => $pid,
    )));
  }

  //Update a few aliases
  foreach ($aliases as $alias) {
    $path
      ->save($alias['source'], $alias['alias'] . '_updated', $alias['langcode'], $alias['pid']);
    $result = $connection
      ->query('SELECT pid FROM {url_alias} WHERE source = :source AND alias= :alias AND langcode = :langcode', array(
      ':source' => $alias['source'],
      ':alias' => $alias['alias'] . '_updated',
      ':langcode' => $alias['langcode'],
    ));
    $pid = $result
      ->fetchField();
    $this
      ->assertEqual($pid, $alias['pid'], format_string('Updated entry for pid %pid.', array(
      '%pid' => $pid,
    )));
  }

  //Delete a few aliases
  foreach ($aliases as $alias) {
    $pid = $alias['pid'];
    $path
      ->delete(array(
      'pid' => $pid,
    ));
    $result = $connection
      ->query('SELECT * FROM {url_alias} WHERE pid = :pid', array(
      ':pid' => $pid,
    ));
    $rows = $result
      ->fetchAll();
    $this
      ->assertEqual(count($rows), 0, format_string('Deleted entry with pid %pid.', array(
      '%pid' => $pid,
    )));
  }
}