Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / user / tests / src / Kernel / Migrate / d7 / MigrateUserTest.php
index bbfc41d77d5f2e3b66c09aac2af263a3be4fb95b..7564fceeca0de9ef6e370ca3e5b8649a5568c066 100644 (file)
@@ -24,11 +24,14 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
    */
   public static $modules = [
     'comment',
+    'content_translation',
     'datetime',
     'file',
     'image',
     'language',
     'link',
+    // Required for translation migrations.
+    'migrate_drupal_multilingual',
     'node',
     'system',
     'taxonomy',
@@ -44,6 +47,9 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
 
     // Prepare to migrate user pictures as well.
     $this->installEntitySchema('file');
+    $this->installEntitySchema('comment');
+    $this->installEntitySchema('node');
+    $this->installEntitySchema('taxonomy_term');
     $this->createNodeCommentCombination('page');
     $this->createNodeCommentCombination('article');
     $this->createNodeCommentCombination('blog');
@@ -59,6 +65,8 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
       'd7_field',
       'd7_field_instance',
       'd7_user',
+      'd7_entity_translation_settings',
+      'd7_user_entity_translation',
     ]);
   }
 
@@ -81,8 +89,10 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
    *   The last login time.
    * @param bool $blocked
    *   Whether or not the account is blocked.
-   * @param string $langcode
-   *   The user account's language code.
+   * @param string $entity_langcode
+   *   The user entity language code.
+   * @param string $prefered_langcode
+   *   The user prefered language code.
    * @param string $timezone
    *   The user account's timezone name.
    * @param string $init
@@ -96,7 +106,7 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
    * @param bool $has_picture
    *   (optional) Whether the user is expected to have a picture attached.
    */
-  protected function assertEntity($id, $label, $mail, $password, $created, $access, $login, $blocked, $langcode, $timezone, $init, $roles, $field_integer, $field_file_target_id = FALSE, $has_picture = FALSE) {
+  protected function assertEntity($id, $label, $mail, $password, $created, $access, $login, $blocked, $entity_langcode, $prefered_langcode, $timezone, $init, $roles, $field_integer, $field_file_target_id = FALSE, $has_picture = FALSE) {
     /** @var \Drupal\user\UserInterface $user */
     $user = User::load($id);
     $this->assertTrue($user instanceof UserInterface);
@@ -115,20 +125,20 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
     // test if the value was imported correctly.
     $language_manager = $this->container->get('language_manager');
     $default_langcode = $language_manager->getDefaultLanguage()->getId();
-    if ($langcode == '') {
+    if ($prefered_langcode == '') {
       $this->assertSame('en', $user->langcode->value);
       $this->assertSame($default_langcode, $user->preferred_langcode->value);
       $this->assertSame($default_langcode, $user->preferred_admin_langcode->value);
     }
-    elseif ($language_manager->getLanguage($langcode) === NULL) {
+    elseif ($language_manager->getLanguage($prefered_langcode) === NULL) {
       $this->assertSame($default_langcode, $user->langcode->value);
       $this->assertSame($default_langcode, $user->preferred_langcode->value);
       $this->assertSame($default_langcode, $user->preferred_admin_langcode->value);
     }
     else {
-      $this->assertSame($langcode, $user->langcode->value);
-      $this->assertSame($langcode, $user->preferred_langcode->value);
-      $this->assertSame($langcode, $user->preferred_admin_langcode->value);
+      $this->assertSame($entity_langcode, $user->langcode->value);
+      $this->assertSame($prefered_langcode, $user->preferred_langcode->value);
+      $this->assertSame($prefered_langcode, $user->preferred_admin_langcode->value);
     }
 
     $this->assertSame($timezone, $user->getTimeZone());
@@ -170,10 +180,21 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
         $roles[] = reset($role);
       }
 
+      $entity_translation = Database::getConnection('default', 'migrate')
+        ->select('entity_translation', 'et')
+        ->fields('et', ['language'])
+        ->condition('et.entity_type', 'user')
+        ->condition('et.entity_id', $source->uid)
+        ->condition('et.source', '')
+        ->execute()
+        ->fetchField();
+      $entity_language = $entity_translation ?: $source->language;
+
       $field_integer = Database::getConnection('default', 'migrate')
         ->select('field_data_field_integer', 'fi')
         ->fields('fi', ['field_integer_value'])
         ->condition('fi.entity_id', $source->uid)
+        ->condition('fi.language', $entity_language)
         ->execute()
         ->fetchCol();
       $field_integer = !empty($field_integer) ? $field_integer : NULL;
@@ -194,6 +215,7 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
         $source->access,
         $source->login,
         $source->status,
+        $entity_language,
         $source->language,
         $source->timezone,
         $source->init,
@@ -218,4 +240,45 @@ class MigrateUserTest extends MigrateDrupal7TestBase {
     }
   }
 
+  /**
+   * Tests the Drupal 7 user entity translations to Drupal 8 migration.
+   */
+  public function testUserEntityTranslations() {
+    $manager = $this->container->get('content_translation.manager');
+
+    // Get the user and its translations.
+    $user = User::load(2);
+    $user_fr = $user->getTranslation('fr');
+    $user_is = $user->getTranslation('is');
+
+    // Test that fields translated with Entity Translation are migrated.
+    $this->assertSame('99', $user->field_integer->value);
+    $this->assertSame('9', $user_fr->field_integer->value);
+    $this->assertSame('1', $user_is->field_integer->value);
+
+    // Test that the French translation metadata is correctly migrated.
+    $metadata_fr = $manager->getTranslationMetadata($user_fr);
+    $this->assertSame('en', $metadata_fr->getSource());
+    $this->assertSame('1', $metadata_fr->getAuthor()->uid->value);
+    $this->assertSame('1531663916', $metadata_fr->getCreatedTime());
+    $this->assertFalse($metadata_fr->isOutdated());
+    $this->assertFalse($metadata_fr->isPublished());
+
+    // Test that the Icelandic translation metadata is correctly migrated.
+    $metadata_is = $manager->getTranslationMetadata($user_is);
+    $this->assertSame('en', $metadata_is->getSource());
+    $this->assertSame('2', $metadata_is->getAuthor()->uid->value);
+    $this->assertSame('1531663925', $metadata_is->getCreatedTime());
+    $this->assertTrue($metadata_is->isOutdated());
+    $this->assertTrue($metadata_is->isPublished());
+
+    // Test that untranslatable properties are the same as the source language.
+    $this->assertSame($user->label(), $user_fr->label());
+    $this->assertSame($user->label(), $user_is->label());
+    $this->assertSame($user->getEmail(), $user_fr->getEmail());
+    $this->assertSame($user->getEmail(), $user_is->getEmail());
+    $this->assertSame($user->getPassword(), $user_fr->getPassword());
+    $this->assertSame($user->getPassword(), $user_is->getPassword());
+  }
+
 }