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\KernelCode
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);
}