View source
<?php
namespace Drupal\Tests\language_neutral_aliases\Kernel;
use Drupal;
use Drupal\Core\Language\LanguageInterface;
use Drupal\KernelTests\KernelTestBase;
use Drupal\language_neutral_aliases\LanguageNeutralAliasesStorage;
class LanguageNeutralAliasesStorageTest extends KernelTestBase {
protected $field;
public static $modules = [
'language_neutral_aliases',
'path',
];
protected function setUp() {
parent::setUp();
$this->field = 'path';
$this->idField = 'id';
if (version_compare(Drupal::VERSION, '8.8', '<')) {
$this->field = 'source';
$this->idField = 'pid';
}
else {
$this
->installEntitySchema('path_alias');
}
$database = $this->container
->get('database');
$storage = $this->container
->get('path.alias_storage');
$storage
->save('/node/1', '/path/first');
$storage
->save('/node/2', '/path/second');
$storage
->save('/node/3', '/path/third');
$database
->update(LanguageNeutralAliasesStorage::TABLE)
->fields([
'langcode' => 'de',
])
->condition($this->field, '/node/1')
->execute();
$database
->update(LanguageNeutralAliasesStorage::TABLE)
->fields([
'langcode' => 'da',
])
->condition($this->field, '/node/2')
->execute();
if ($this->field === 'path') {
$database
->update('path_alias_revision')
->fields([
'langcode' => 'de',
])
->condition($this->field, '/node/1')
->execute();
$database
->update('path_alias_revision')
->fields([
'langcode' => 'da',
])
->condition($this->field, '/node/2')
->execute();
}
}
protected function getPid($source) {
return $this->container
->get('database')
->select(LanguageNeutralAliasesStorage::TABLE, 'u')
->fields('u', [
$this->idField,
])
->condition($this->field, $source)
->execute()
->fetchField();
}
public function getAllUnfiltered($fields) {
$query = $this->container
->get('database')
->select(LanguageNeutralAliasesStorage::TABLE, 'u')
->fields('u', $fields)
->orderBy($this->field)
->execute();
return count($fields) > 1 ? $query
->fetchAllAssoc() : $query
->fetchCol();
}
public function testSave() {
$storage = $this->container
->get('path.alias_storage');
$storage
->save('/node/4', '/path/fourth', 'de');
$expected = [
'pid' => '4',
'source' => '/node/4',
'alias' => '/path/fourth',
'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
];
$actual = $storage
->load([
$this->field => '/node/4',
]);
$this
->assertEqual($expected, $actual);
$storage
->save('/node/1', '/path/fifth', 'de', $this
->getPid('/node/1'));
$expected = [
'pid' => '5',
'source' => '/node/1',
'alias' => '/path/fifth',
'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
];
$actual = $storage
->load([
'alias' => '/path/fifth',
]);
$this
->assertEqual($expected, $actual);
$storage
->save('/node/4', '/path/sixth', LanguageInterface::LANGCODE_NOT_SPECIFIED, $this
->getPid('/node/4'));
$expected = [
'pid' => '4',
'source' => '/node/4',
'alias' => '/path/sixth',
'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
];
$actual = $storage
->load([
$this->field => '/node/4',
]);
}
public function testLoad() {
$storage = $this->container
->get('path.alias_storage');
$this
->assertFalse($storage
->load([
$this->field => '/node/1',
]));
$this
->assertFalse($storage
->load([
$this->field => '/node/2',
]));
$this
->assertNotFalse($storage
->load([
$this->field => '/node/3',
]));
$this
->assertNotFalse($storage
->load([
$this->field => '/node/3',
'langcode' => 'de',
]));
}
public function testDelete() {
$storage = $this->container
->get('path.alias_storage');
$storage
->delete([
$this->field => '/node/1',
]);
$storage
->delete([
$this->field => '/node/3',
]);
$this
->assertEqual([
'/node/1',
'/node/2',
], $this
->getAllUnfiltered([
$this->field,
]));
}
public function testPreloadPathAlias() {
$storage = $this->container
->get('path.alias_storage');
$this
->assertEqual([
'/node/3' => '/path/third',
], $storage
->preloadPathAlias([
'/node/1',
'/node/3',
], LanguageInterface::LANGCODE_NOT_SPECIFIED));
$this
->assertEqual([
'/node/3' => '/path/third',
], $storage
->preloadPathAlias([
'/node/1',
'/node/3',
], 'de'));
}
public function testLookupPathAlias() {
$storage = $this->container
->get('path.alias_storage');
$this
->assertEqual('/path/third', $storage
->lookupPathAlias('/node/3', LanguageInterface::LANGCODE_NOT_SPECIFIED));
$this
->assertEqual('/path/third', $storage
->lookupPathAlias('/node/3', 'de'));
$this
->assertFalse($storage
->lookupPathAlias('/node/1', LanguageInterface::LANGCODE_NOT_SPECIFIED));
$this
->assertFalse($storage
->lookupPathAlias('/node/1', 'de'));
}
public function testLookupPathSource() {
$storage = $this->container
->get('path.alias_storage');
$this
->assertEqual('/node/3', $storage
->lookupPathSource('/path/third', LanguageInterface::LANGCODE_NOT_SPECIFIED));
$this
->assertEqual('/node/3', $storage
->lookupPathSource('/path/third', 'de'));
$this
->assertFalse($storage
->lookupPathSource('/path/first', LanguageInterface::LANGCODE_NOT_SPECIFIED));
$this
->assertFalse($storage
->lookupPathSource('/path/first', 'de'));
}
public function testAliasExists() {
$storage = $this->container
->get('path.alias_storage');
$this
->assertFalse($storage
->aliasExists('/path/first', LanguageInterface::LANGCODE_NOT_SPECIFIED));
$this
->assertFalse($storage
->aliasExists('/path/first', 'de'));
$this
->assertTrue($storage
->aliasExists('/path/third', LanguageInterface::LANGCODE_NOT_SPECIFIED));
$this
->assertTrue($storage
->aliasExists('/path/third', 'de'));
}
public function testLanguageAliasExists() {
$storage = $this->container
->get('path.alias_storage');
$this
->assertFalse($storage
->languageAliasExists());
}
public function testGetAliasesForAdminListing() {
$storage = $this->container
->get('path.alias_storage');
$this
->assertCount(1, $storage
->getAliasesForAdminListing([], ''));
}
public function testPathHasMatchingAlias() {
$storage = $this->container
->get('path.alias_storage');
$this
->assertFalse($storage
->pathHasMatchingAlias('/node/1'));
$this
->assertTrue($storage
->pathHasMatchingAlias('/node/3'));
}
}