function MediaSourceTest::testSourceFieldCreation

Same name and namespace in other branches
  1. 9 core/modules/media/tests/src/Kernel/MediaSourceTest.php \Drupal\Tests\media\Kernel\MediaSourceTest::testSourceFieldCreation()
  2. 8.9.x core/modules/media/tests/src/Kernel/MediaSourceTest.php \Drupal\Tests\media\Kernel\MediaSourceTest::testSourceFieldCreation()
  3. 11.x 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 454

Class

MediaSourceTest
Tests media source plugins related logic.

Namespace

Drupal\Tests\media\Kernel

Code

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.