function MediaSourceTest::testSave

Same name and namespace in other branches
  1. 9 core/modules/media/tests/src/Kernel/MediaSourceTest.php \Drupal\Tests\media\Kernel\MediaSourceTest::testSave()
  2. 8.9.x core/modules/media/tests/src/Kernel/MediaSourceTest.php \Drupal\Tests\media\Kernel\MediaSourceTest::testSave()
  3. 11.x core/modules/media/tests/src/Kernel/MediaSourceTest.php \Drupal\Tests\media\Kernel\MediaSourceTest::testSave()

Tests that metadata is correctly mapped irrespective of how media is saved.

File

core/modules/media/tests/src/Kernel/MediaSourceTest.php, line 28

Class

MediaSourceTest
Tests media source plugins related logic.

Namespace

Drupal\Tests\media\Kernel

Code

public function testSave() : void {
  $field_storage = FieldStorageConfig::create([
    'entity_type' => 'media',
    'field_name' => 'field_to_map_to',
    'type' => 'string',
  ]);
  $field_storage->save();
  FieldConfig::create([
    'field_storage' => $field_storage,
    'bundle' => $this->testMediaType
      ->id(),
    'label' => 'Field to map to',
  ])
    ->save();
  // Set an arbitrary metadata value to be mapped.
  $this->container
    ->get('state')
    ->set('media_source_test_attributes', [
    'attribute_to_map' => [
      'title' => 'Attribute to map',
      'value' => 'Snowball',
    ],
    'thumbnail_uri' => [
      'value' => 'public://TheSisko.png',
    ],
  ]);
  $this->testMediaType
    ->setFieldMap([
    'attribute_to_map' => 'field_to_map_to',
  ])
    ->save();
  /** @var \Drupal\Core\Entity\EntityStorageInterface $storage */
  $storage = $this->container
    ->get('entity_type.manager')
    ->getStorage('media');
  /** @var \Drupal\media\MediaInterface $a */
  $a = $storage->create([
    'bundle' => $this->testMediaType
      ->id(),
  ]);
  /** @var \Drupal\media\MediaInterface $b */
  $b = $storage->create([
    'bundle' => $this->testMediaType
      ->id(),
  ]);
  // Set a random source value on both items.
  $a->set($a->getSource()
    ->getSourceFieldDefinition($a->bundle->entity)
    ->getName(), $this->randomString());
  $b->set($b->getSource()
    ->getSourceFieldDefinition($b->bundle->entity)
    ->getName(), $this->randomString());
  $a->save();
  $storage->save($b);
  // Assert that the default name was mapped into the name field for both
  // media items.
  $this->assertFalse($a->get('name')
    ->isEmpty());
  $this->assertFalse($b->get('name')
    ->isEmpty());
  // Assert that arbitrary metadata was mapped correctly.
  $this->assertFalse($a->get('field_to_map_to')
    ->isEmpty());
  $this->assertFalse($b->get('field_to_map_to')
    ->isEmpty());
  // Assert that the thumbnail was mapped correctly from the source.
  $this->assertSame('public://TheSisko.png', $a->thumbnail->entity
    ->getFileUri());
  $this->assertSame('public://TheSisko.png', $b->thumbnail->entity
    ->getFileUri());
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.