View source
<?php
namespace Drupal\Tests\media_migration\Traits;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\ImageToolkit\ImageToolkitInterface;
use Drupal\Core\ImageToolkit\ImageToolkitManager;
use Drupal\field\FieldConfigInterface;
use Drupal\file\FileInterface;
use Drupal\media\MediaInterface;
use Drupal\media_migration\MediaMigration;
use Drupal\node\NodeInterface;
use Masterminds\HTML5;
use Masterminds\HTML5\Parser\StringInputStream;
trait MediaMigrationAssertionsForNonMediaSourceTrait {
use MediaMigrationAssertionsBaseTrait;
protected function assertNonMediaToMedia1FieldValues($name = 'blue.png') {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(1);
assert($media instanceof MediaInterface);
$this
->assertEquals([
'mid' => [
[
'value' => '1',
],
],
'bundle' => [
[
'target_id' => 'image',
],
],
'name' => [
[
'value' => $name,
],
],
'uid' => [
[
'target_id' => '2',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1594368799',
],
],
'field_media_image' => [
[
'target_id' => '1',
'alt' => 'Alt for blue.png',
'title' => NULL,
'width' => '1280',
'height' => '720',
],
],
], $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_image', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMedia2FieldValues() {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(2);
assert($media instanceof MediaInterface);
$this
->assertEquals([
'mid' => [
[
'value' => '2',
],
],
'bundle' => [
[
'target_id' => 'image',
],
],
'name' => [
[
'value' => 'green.jpg',
],
],
'uid' => [
[
'target_id' => '2',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1594368799',
],
],
'field_media_image' => [
[
'target_id' => '2',
'alt' => 'Alt for green.jpg',
'title' => NULL,
'width' => '720',
'height' => '960',
],
],
], $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_image', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMedia3FieldValues() {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(3);
assert($media instanceof MediaInterface);
$this
->assertEquals([
'mid' => [
[
'value' => '3',
],
],
'bundle' => [
[
'target_id' => 'image',
],
],
'name' => [
[
'value' => 'red.jpeg',
],
],
'uid' => [
[
'target_id' => '2',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1594368881',
],
],
'field_media_image' => [
[
'target_id' => '3',
'alt' => 'Alt for red.jpeg',
'title' => NULL,
'width' => '1280',
'height' => '720',
],
],
], $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_image', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMedia6FieldValues() {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(6);
assert($media instanceof MediaInterface);
$this
->assertEquals([
'mid' => [
[
'value' => '6',
],
],
'bundle' => [
[
'target_id' => 'document',
],
],
'name' => [
[
'value' => 'LICENSE.txt',
],
],
'uid' => [
[
'target_id' => '2',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1594368799',
],
],
'field_media_document' => [
[
'target_id' => '6',
'display' => '1',
'description' => NULL,
],
],
], $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_document', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMedia7FieldValues() {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(7);
assert($media instanceof MediaInterface);
$this
->assertEquals([
'mid' => [
[
'value' => '7',
],
],
'bundle' => [
[
'target_id' => 'image',
],
],
'name' => [
[
'value' => 'yellow.jpg',
],
],
'uid' => [
[
'target_id' => '2',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1594368799',
],
],
'field_media_image' => [
[
'target_id' => '7',
'alt' => 'Alt for yellow.jpg',
'title' => NULL,
'width' => '640',
'height' => '400',
],
],
], $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_image', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMedia8FieldValues() {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(8);
assert($media instanceof MediaInterface);
$this
->assertEquals([
'mid' => [
[
'value' => '8',
],
],
'bundle' => [
[
'target_id' => 'video',
],
],
'name' => [
[
'value' => 'video.webm',
],
],
'uid' => [
[
'target_id' => '1',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1597409263',
],
],
'field_media_video_file' => [
[
'target_id' => '8',
'display' => '1',
'description' => NULL,
],
],
], $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_video_file', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMedia9FieldValues() {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(9);
assert($media instanceof MediaInterface);
$this
->assertEquals([
'mid' => [
[
'value' => '9',
],
],
'bundle' => [
[
'target_id' => 'video',
],
],
'name' => [
[
'value' => 'video.mp4',
],
],
'uid' => [
[
'target_id' => '1',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1597409263',
],
],
'field_media_video_file' => [
[
'target_id' => '9',
'display' => '1',
'description' => 'Tiny video about kittens',
],
],
], $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_video_file', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMedia10FieldValues() {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(10);
assert($media instanceof MediaInterface);
$expected_entity_properties = [
'mid' => [
[
'value' => '10',
],
],
'bundle' => [
[
'target_id' => 'image',
],
],
'name' => [
[
'value' => 'yellow.webp',
],
],
'uid' => [
[
'target_id' => '2',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1594368881',
],
],
'field_media_image' => [
[
'target_id' => '10',
'alt' => 'Description of yellow.webp',
'title' => NULL,
'width' => NULL,
'height' => NULL,
],
],
];
$toolkit_manager = $this->container
->get('image.toolkit.manager');
assert($toolkit_manager instanceof ImageToolkitManager);
$toolkit = $toolkit_manager
->getDefaultToolkit();
if ($toolkit instanceof ImageToolkitInterface && in_array('webp', $toolkit::getSupportedExtensions())) {
$expected_entity_properties['field_media_image'][0]['width'] = 640;
$expected_entity_properties['field_media_image'][0]['height'] = 400;
}
$this
->assertEquals($expected_entity_properties, $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_image', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMedia11FieldValues() {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(11);
assert($media instanceof MediaInterface);
$this
->assertEquals([
'mid' => [
[
'value' => '11',
],
],
'bundle' => [
[
'target_id' => 'audio',
],
],
'name' => [
[
'value' => 'audio.m4a',
],
],
'uid' => [
[
'target_id' => '1',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1597409263',
],
],
'field_media_audio_file' => [
[
'target_id' => '11',
'display' => '1',
'description' => NULL,
],
],
], $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_audio_file', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMedia12FieldValues() {
$media = $this->container
->get('entity_type.manager')
->getStorage('media')
->load(12);
assert($media instanceof MediaInterface);
$this
->assertEquals([
'mid' => [
[
'value' => '12',
],
],
'bundle' => [
[
'target_id' => 'document',
],
],
'name' => [
[
'value' => 'document.odt',
],
],
'uid' => [
[
'target_id' => '2',
],
],
'status' => [
[
'value' => '1',
],
],
'created' => [
[
'value' => '1594368799',
],
],
'field_media_document' => [
[
'target_id' => '12',
'display' => '1',
'description' => NULL,
],
],
], $this
->getImportantEntityProperties($media));
$media_field = $this
->getReferencedEntities($media, 'field_media_document', 1);
assert($media_field[0] instanceof FileInterface);
$this
->assertTrue(file_exists($media_field[0]
->getFileUri()));
}
protected function assertNonMediaToMediaNode1FieldValues() {
$node = $this->container
->get('entity_type.manager')
->getStorage('node')
->load(1);
assert($node instanceof NodeInterface);
$props = $this
->getImportantEntityProperties($node);
$node_body_text = $props['body'][0]['value'];
$html5 = new HTML5([
'disable_html_ns' => TRUE,
]);
$dom_text = '<html><body>' . $node_body_text . '</body></html>';
try {
$node_body_html = $html5
->parse($dom_text);
} catch (\TypeError $e) {
$text_stream = new StringInputStream($dom_text);
$node_body_html = $html5
->parse($text_stream);
}
foreach ($node_body_html
->getElementsByTagName('a') as $anchor_node) {
assert($anchor_node instanceof \DOMNode);
if ($anchor_node
->hasAttribute('data-entity-uuid')) {
$anchor_node
->setAttribute('data-entity-uuid', 'uuid');
}
}
$props['body'][0]['value'] = $html5
->saveHTML($node_body_html->documentElement->firstChild->childNodes);
$this
->assertEquals([
'nid' => [
[
'value' => 1,
],
],
'type' => [
[
'target_id' => 'article',
],
],
'status' => [
[
'value' => 1,
],
],
'uid' => [
[
'target_id' => 2,
],
],
'title' => [
[
'value' => 'Article with images and files',
],
],
'created' => [
[
'value' => 1594368799,
],
],
'changed' => [
[
'value' => 1594368881,
],
],
'promote' => [
[
'value' => 1,
],
],
'sticky' => [
[
'value' => 0,
],
],
'body' => [
[
'value' => '<p>Nulla tempor, nunc eu mollis finibus, risus nunc <a href="/file/7" data-entity-substitution="media" data-entity-type="media" data-entity-uuid="uuid">venenatis nulla</a>, in ullamcorper nisl nulla et nisi. Cras vel urna risus. Cras in sem a nulla aliquet pretium.</p><p>Quisque tortor libero, vulputate sit amet augue dictum, posuere bibendum lectus. Nunc fermentum justo odio, ut fermentum purus fermentum a. Aenean congue fringilla arcu sit amet pellentesque.</p>',
'summary' => '',
'format' => 'filtered_html',
],
],
'field_file' => [
[
'target_id' => '6',
],
],
'field_file_multi' => [
[
'target_id' => '12',
],
[
'target_id' => '10',
],
],
'field_image' => [
[
'target_id' => '1',
],
],
'field_image_multi' => [
[
'target_id' => '2',
],
[
'target_id' => '7',
],
[
'target_id' => '3',
],
],
], $props);
$media_fields = [
'field_file' => 1,
'field_file_multi' => 2,
'field_image' => 1,
'field_image_multi' => 3,
];
foreach ($media_fields as $field_name => $expected_count) {
$referred_entities = $this
->getReferencedEntities($node, $field_name, $expected_count);
assert($referred_entities[0] instanceof MediaInterface);
}
}
protected function assertNonMediaToMediaNode2FieldValues() {
$node = $this->container
->get('entity_type.manager')
->getStorage('node')
->load(2);
assert($node instanceof NodeInterface);
$props = $this
->getImportantEntityProperties($node);
$node_body_text = $props['body'][0]['value'];
$html5 = new HTML5([
'disable_html_ns' => TRUE,
]);
$dom_text = '<html><body>' . $node_body_text . '</body></html>';
try {
$node_body_html = $html5
->parse($dom_text);
} catch (\TypeError $e) {
$text_stream = new StringInputStream($dom_text);
$node_body_html = $html5
->parse($text_stream);
}
foreach ($node_body_html
->getElementsByTagName('a') as $anchor_node) {
assert($anchor_node instanceof \DOMNode);
if ($anchor_node
->hasAttribute('data-entity-uuid')) {
$anchor_node
->setAttribute('data-entity-uuid', 'uuid');
}
}
$props['body'][0]['value'] = $html5
->saveHTML($node_body_html->documentElement->firstChild->childNodes);
$this
->assertEquals([
'nid' => [
[
'value' => 2,
],
],
'type' => [
[
'target_id' => 'article',
],
],
'status' => [
[
'value' => 1,
],
],
'uid' => [
[
'target_id' => 1,
],
],
'title' => [
[
'value' => 'Another article with audio and video files',
],
],
'created' => [
[
'value' => 1597409263,
],
],
'changed' => [
[
'value' => 1597409263,
],
],
'promote' => [
[
'value' => 1,
],
],
'sticky' => [
[
'value' => 0,
],
],
'body' => [
[
'value' => '<p>Aliquam <a href="/file/1" data-entity-substitution="media" data-entity-type="media" data-entity-uuid="uuid">efficitur fermentum</a> nisi ut sagittis. Nullam pharetra nisi venenatis sodales tincidunt. Mauris sit amet metus arcu.</p>',
'summary' => '',
'format' => 'filtered_html',
],
],
'field_file' => [
[
'target_id' => '9',
],
],
'field_file_multi' => [
[
'target_id' => '8',
],
[
'target_id' => '11',
],
],
'field_image' => [],
'field_image_multi' => [],
], $props);
$media_fields = [
'field_file' => 1,
'field_file_multi' => 2,
'field_image' => 0,
'field_image_multi' => 0,
];
foreach ($media_fields as $field_name => $expected_count) {
$referred_entities = $this
->getReferencedEntities($node, $field_name, $expected_count);
if ($expected_count) {
assert($referred_entities[0] instanceof MediaInterface);
}
}
}
protected function assertNonMediaToMediaImageMediaBundleSourceFieldProperties() {
$field_config = $this->container
->get('entity_type.manager')
->getStorage('field_config')
->load('media.image.field_media_image');
assert($field_config instanceof FieldConfigInterface);
$this
->assertEquals([
'id' => 'media.image.field_media_image',
'status' => TRUE,
'field_name' => 'field_media_image',
'entity_type' => 'media',
'bundle' => 'image',
'label' => 'Image',
'description' => '',
'required' => TRUE,
'translatable' => TRUE,
'default_value' => [],
'default_value_callback' => '',
'settings' => [
'alt_field' => TRUE,
'alt_field_required' => TRUE,
'title_field' => FALSE,
'title_field_required' => FALSE,
'max_resolution' => '',
'min_resolution' => '',
'default_image' => [
'uuid' => NULL,
'alt' => '',
'title' => '',
'width' => NULL,
'height' => NULL,
],
'file_directory' => '[date:custom:Y]-[date:custom:m]',
'file_extensions' => 'png gif jpg jpeg webp',
'max_filesize' => '',
'handler' => 'default:file',
'handler_settings' => [],
],
'field_type' => 'image',
], $this
->getImportantEntityProperties($field_config));
}
protected function assertNonMediaToMediaDocumentMediaBundleSourceFieldProperties() {
$field_config = $this->container
->get('entity_type.manager')
->getStorage('field_config')
->load('media.document.field_media_document');
assert($field_config instanceof FieldConfigInterface);
$this
->assertEquals([
'id' => 'media.document.field_media_document',
'status' => TRUE,
'field_name' => 'field_media_document',
'entity_type' => 'media',
'bundle' => 'document',
'label' => 'Document',
'description' => '',
'required' => TRUE,
'translatable' => TRUE,
'default_value' => [],
'default_value_callback' => '',
'settings' => [
'description_field' => TRUE,
'file_directory' => '[date:custom:Y]-[date:custom:m]',
'file_extensions' => 'txt doc docx pdf odt',
'max_filesize' => '',
'handler' => 'default:file',
'handler_settings' => [],
],
'field_type' => 'file',
], $this
->getImportantEntityProperties($field_config));
}
protected function assertNonMediaToMediaAudioMediaBundleSourceFieldProperties() {
$field_config = $this->container
->get('entity_type.manager')
->getStorage('field_config')
->load('media.audio.field_media_audio_file');
assert($field_config instanceof FieldConfigInterface);
$this
->assertEquals([
'id' => 'media.audio.field_media_audio_file',
'status' => TRUE,
'field_name' => 'field_media_audio_file',
'entity_type' => 'media',
'bundle' => 'audio',
'label' => 'Audio file',
'description' => '',
'required' => TRUE,
'translatable' => TRUE,
'default_value' => [],
'default_value_callback' => '',
'settings' => [
'description_field' => TRUE,
'file_directory' => '[date:custom:Y]-[date:custom:m]',
'file_extensions' => 'mp3 wav aac m4a',
'max_filesize' => '',
'handler' => 'default:file',
'handler_settings' => [],
],
'field_type' => 'file',
], $this
->getImportantEntityProperties($field_config));
}
protected function assertNonMediaToMediaVideoMediaBundleSourceFieldProperties() {
$field_config = $this->container
->get('entity_type.manager')
->getStorage('field_config')
->load('media.video.field_media_video_file');
assert($field_config instanceof FieldConfigInterface);
$this
->assertEquals([
'id' => 'media.video.field_media_video_file',
'status' => TRUE,
'field_name' => 'field_media_video_file',
'entity_type' => 'media',
'bundle' => 'video',
'label' => 'Video file',
'description' => '',
'required' => TRUE,
'translatable' => TRUE,
'default_value' => [],
'default_value_callback' => '',
'settings' => [
'description_field' => TRUE,
'file_directory' => '[date:custom:Y]-[date:custom:m]',
'file_extensions' => 'mp4 webm',
'max_filesize' => '',
'handler' => 'default:file',
'handler_settings' => [],
],
'field_type' => 'file',
], $this
->getImportantEntityProperties($field_config));
}
protected function assertFilterFormats() {
$entity_type_manager = $this->container
->get('entity_type.manager');
assert($entity_type_manager instanceof EntityTypeManagerInterface);
$filter_formats = $entity_type_manager
->getStorage('filter_format')
->loadMultiple();
$allowed_html = MediaMigration::getEmbedTokenDestinationFilterPlugin() === MediaMigration::MEDIA_TOKEN_DESTINATION_FILTER_ENTITY_EMBED ? '<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <drupal-entity data-*>' : '<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <drupal-media data-* alt title>';
$this
->assertEquals([
'status' => TRUE,
'name' => 'Filtered HTML',
'format' => 'filtered_html',
'weight' => 0,
'filters' => [
'filter_autop' => [
'id' => 'filter_autop',
'provider' => 'filter',
'status' => TRUE,
'weight' => 2,
'settings' => [],
],
'filter_html' => [
'id' => 'filter_html',
'provider' => 'filter',
'status' => TRUE,
'weight' => 1,
'settings' => [
'allowed_html' => $allowed_html,
'filter_html_help' => TRUE,
'filter_html_nofollow' => FALSE,
],
],
'filter_htmlcorrector' => [
'id' => 'filter_htmlcorrector',
'provider' => 'filter',
'status' => TRUE,
'weight' => 10,
'settings' => [],
],
'filter_url' => [
'id' => 'filter_url',
'provider' => 'filter',
'status' => TRUE,
'weight' => 0,
'settings' => [
'filter_url_length' => 72,
],
],
'linkit' => [
'id' => 'linkit',
'provider' => 'linkit',
'status' => TRUE,
'weight' => 0,
'settings' => [
'title' => TRUE,
],
],
],
], $this
->getImportantEntityProperties($filter_formats['filtered_html']));
}
}