You are here

public function MediaSourceTest::testSourceFieldCreation in Drupal 9

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

Class

MediaSourceTest
Tests media source plugins related logic.

Namespace

Drupal\Tests\media\Kernel

Code

public function testSourceFieldCreation() {

  /** @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.');
}