function MediaSourceTest::testSourceFieldCreation
Same name in other branches
- 9 core/modules/media/tests/src/Kernel/MediaSourceTest.php \Drupal\Tests\media\Kernel\MediaSourceTest::testSourceFieldCreation()
- 8.9.x core/modules/media/tests/src/Kernel/MediaSourceTest.php \Drupal\Tests\media\Kernel\MediaSourceTest::testSourceFieldCreation()
- 10 core/modules/media/tests/src/Kernel/MediaSourceTest.php \Drupal\Tests\media\Kernel\MediaSourceTest::testSourceFieldCreation()
Tests logic related to the automated source field creation.
File
-
core/
modules/ media/ tests/ src/ Kernel/ MediaSourceTest.php, line 456
Class
- MediaSourceTest
- Tests media source plugins related logic.
Namespace
Drupal\Tests\media\KernelCode
public function testSourceFieldCreation() : void {
/** @var \Drupal\media\MediaTypeInterface $type */
$type = MediaType::create([
'id' => 'test_type',
'label' => 'Test type',
'source' => 'test',
]);
/** @var \Drupal\field\Entity\FieldConfig $field */
$field = $type->getSource()
->createSourceField($type);
/** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */
$field_storage = $field->getFieldStorageDefinition();
// Test field storage.
$this->assertTrue($field_storage->isNew(), 'Field storage is saved automatically.');
$this->assertFalse($field_storage->isLocked(), 'Field storage is not locked.');
$this->assertSame('string', $field_storage->getType(), 'Field is not of correct type.');
$this->assertSame('field_media_test_1', $field_storage->getName(), 'Incorrect field name is used.');
$this->assertSame('media', $field_storage->getTargetEntityTypeId(), 'Field is not targeting media entities.');
// Test field.
$this->assertTrue($field->isNew(), 'Field is saved automatically.');
$this->assertSame('field_media_test_1', $field->getName(), 'Incorrect field name is used.');
$this->assertSame('string', $field->getType(), 'Field is of incorrect type.');
$this->assertTrue($field->isRequired(), 'Field is not required.');
$this->assertEquals('Test source', $field->label(), 'Incorrect label is used.');
$this->assertSame('test_type', $field->getTargetBundle(), 'Field is not targeting correct bundle.');
// Fields should be automatically saved only when creating the media type
// using the media type creation form. Make sure that they are not saved
// when creating a media type programmatically.
// Drupal\Tests\media\FunctionalJavascript\MediaTypeCreationTest is testing
// form part of the functionality.
$type->save();
$storage = FieldStorageConfig::load('media.field_media_test_1');
$this->assertNull($storage, 'Field storage was not saved.');
$field = FieldConfig::load('media.test_type.field_media_test_1');
$this->assertNull($field, 'Field storage was not saved.');
// Test the plugin with a different default source field type.
$type = MediaType::create([
'id' => 'test_constraints_type',
'label' => 'Test type with constraints',
'source' => 'test_constraints',
]);
$field = $type->getSource()
->createSourceField($type);
$field_storage = $field->getFieldStorageDefinition();
// Test field storage.
$this->assertTrue($field_storage->isNew(), 'Field storage is saved automatically.');
$this->assertFalse($field_storage->isLocked(), 'Field storage is not locked.');
$this->assertSame('string_long', $field_storage->getType(), 'Field is of incorrect type.');
$this->assertSame('field_media_test_constraints_1', $field_storage->getName(), 'Incorrect field name is used.');
$this->assertSame('media', $field_storage->getTargetEntityTypeId(), 'Field is not targeting media entities.');
// Test field.
$this->assertTrue($field->isNew(), 'Field is saved automatically.');
$this->assertSame('field_media_test_constraints_1', $field->getName(), 'Incorrect field name is used.');
$this->assertSame('string_long', $field->getType(), 'Field is of incorrect type.');
$this->assertTrue($field->isRequired(), 'Field is not required.');
$this->assertEquals('Test source with constraints', $field->label(), 'Incorrect label is used.');
$this->assertSame('test_constraints_type', $field->getTargetBundle(), 'Field is not targeting correct bundle.');
// Test that new source fields respect the configured field prefix, no
// prefix at all if that's what's configured.
$this->installConfig('field_ui');
$this->config('field_ui.settings')
->set('field_prefix', 'prefix_')
->save();
$type = MediaType::create([
'id' => $this->randomMachineName(),
'label' => $this->randomString(),
'source' => 'test',
]);
$this->assertSame('prefix_media_test', $type->getSource()
->createSourceField($type)
->getName());
$this->config('field_ui.settings')
->set('field_prefix', '')
->save();
$this->assertSame('media_test', $type->getSource()
->createSourceField($type)
->getName());
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.