You are here

public function AliasManagerTest::testGetAliasByPathUncachedMissWithAlias in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/path_alias/tests/src/Unit/AliasManagerTest.php \Drupal\Tests\path_alias\Unit\AliasManagerTest::testGetAliasByPathUncachedMissWithAlias()

Tests the getAliasByPath cache with an unpreloaded path with alias.

@covers ::getAliasByPath @covers ::writeCache

File

core/modules/path_alias/tests/src/Unit/AliasManagerTest.php, line 482

Class

AliasManagerTest
@coversDefaultClass \Drupal\path_alias\AliasManager @group path_alias

Namespace

Drupal\Tests\path_alias\Unit

Code

public function testGetAliasByPathUncachedMissWithAlias() {
  $path_part1 = $this
    ->randomMachineName();
  $path_part2 = $this
    ->randomMachineName();
  $path = '/' . $path_part1 . '/' . $path_part2;
  $cached_path = $this
    ->randomMachineName();
  $cached_no_alias_path = $this
    ->randomMachineName();
  $cached_alias = $this
    ->randomMachineName();
  $new_alias = $this
    ->randomMachineName();
  $language = $this
    ->setUpCurrentLanguage();
  $cached_paths = [
    $language
      ->getId() => [
      $cached_path,
      $cached_no_alias_path,
    ],
  ];
  $this->cache
    ->expects($this
    ->once())
    ->method('get')
    ->with($this->cacheKey)
    ->will($this
    ->returnValue((object) [
    'data' => $cached_paths,
  ]));

  // Simulate a request so that the preloaded paths are fetched.
  $this->aliasManager
    ->setCacheKey($this->path);
  $this->aliasWhitelist
    ->expects($this
    ->any())
    ->method('get')
    ->with($path_part1)
    ->will($this
    ->returnValue(TRUE));
  $this->aliasRepository
    ->expects($this
    ->once())
    ->method('preloadPathAlias')
    ->with($cached_paths[$language
    ->getId()], $language
    ->getId())
    ->will($this
    ->returnValue([
    $cached_path => $cached_alias,
  ]));
  $this->aliasRepository
    ->expects($this
    ->once())
    ->method('lookupBySystemPath')
    ->with($path, $language
    ->getId())
    ->will($this
    ->returnValue([
    'alias' => $new_alias,
  ]));
  $this
    ->assertEquals($new_alias, $this->aliasManager
    ->getAliasByPath($path));

  // Call it twice to test the static cache.
  $this
    ->assertEquals($new_alias, $this->aliasManager
    ->getAliasByPath($path));

  // There is already a cache entry, so this should not write out to the
  // cache.
  $this->cache
    ->expects($this
    ->never())
    ->method('set');
  $this->aliasManager
    ->writeCache();
}