Version 1
[yaffs-website] / web / core / modules / path / tests / src / Kernel / Migrate / d6 / MigrateUrlAliasTest.php
diff --git a/web/core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php b/web/core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php
new file mode 100644 (file)
index 0000000..092d5ac
--- /dev/null
@@ -0,0 +1,137 @@
+<?php
+
+namespace Drupal\Tests\path\Kernel\Migrate\d6;
+
+use Drupal\migrate\Plugin\MigrateIdMapInterface;
+use Drupal\Core\Database\Database;
+use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
+
+/**
+ * URL alias migration.
+ *
+ * @group migrate_drupal_6
+ */
+class MigrateUrlAliasTest extends MigrateDrupal6TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['language', 'content_translation', 'path', 'menu_ui'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('node');
+    $this->installConfig(['node']);
+    $this->installSchema('node', ['node_access']);
+    $this->migrateUsers(FALSE);
+    $this->migrateFields();
+
+    $this->executeMigrations([
+      'language',
+      'd6_node_settings',
+      'd6_node',
+      'd6_node_translation',
+      'd6_url_alias',
+    ]);
+  }
+
+  /**
+   * Assert a path.
+   *
+   * @param string $pid
+   *   The path id.
+   * @param array $conditions
+   *   The path conditions.
+   * @param array $path
+   *   The path.
+   */
+  private function assertPath($pid, $conditions, $path) {
+    $this->assertTrue($path, "Path alias for " . $conditions['source'] . " successfully loaded.");
+    $this->assertIdentical($conditions['alias'], $path['alias']);
+    $this->assertIdentical($conditions['langcode'], $path['langcode']);
+    $this->assertIdentical($conditions['source'], $path['source']);
+  }
+
+  /**
+   * Test the url alias migration.
+   */
+  public function testUrlAlias() {
+    $id_map = $this->getMigration('d6_url_alias')->getIdMap();
+    // Test that the field exists.
+    $conditions = [
+      'source' => '/node/1',
+      'alias' => '/alias-one',
+      'langcode' => 'af',
+    ];
+    $path = \Drupal::service('path.alias_storage')->load($conditions);
+    $this->assertPath('1', $conditions, $path);
+    $this->assertIdentical($id_map->lookupDestinationID([$path['pid']]), ['1'], "Test IdMap");
+
+    $conditions = [
+      'source' => '/node/2',
+      'alias' => '/alias-two',
+      'langcode' => 'en',
+    ];
+    $path = \Drupal::service('path.alias_storage')->load($conditions);
+    $this->assertPath('2', $conditions, $path);
+
+    // 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 = \Drupal::service('path.alias_storage')->load(['pid' => $path['pid']]);
+    $conditions['alias'] = '/new-url-alias';
+    $this->assertPath('2', $conditions, $path);
+
+    $conditions = [
+      'source' => '/node/3',
+      'alias' => '/alias-three',
+      'langcode' => 'und',
+    ];
+    $path = \Drupal::service('path.alias_storage')->load($conditions);
+    $this->assertPath('3', $conditions, $path);
+  }
+
+  /**
+   * Test the URL alias migration with translated nodes.
+   */
+  public function testUrlAliasWithTranslatedNodes() {
+    $alias_storage = $this->container->get('path.alias_storage');
+
+    // Alias for the 'The Real McCoy' node in English.
+    $path = $alias_storage->load(['alias' => '/the-real-mccoy']);
+    $this->assertSame('/node/10', $path['source']);
+    $this->assertSame('en', $path['langcode']);
+
+    // Alias for the 'The Real McCoy' French translation,
+    // which should now point to node/10 instead of node/11.
+    $path = $alias_storage->load(['alias' => '/le-vrai-mccoy']);
+    $this->assertSame('/node/10', $path['source']);
+    $this->assertSame('fr', $path['langcode']);
+
+    // Alias for the 'Abantu zulu' node in Zulu.
+    $path = $alias_storage->load(['alias' => '/abantu-zulu']);
+    $this->assertSame('/node/12', $path['source']);
+    $this->assertSame('zu', $path['langcode']);
+
+    // Alias for the 'Abantu zulu' English translation,
+    // which should now point to node/12 instead of node/13.
+    $path = $alias_storage->load(['alias' => '/the-zulu-people']);
+    $this->assertSame('/node/12', $path['source']);
+    $this->assertSame('en', $path['langcode']);
+  }
+
+}