Pathauto and dependencies
This commit is contained in:
parent
4b1a293d57
commit
24ffcb956b
257 changed files with 29510 additions and 0 deletions
|
@ -0,0 +1,200 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\pathauto\Tests;
|
||||
|
||||
use Drupal\pathauto\PathautoState;
|
||||
use Drupal\simpletest\WebTestBase;
|
||||
|
||||
/**
|
||||
* Mass delete functionality tests.
|
||||
*
|
||||
* @group pathauto
|
||||
*/
|
||||
class PathautoMassDeleteTest extends WebTestBase {
|
||||
|
||||
use PathautoTestHelperTrait;
|
||||
|
||||
/**
|
||||
* Modules to enable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = array('node', 'taxonomy', 'pathauto');
|
||||
|
||||
/**
|
||||
* Admin user.
|
||||
*
|
||||
* @var \Drupal\user\UserInterface
|
||||
*/
|
||||
protected $adminUser;
|
||||
|
||||
/**
|
||||
* The test nodes.
|
||||
*
|
||||
* @var \Drupal\node\NodeInterface
|
||||
*/
|
||||
protected $nodes;
|
||||
|
||||
/**
|
||||
* The test accounts.
|
||||
*
|
||||
* @var \Drupal\user\UserInterface
|
||||
*/
|
||||
protected $accounts;
|
||||
|
||||
/**
|
||||
* The test terms.
|
||||
*
|
||||
* @var \Drupal\taxonomy\TermInterface
|
||||
*/
|
||||
protected $terms;
|
||||
|
||||
|
||||
/**
|
||||
* {inheritdoc}
|
||||
*/
|
||||
function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$permissions = array(
|
||||
'administer pathauto',
|
||||
'administer url aliases',
|
||||
'create url aliases',
|
||||
);
|
||||
$this->adminUser = $this->drupalCreateUser($permissions);
|
||||
$this->drupalLogin($this->adminUser);
|
||||
|
||||
$this->createPattern('node', '/content/[node:title]');
|
||||
$this->createPattern('user', '/users/[user:name]');
|
||||
$this->createPattern('taxonomy_term', '/[term:vocabulary]/[term:name]');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the deletion of all the aliases.
|
||||
*/
|
||||
function testDeleteAll() {
|
||||
// 1. Test that deleting all the aliases, of any type, works.
|
||||
$this->generateAliases();
|
||||
$edit = array(
|
||||
'delete[all_aliases]' => TRUE,
|
||||
'options[keep_custom_aliases]' => FALSE,
|
||||
);
|
||||
$this->drupalPostForm('admin/config/search/path/delete_bulk', $edit, t('Delete aliases now!'));
|
||||
$this->assertText(t('All of your path aliases have been deleted.'));
|
||||
$this->assertUrl('admin/config/search/path/delete_bulk');
|
||||
|
||||
// Make sure that all of them are actually deleted.
|
||||
$aliases = \Drupal::database()->select('url_alias', 'ua')->fields('ua', array())->execute()->fetchAll();
|
||||
$this->assertEqual($aliases, array(), "All the aliases have been deleted.");
|
||||
|
||||
// 2. Test deleting only specific (entity type) aliases.
|
||||
$manager = $this->container->get('plugin.manager.alias_type');
|
||||
$pathauto_plugins = array('canonical_entities:node' => 'nodes', 'canonical_entities:taxonomy_term' => 'terms', 'canonical_entities:user' => 'accounts');
|
||||
foreach ($pathauto_plugins as $pathauto_plugin => $attribute) {
|
||||
$this->generateAliases();
|
||||
$edit = array(
|
||||
'delete[plugins][' . $pathauto_plugin . ']' => TRUE,
|
||||
'options[keep_custom_aliases]' => FALSE,
|
||||
);
|
||||
$this->drupalPostForm('admin/config/search/path/delete_bulk', $edit, t('Delete aliases now!'));
|
||||
$alias_type = $manager->createInstance($pathauto_plugin);
|
||||
$this->assertRaw(t('All of your %label path aliases have been deleted.', array('%label' => $alias_type->getLabel())));
|
||||
// Check that the aliases were actually deleted.
|
||||
foreach ($this->{$attribute} as $entity) {
|
||||
$this->assertNoEntityAlias($entity);
|
||||
}
|
||||
|
||||
// Check that the other aliases are not deleted.
|
||||
foreach ($pathauto_plugins as $_pathauto_plugin => $_attribute) {
|
||||
// Skip the aliases that should be deleted.
|
||||
if ($_pathauto_plugin == $pathauto_plugin) {
|
||||
continue;
|
||||
}
|
||||
foreach ($this->{$_attribute} as $entity) {
|
||||
$this->assertEntityAliasExists($entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Test deleting automatically generated aliases only.
|
||||
$this->generateAliases();
|
||||
$edit = array(
|
||||
'delete[all_aliases]' => TRUE,
|
||||
'options[keep_custom_aliases]' => TRUE,
|
||||
);
|
||||
$this->drupalPostForm('admin/config/search/path/delete_bulk', $edit, t('Delete aliases now!'));
|
||||
$this->assertText(t('All of your automatically generated path aliases have been deleted.'));
|
||||
$this->assertUrl('admin/config/search/path/delete_bulk');
|
||||
|
||||
// Make sure that only custom aliases and aliases with no information about
|
||||
// their state still exist.
|
||||
$aliases = \Drupal::database()->select('url_alias', 'ua')->fields('ua', ['source'])->execute()->fetchCol();
|
||||
$this->assertEqual($aliases, ['/node/101', '/node/104', '/node/105'], 'Custom aliases still exist.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to generate aliases.
|
||||
*/
|
||||
function generateAliases() {
|
||||
// Delete all aliases to avoid duplicated aliases. They will be recreated below.
|
||||
$this->deleteAllAliases();
|
||||
|
||||
// We generate a bunch of aliases for nodes, users and taxonomy terms. If
|
||||
// the entities are already created we just update them, otherwise we create
|
||||
// them.
|
||||
if (empty($this->nodes)) {
|
||||
// Create a large number of nodes (100+) to make sure that the batch code works.
|
||||
for ($i = 1; $i <= 105; $i++) {
|
||||
// Set the alias of two nodes manually.
|
||||
$settings = ($i > 103) ? ['path' => ['alias' => "/custom_alias_$i", 'pathauto' => PathautoState::SKIP]] : [];
|
||||
$node = $this->drupalCreateNode($settings);
|
||||
$this->nodes[$node->id()] = $node;
|
||||
}
|
||||
}
|
||||
else {
|
||||
foreach ($this->nodes as $node) {
|
||||
if ($node->id() > 103) {
|
||||
// The alias is set manually.
|
||||
$node->set('path', ['alias' => '/custom_alias_' . $node->id()]);
|
||||
}
|
||||
$node->save();
|
||||
}
|
||||
}
|
||||
// Delete information about the state of an alias to make sure that aliases
|
||||
// with no such data are left alone by default.
|
||||
\Drupal::keyValue('pathauto_state.node')->delete(101);
|
||||
|
||||
if (empty($this->accounts)) {
|
||||
for ($i = 1; $i <= 5; $i++) {
|
||||
$account = $this->drupalCreateUser();
|
||||
$this->accounts[$account->id()] = $account;
|
||||
}
|
||||
}
|
||||
else {
|
||||
foreach ($this->accounts as $id => $account) {
|
||||
$account->save();
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($this->terms)) {
|
||||
$vocabulary = $this->addVocabulary(array('name' => 'test vocabulary', 'vid' => 'test_vocabulary'));
|
||||
for ($i = 1; $i <= 5; $i++) {
|
||||
$term = $this->addTerm($vocabulary);
|
||||
$this->terms[$term->id()] = $term;
|
||||
}
|
||||
}
|
||||
else {
|
||||
foreach ($this->terms as $term) {
|
||||
$term->save();
|
||||
}
|
||||
}
|
||||
|
||||
// Check that we have aliases for the entities.
|
||||
foreach (array('nodes', 'accounts', 'terms') as $attribute) {
|
||||
foreach ($this->{$attribute} as $entity) {
|
||||
$this->assertEntityAliasExists($entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in a new issue