You are here

public function MigrateEntityContentValidationTest::testEntityOwnerValidation in Drupal 10

Tests validation for entities that are instances of EntityOwnerInterface.

File

core/modules/migrate/tests/src/Kernel/MigrateEntityContentValidationTest.php, line 164

Class

MigrateEntityContentValidationTest
Tests validation of an entity during migration.

Namespace

Drupal\Tests\migrate\Kernel

Code

public function testEntityOwnerValidation() {

  // Text format access is impacted by user permissions.
  $filter_test_format = FilterFormat::load('filter_test');
  assert($filter_test_format instanceof FilterFormatInterface);

  // Create 2 users, an admin user who has permission to use this text format
  // and another who does not have said access.
  $role = Role::create([
    'id' => 'admin',
    'label' => 'admin',
    'is_admin' => TRUE,
  ]);
  assert($role instanceof RoleInterface);
  $role
    ->grantPermission($filter_test_format
    ->getPermissionName());
  $role
    ->save();
  $admin_user = User::create([
    'name' => 'foobar',
    'mail' => 'foobar@example.com',
  ]);
  $admin_user
    ->addRole($role
    ->id());
  $admin_user
    ->save();
  $normal_user = User::create([
    'name' => 'normal user',
    'mail' => 'normal@example.com',
  ]);
  $normal_user
    ->save();

  // Add a "body" field with the text format.
  $field_name = mb_strtolower($this
    ->randomMachineName());
  $field_storage = FieldStorageConfig::create([
    'field_name' => $field_name,
    'entity_type' => 'entity_test',
    'type' => 'text',
  ]);
  $field_storage
    ->save();
  FieldConfig::create([
    'field_storage' => $field_storage,
    'bundle' => 'entity_test',
  ])
    ->save();

  // Attempt to migrate entities. The first record is owned by an admin user.
  $definition = [
    'source' => [
      'plugin' => 'embedded_data',
      'data_rows' => [
        [
          'id' => 1,
          'uid' => $admin_user
            ->id(),
          'body' => [
            'value' => 'foo',
            'format' => 'filter_test',
          ],
        ],
        [
          'id' => 2,
          'uid' => $normal_user
            ->id(),
          'body' => [
            'value' => 'bar',
            'format' => 'filter_test',
          ],
        ],
      ],
      'ids' => [
        'id' => [
          'type' => 'integer',
        ],
      ],
    ],
    'process' => [
      'id' => 'id',
      'user_id' => 'uid',
      "{$field_name}/value" => 'body/value',
      "{$field_name}/format" => 'body/format',
    ],
    'destination' => [
      'plugin' => 'entity:entity_test',
      'validate' => TRUE,
    ],
  ];
  $this->container
    ->get('current_user')
    ->setAccount($normal_user);
  $this
    ->runImport($definition);

  // The second user import should fail validation because they do not have
  // access to use "filter_test" filter.
  $this
    ->assertSame(sprintf('2: [entity_test: 2]: user_id.0.target_id=This entity (<em class="placeholder">user</em>: <em class="placeholder">%s</em>) cannot be referenced.||%s.0.format=The value you selected is not a valid choice.', $normal_user
    ->id(), $field_name), $this->messages[0]);
  $this
    ->assertArrayNotHasKey(1, $this->messages);
}