function MediaEmbedFilterTest::testDependencies

Tests that the 'media_embed' filter handles dependency removal.

File

core/modules/media/tests/src/Kernel/MediaEmbedFilterTest.php, line 525

Class

MediaEmbedFilterTest
Tests Drupal\media\Plugin\Filter\MediaEmbed.

Namespace

Drupal\Tests\media\Kernel

Code

public function testDependencies() : void {
  $role_id = $this->drupalCreateRole([], NULL, 'Test role');
  $filter_format = FilterFormat::create([
    'format' => 'media_embed_dependencies_test',
    'name' => 'Media embed dependencies test',
    'roles' => [
      $role_id,
    ],
  ]);
  $filter_format->setFilterConfig('media_embed', [
    'settings' => [
      'allowed_view_modes' => [
        'foobar' => 'foobar',
      ],
      'default_view_mode' => 'foobar',
    ],
  ]);
  $filter_format->save();
  $this->assertSame('foobar', $filter_format->get('filters')['media_embed']['settings']['default_view_mode']);
  $this->assertSame([
    'foobar' => 'foobar',
  ], $filter_format->get('filters')['media_embed']['settings']['allowed_view_modes']);
  $this->assertTrue(in_array('core.entity_view_mode.media.foobar', $filter_format->getDependencies()['config']));
  $role = Role::load($role_id);
  $this->assertContains($filter_format->getPermissionName(), $role->getPermissions());
  // Confirm that after the 'media.foobar' view mode has been deleted, the
  // media embed filter handles the dependency removal correctly so that the
  // filter format is not deleted as well.
  $view_mode = EntityViewMode::load('media.foobar');
  $view_mode->delete();
  /** @var \Drupal\filter\FilterFormatInterface $filter_format */
  $filter_format = FilterFormat::load('media_embed_dependencies_test');
  $this->assertNotNull($filter_format);
  $this->assertArrayNotHasKey('config', $filter_format->getDependencies());
  $role = Role::load($role_id);
  $this->assertContains($filter_format->getPermissionName(), $role->getPermissions());
  // Since the foobar display mode has been removed, the media_embed filter
  // settings should be updated to use the default view mode only.
  $this->assertSame(EntityDisplayRepositoryInterface::DEFAULT_DISPLAY_MODE, $filter_format->get('filters')['media_embed']['settings']['default_view_mode']);
  $this->assertSame([
    EntityDisplayRepositoryInterface::DEFAULT_DISPLAY_MODE => EntityDisplayRepositoryInterface::DEFAULT_DISPLAY_MODE,
  ], $filter_format->get('filters')['media_embed']['settings']['allowed_view_modes']);
}

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