image_to_media_swapper-2.x-dev/tests/src/Traits/MediaFieldSetupTrait.php

tests/src/Traits/MediaFieldSetupTrait.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\image_to_media_swapper\Traits;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;

/**
 * Provides common media field setup functionality for tests.
 */
trait MediaFieldSetupTrait {

  /**
   * The entity type manager service.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected EntityTypeManagerInterface $entityTypeManager;

  /**
   * Creates a media type for images with default settings.
   */
  protected function createMediaImageType(): void {
    $this->entityTypeManager = $this->entityTypeManager ?? $this->container->get('entity_type.manager');

    if (!$this->entityTypeManager->getStorage('media_type')->load('image')) {
      $this->entityTypeManager->getStorage('media_type')->create([
        'id' => 'image',
        'label' => 'Image',
        'source' => 'image',
        'source_configuration' => ['source_field' => 'field_media_image'],
        'field_map' => ['image' => 'field_media_image'],
      ])->save();
    }

    if (!$this->entityTypeManager->getStorage('field_storage_config')->load('media.field_media_image')) {
      FieldStorageConfig::create([
        'field_name' => 'field_media_image',
        'entity_type' => 'media',
        'type' => 'image',
      ])->save();
    }

    if (!$this->entityTypeManager->getStorage('field_config')->load('media.image.field_media_image')) {
      FieldConfig::create([
        'field_name' => 'field_media_image',
        'entity_type' => 'media',
        'bundle' => 'image',
        'label' => 'Image',
        'settings' => [
          'file_extensions' => 'jpg jpeg png gif webp',
          'file_directory' => '[date:custom:Y]-[date:custom:m]',
          'max_filesize' => '10 MB',
          'alt_field' => TRUE,
          'alt_field_required' => FALSE,
          'title_field' => TRUE,
          'title_field_required' => FALSE,
        ],
      ])->save();
    }
  }

  /**
   * Creates a media type for files with default settings.
   */
  protected function createMediaFileType(): void {
    $this->entityTypeManager = $this->entityTypeManager ?? $this->container->get('entity_type.manager');

    if (!$this->entityTypeManager->getStorage('media_type')->load('file')) {
      $this->entityTypeManager->getStorage('media_type')->create([
        'id' => 'file',
        'label' => 'File',
        'source' => 'file',
        'source_configuration' => ['source_field' => 'field_media_file'],
        'field_map' => ['file' => 'field_media_file'],
      ])->save();
    }

    if (!$this->entityTypeManager->getStorage('field_storage_config')->load('media.field_media_file')) {
      FieldStorageConfig::create([
        'field_name' => 'field_media_file',
        'entity_type' => 'media',
        'type' => 'file',
      ])->save();
    }

    if (!$this->entityTypeManager->getStorage('field_config')->load('media.file.field_media_file')) {
      FieldConfig::create([
        'field_name' => 'field_media_file',
        'entity_type' => 'media',
        'bundle' => 'file',
        'label' => 'File',
        'settings' => [
          'file_extensions' => 'pdf mp4 webm mp3 wav',
          'file_directory' => '[date:custom:Y]-[date:custom:m]',
          'max_filesize' => '100 MB',
        ],
      ])->save();
    }
  }

  /**
   * Creates a filter format with media embed enabled.
   */
  protected function createFilterFormatWithMediaEmbed(): void {
    $this->entityTypeManager = $this->entityTypeManager ?? $this->container->get('entity_type.manager');

    if (!$this->entityTypeManager->getStorage('filter_format')->load('full_html')) {
      $this->entityTypeManager->getStorage('filter_format')->create([
        'format' => 'full_html',
        'name' => 'Full HTML',
        'filters' => [
          'media_embed' => ['status' => TRUE],
        ],
      ])->save();
    }

    if (!$this->entityTypeManager->getStorage('editor')->load('full_html')) {
      $this->entityTypeManager->getStorage('editor')->create([
        'format' => 'full_html',
        'editor' => 'ckeditor5',
      ])->save();
    }
  }

  /**
   * Creates a node type with body field.
   */
  protected function createNodeTypeWithBody(): void {
    $this->entityTypeManager = $this->entityTypeManager ?? $this->container->get('entity_type.manager');

    if (!$this->entityTypeManager->getStorage('node_type')->load('article')) {
      $this->entityTypeManager->getStorage('node_type')->create([
        'type' => 'article',
        'name' => 'Article',
      ])->save();
    }

    if (!$this->entityTypeManager->getStorage('field_config')->load('node.article.body')) {
      FieldConfig::create([
        'field_name' => 'body',
        'entity_type' => 'node',
        'bundle' => 'article',
        'label' => 'Body',
        'settings' => [
          'allowed_formats' => ['full_html'],
        ],
      ])->save();
    }
  }

  /**
   * Creates a basic media bundle for testing.
   */
  protected function createMediaBundle(): void {
    $this->entityTypeManager = $this->entityTypeManager ?? $this->container->get('entity_type.manager');

    if (!$this->entityTypeManager->getStorage('media_type')->load('test_image')) {
      $bundle = $this->entityTypeManager->getStorage('media_type')->create([
        'id' => 'test_image',
        'label' => 'Test Image',
        'source' => 'image',
      ]);
      $bundle->save();

      // Create the source field.
      $source_field = $bundle->getSource()->createSourceField($bundle);
      $source_field->getFieldStorageDefinition()->save();
      $source_field->save();
      $bundle->set('source_configuration', [
        'source_field' => $source_field->getName(),
      ]);
      $bundle->save();
    }
  }

}

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

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