X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fcore%2Fmodules%2Fuser%2Ftests%2Fsrc%2FKernel%2FMigrate%2Fd7%2FMigrateUserTest.php;fp=web%2Fcore%2Fmodules%2Fuser%2Ftests%2Fsrc%2FKernel%2FMigrate%2Fd7%2FMigrateUserTest.php;h=7564fceeca0de9ef6e370ca3e5b8649a5568c066;hb=0bf8d09d2542548982e81a441b1f16e75873a04f;hp=bbfc41d77d5f2e3b66c09aac2af263a3be4fb95b;hpb=74df008bdbb3a11eeea356744f39b802369bda3c;p=yaffs-website diff --git a/web/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php b/web/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php index bbfc41d77..7564fceec 100644 --- a/web/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php +++ b/web/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php @@ -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()); + } + }