MigrateUrlAliasTest.php

Same filename in this branch
  1. 11.x core/modules/path/tests/src/Kernel/Migrate/d7/MigrateUrlAliasTest.php
Same filename and directory in other branches
  1. 9 core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php
  2. 9 core/modules/path/tests/src/Kernel/Migrate/d7/MigrateUrlAliasTest.php
  3. 8.9.x core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php
  4. 8.9.x core/modules/path/tests/src/Kernel/Migrate/d7/MigrateUrlAliasTest.php
  5. 10 core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php
  6. 10 core/modules/path/tests/src/Kernel/Migrate/d7/MigrateUrlAliasTest.php

Namespace

Drupal\Tests\path\Kernel\Migrate\d6

File

core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\path\Kernel\Migrate\d6;

use Drupal\path_alias\PathAliasInterface;
use Drupal\migrate\Plugin\MigrateIdMapInterface;
use Drupal\Core\Database\Database;
use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
use Drupal\Tests\Traits\Core\PathAliasTestTrait;

/**
 * URL alias migration.
 *
 * @group migrate_drupal_6
 */
class MigrateUrlAliasTest extends MigrateDrupal6TestBase {
    use PathAliasTestTrait;
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'language',
        'content_translation',
        'path',
        'path_alias',
        'menu_ui',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected function setUp() : void {
        parent::setUp();
        $this->installEntitySchema('node');
        $this->installEntitySchema('path_alias');
        $this->installConfig([
            'node',
        ]);
        $this->installSchema('node', [
            'node_access',
        ]);
        $this->migrateUsers(FALSE);
        $this->migrateFields();
        $this->executeMigrations([
            'language',
            'd6_node_settings',
        ]);
    }
    
    /**
     * Asserts that a path alias matches a set of conditions.
     *
     * @param int $pid
     *   The path alias ID.
     * @param array $conditions
     *   The path conditions.
     * @param \Drupal\path_alias\PathAliasInterface $path_alias
     *   The path alias.
     *
     * @internal
     */
    private function assertPath(int $pid, array $conditions, PathAliasInterface $path_alias) : void {
        $this->assertSame($pid, (int) $path_alias->id());
        $this->assertSame($conditions['alias'], $path_alias->getAlias());
        $this->assertSame($conditions['langcode'], $path_alias->get('langcode')->value);
        $this->assertSame($conditions['path'], $path_alias->getPath());
    }
    
    /**
     * Tests the URL alias migration.
     */
    public function testUrlAlias() : void {
        $this->executeMigrations([
            'd6_node',
            'd6_node_translation',
            'd6_url_alias',
        ]);
        $this->checkUrlMigration();
    }
    
    /**
     * Tests the URL alias migration using the node complete migration.
     */
    public function testNodeCompleteUrlAlias() : void {
        $this->executeMigrations([
            'd6_node_complete',
            'd6_url_alias',
        ]);
        $this->checkUrlMigration();
    }
    
    /**
     * Checks the migration results.
     */
    protected function checkUrlMigration() {
        $id_map = $this->getMigration('d6_url_alias')
            ->getIdMap();
        // Test that the field exists.
        $conditions = [
            'path' => '/node/1',
            'alias' => '/alias-one',
            'langcode' => 'af',
        ];
        $path_alias = $this->loadPathAliasByConditions($conditions);
        $this->assertPath(1, $conditions, $path_alias);
        $this->assertSame([
            [
                '1',
            ],
        ], $id_map->lookupDestinationIds([
            $path_alias->id(),
        ]), "Test IdMap");
        $conditions = [
            'path' => '/node/2',
            'alias' => '/alias-two',
            'langcode' => 'en',
        ];
        $path_alias = $this->loadPathAliasByConditions($conditions);
        $this->assertPath(2, $conditions, $path_alias);
        // Test that we can re-import using the UrlAlias destination.
        Database::getConnection('default', 'migrate')->update('url_alias')
            ->fields([
            'dst' => 'new-url-alias',
        ])
            ->condition('src', 'node/2')
            ->execute();
        \Drupal::database()->update($id_map->mapTableName())
            ->fields([
            'source_row_status' => MigrateIdMapInterface::STATUS_NEEDS_UPDATE,
        ])
            ->execute();
        $migration = $this->getMigration('d6_url_alias');
        $this->executeMigration($migration);
        $path_alias = $this->loadPathAliasByConditions([
            'id' => $path_alias->id(),
        ]);
        $conditions['alias'] = '/new-url-alias';
        $this->assertPath(2, $conditions, $path_alias);
        $conditions = [
            'path' => '/node/3',
            'alias' => '/alias-three',
            'langcode' => 'und',
        ];
        $path_alias = $this->loadPathAliasByConditions($conditions);
        $this->assertPath(3, $conditions, $path_alias);
        $path_alias = $this->loadPathAliasByConditions([
            'alias' => '/source-noslash',
        ]);
        $conditions = [
            'path' => '/admin',
            'alias' => '/source-noslash',
            'langcode' => 'und',
        ];
        $this->assertPath(8, $conditions, $path_alias);
        // Tests the URL alias migration with translated nodes.
        // Alias for the 'The Real McCoy' node in English.
        $path_alias = $this->loadPathAliasByConditions([
            'alias' => '/the-real-mccoy',
        ]);
        $this->assertSame('/node/10', $path_alias->getPath());
        $this->assertSame('en', $path_alias->get('langcode')->value);
        // Alias for the 'The Real McCoy' French translation,
        // which should now point to node/10 instead of node/11.
        $path_alias = $this->loadPathAliasByConditions([
            'alias' => '/le-vrai-mccoy',
        ]);
        $this->assertSame('/node/10', $path_alias->getPath());
        $this->assertSame('fr', $path_alias->get('langcode')->value);
        // Alias for the 'Abantu zulu' node in Zulu.
        $path_alias = $this->loadPathAliasByConditions([
            'alias' => '/abantu-zulu',
        ]);
        $this->assertSame('/node/12', $path_alias->getPath());
        $this->assertSame('zu', $path_alias->get('langcode')->value);
        // Alias for the 'Abantu zulu' English translation,
        // which should now point to node/12 instead of node/13.
        $path_alias = $this->loadPathAliasByConditions([
            'alias' => '/the-zulu-people',
        ]);
        $this->assertSame('/node/12', $path_alias->getPath());
        $this->assertSame('en', $path_alias->get('langcode')->value);
    }

}

Classes

Title Deprecated Summary
MigrateUrlAliasTest URL alias migration.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.