acquia_dam-1.0.0-rc1/tests/src/Kernel/EmbedCodeFormatterTest.php

tests/src/Kernel/EmbedCodeFormatterTest.php
<?php

namespace Drupal\Tests\acquia_dam\Kernel;

use Drupal\acquia_dam\EmbedCodeFactory;
use Drupal\media\Entity\Media;
use Drupal\media\Entity\MediaType;
use Drupal\media\MediaInterface;

/**
 * Tests embed code field formatter.
 *
 * @group acquia_dam
 */
class EmbedCodeFormatterTest extends AcquiaDamKernelTestBase {

  /**
   * Test media type.
   *
   * @var \Drupal\media\Entity\MediaType
   */
  protected MediaType $testMediaType;

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'image',
    'file',
    'media',
    'media_library',
    'acquia_dam',
    'acquia_dam_test',
    'views',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    // Create a test media type.
    $this->testMediaType = $this->createPdfMediaType();
  }

  /**
   * Tests image embed code.
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  public function testImageEmbedCode(): void {
    $media_type = $this->createImageMediaType();
    $media = Media::create([
      'bundle' => $media_type->id(),
      'name' => 'Wheel Illustration.ai',
      'acquia_dam_asset_id' => [
        'asset_id' => '56ff14de-02cd-41b5-9a73-c917eab19abf',
      ],
    ]);
    $media->save();
    assert($media instanceof MediaInterface);

    $build = EmbedCodeFactory::renderAsset('original', $media);
    self::assertEquals([
      '#theme' => 'image',
      '#uri' => 'acquia-dam://56ff14de-02cd-41b5-9a73-c917eab19abf/9e4e810c-147b-4ac2-85a9-cf64f8fa61e0',
      '#alt' => 'Wheel Illustration.ai',
      '#width' => 157,
      '#height' => 120,
    ], $build);
    $this->render($build);
    $this->assertStringContainsString(
      '<img src="https://laser.widen.net/content/9e4e810c-147b-4ac2-85a9-cf64f8fa61e0/web/Wheel%20Illustration.ai" width="157" height="120" alt="Wheel Illustration.ai" loading="lazy" />',
      $this->getRawContent()
    );
  }

  /**
   * Tests embed formatter.
   *
   * @dataProvider testEmbedFormatterData
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  public function testEmbedFormatter(string $embed_style, string $embed_key) {
    $embed_data = file_get_contents(__DIR__ . "/../../fixtures/0324b0b2-5293-4aa0-b0aa-c85b003395e2.json");
    $asset_data = json_decode($embed_data, TRUE);
    $media = Media::create([
      'bundle' => $this->testMediaType->id(),
      'name' => 'test',
      'acquia_dam_asset_id' => [
        'asset_id' => '0324b0b2-5293-4aa0-b0aa-c85b003395e2',
        'version_id' => '7b67948f-ee7e-405c-a0cd-344a24d8afb2',
        'external_id' => '8a1ouvfchk',
      ],
      'acquia_dam_embeds' => [
        'value' => $asset_data['embeds'],
      ],
    ]);
    $media->save();
    assert($media instanceof MediaInterface);

    $render_as_field = $this->renderAssetField($media, $embed_style);
    $renderer = \Drupal::service('renderer');

    $rendered_with_factory = EmbedCodeFactory::renderAsset(
      $embed_style,
      $media);
    $this->assertStringContainsString($renderer->renderRoot($rendered_with_factory), $render_as_field);
  }

  /**
   * Renders media field with view builder.
   *
   * @param \Drupal\media\Entity\Media $media
   *   Media entity instance.
   * @param string $embed_style
   *   Field formatter config value.
   *
   * @return callable|\Drupal\Component\Render\MarkupInterface|mixed
   *   Rendered field markup.
   *
   * @throws \Exception
   */
  protected function renderAssetField(Media $media, string $embed_style) {
    $view_builder = \Drupal::entityTypeManager()->getViewBuilder('media');
    $render_array = $view_builder->viewField(
      $media->get('acquia_dam_asset_id'),
      [
        'settings' => [
          'embed_style' => $embed_style,
        ],
      ]
    );

    return $this->render($render_array);
  }

  /**
   * Data provider for testEmbedFormatter.
   *
   * @return \string[][]
   *   Data sets for testEmbedFormatter.
   */
  public function testEmbedFormatterData(): array {
    return [
      [
        'original',
        'original',
      ],
      [
        'inline_view_download',
        'document_viewer_with_download',
      ],
      [
        'inline_view',
        'document_viewer',
      ],
      [
        'link_text_download',
        'document_viewer_with_download',
      ],
      [
        'link_text',
        'document_viewer',
      ],
      [
        'link_thumbnail_download',
        'document_viewer_with_download',
      ],
      [
        'link_thumbnail',
        'document_viewer',
      ],
    ];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc