function MigrateUserTest::testUser

Same name in this branch
  1. 8.9.x core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php \Drupal\Tests\user\Kernel\Migrate\d7\MigrateUserTest::testUser()
Same name in other branches
  1. 9 core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserTest.php \Drupal\Tests\user\Kernel\Migrate\d6\MigrateUserTest::testUser()
  2. 9 core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php \Drupal\Tests\user\Kernel\Migrate\d7\MigrateUserTest::testUser()
  3. 10 core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserTest.php \Drupal\Tests\user\Kernel\Migrate\d6\MigrateUserTest::testUser()
  4. 10 core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php \Drupal\Tests\user\Kernel\Migrate\d7\MigrateUserTest::testUser()
  5. 11.x core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserTest.php \Drupal\Tests\user\Kernel\Migrate\d6\MigrateUserTest::testUser()
  6. 11.x core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php \Drupal\Tests\user\Kernel\Migrate\d7\MigrateUserTest::testUser()

Tests the Drupal6 user to Drupal 8 migration.

File

core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserTest.php, line 75

Class

MigrateUserTest
Users migration.

Namespace

Drupal\Tests\user\Kernel\Migrate\d6

Code

public function testUser() {
    $users = Database::getConnection('default', 'migrate')->select('users', 'u')
        ->fields('u')
        ->condition('uid', 0, '>')
        ->execute()
        ->fetchAll();
    foreach ($users as $source) {
        // Get roles directly from the source.
        $rids = Database::getConnection('default', 'migrate')->select('users_roles', 'ur')
            ->fields('ur', [
            'rid',
        ])
            ->condition('ur.uid', $source->uid)
            ->execute()
            ->fetchCol();
        $roles = [
            RoleInterface::AUTHENTICATED_ID,
        ];
        $id_map = $this->getMigration('d6_user_role')
            ->getIdMap();
        foreach ($rids as $rid) {
            $role = $id_map->lookupDestinationIds([
                $rid,
            ])[0];
            $roles[] = reset($role);
        }
        
        /** @var \Drupal\user\UserInterface $user */
        $user = User::load($source->uid);
        $this->assertSame($source->uid, $user->id());
        $this->assertSame($source->name, $user->label());
        $this->assertSame($source->mail, $user->getEmail());
        $this->assertSame($source->created, $user->getCreatedTime());
        $this->assertSame($source->access, $user->getLastAccessedTime());
        $this->assertSame($source->login, $user->getLastLoginTime());
        $is_blocked = $source->status == 0;
        $this->assertSame($is_blocked, $user->isBlocked());
        $expected_timezone_name = $source->timezone_name ?: $this->config('system.date')
            ->get('timezone.default');
        $this->assertSame($expected_timezone_name, $user->getTimeZone());
        $this->assertSame($source->init, $user->getInitialEmail());
        $this->assertSame($roles, $user->getRoles());
        // Ensure the user's langcode, preferred_langcode and
        // preferred_admin_langcode are valid.
        // $user->getPreferredLangcode() might fallback to default language if the
        // user preferred language is not configured on the site. We just want to
        // test if the value was imported correctly.
        $language_manager = $this->container
            ->get('language_manager');
        $default_langcode = $language_manager->getDefaultLanguage()
            ->getId();
        if (empty($source->language)) {
            $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($source->language) === 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($source->language, $user->langcode->value);
            $this->assertSame($source->language, $user->preferred_langcode->value);
            $this->assertSame($source->language, $user->preferred_admin_langcode->value);
        }
        // We have one empty picture in the data so don't try load that.
        if (!empty($source->picture)) {
            // Test the user picture.
            $file = File::load($user->user_picture->target_id);
            $this->assertSame(basename($source->picture), $file->getFilename());
        }
        else {
            // Ensure the user does not have a picture.
            $this->assertEmpty($user->user_picture->target_id, sprintf('User %s does not have a picture', $user->id()));
        }
        // Use the API to check if the password has been salted and re-hashed to
        // conform to Drupal >= 7 for non-admin users.
        if ($user->id() != 1) {
            $this->assertTrue(\Drupal::service('password')->check($source->pass_plain, $user->getPassword()));
        }
    }
    // Rollback the migration and make sure everything is deleted but uid 1.
    (new MigrateExecutable($this->migration, $this))
        ->rollback();
    $users = Database::getConnection('default', 'migrate')->select('users', 'u')
        ->fields('u', [
        'uid',
    ])
        ->condition('uid', 0, '>')
        ->execute()
        ->fetchCol();
    foreach ($users as $uid) {
        $account = User::load($uid);
        if ($uid == 1) {
            $this->assertNotNull($account, 'User 1 was preserved after rollback');
        }
        else {
            $this->assertNull($account);
        }
    }
}

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