entity_embed-8.x-1.x-dev/tests/src/Kernel/EntityEmbedFilterOverridesTest.php
tests/src/Kernel/EntityEmbedFilterOverridesTest.php
<?php
namespace Drupal\Tests\entity_embed\Kernel;
use Drupal\field\Entity\FieldConfig;
use Drupal\file\Entity\File;
use Drupal\media\Entity\Media;
use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
use Drupal\Tests\TestFileCreationTrait;
/**
* Tests that entity embeds can have per-embed overrides for e.g. `alt`.
*
* @coversDefaultClass \Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter
* @group entity_embed
*/
class EntityEmbedFilterOverridesTest extends EntityEmbedFilterTestBase {
use MediaTypeCreationTrait;
use TestFileCreationTrait;
/**
* The image file to use in tests.
*
* @var \Drupal\file\FileInterface
*/
protected $image;
/**
* {@inheritdoc}
*/
protected static $modules = [
'file',
'image',
'media',
];
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
$this->installSchema('file', ['file_usage']);
$this->installEntitySchema('file');
$this->installEntitySchema('media');
$this->installConfig('image');
$this->installConfig('media');
$this->installConfig('system');
$this->image = File::create([
'uri' => $this->getTestFiles('image')[0]->uri,
'uid' => 2,
]);
$this->image->setPermanent();
$this->image->save();
}
/**
* Tests overriding of `alt` and `title` for default image field formatter.
*/
public function testOverrideAltAndTitleForImage() {
$content = $this->createEmbedCode([
'data-entity-type' => 'file',
'data-entity-uuid' => $this->image->uuid(),
'data-entity-embed-display' => 'image:image',
'data-entity-embed-display-settings' => '{"image_style":"","image_link":""}',
'alt' => 'This is alt text',
'title' => 'This is title text',
]);
$this->applyFilter($content);
$this->assertHasAttributes($this->cssSelect('div.embedded-entity')[0], [
'alt' => 'This is alt text',
'data-entity-embed-display' => 'image:image',
'data-entity-type' => 'file',
'data-entity-uuid' => $this->image->uuid(),
'title' => 'This is title text',
'data-langcode' => 'en',
]);
$this->assertHasAttributes($this->cssSelect('div.embedded-entity img')[0], [
'alt' => 'This is alt text',
'title' => 'This is title text',
]);
}
/**
* Tests overriding of `alt` and `title` for image media items.
*/
public function testOverridesAltAndTitleForImageMedia() {
$this->createMediaType('image', ['id' => 'image']);
// The `alt` field property is enabled by default, the `title` one is not.
// Since we want to test it, enable it.
$source_field = FieldConfig::load('media.image.field_media_image');
$source_field->setSetting('title_field', TRUE);
$source_field->save();
$this->container->get('current_user')
->getAccount()
->addRole($this->drupalCreateRole(['view media']));
$media = Media::create([
'bundle' => 'image',
'name' => 'Screaming hairy armadillo',
'field_media_image' => [
[
'target_id' => $this->image->id(),
'alt' => 'default alt',
'title' => 'default title',
],
],
]);
$media->save();
$base = [
'data-entity-embed-display' => 'view_mode:media.full',
'data-entity-embed-display-settings' => '',
'data-entity-type' => 'media',
'data-entity-uuid' => $media->uuid(),
];
$input = $this->createEmbedCode($base);
$input .= $this->createEmbedCode([
'alt' => 'alt 1',
'title' => 'title 1',
] + $base);
$input .= $this->createEmbedCode([
'alt' => 'alt 2',
'title' => 'title 2',
] + $base);
$input .= $this->createEmbedCode([
'alt' => 'alt 3',
'title' => 'title 3',
] + $base);
$this->applyFilter($input);
$img_nodes = $this->cssSelect('img');
$this->assertCount(4, $img_nodes);
$this->assertHasAttributes($img_nodes[0], [
'alt' => 'default alt',
]);
$this->assertHasAttributes($img_nodes[1], [
'alt' => 'alt 1',
'title' => 'title 1',
]);
$this->assertHasAttributes($img_nodes[2], [
'alt' => 'alt 2',
'title' => 'title 2',
]);
$this->assertHasAttributes($img_nodes[3], [
'alt' => 'alt 3',
'title' => 'title 3',
]);
}
}
