media_library_media_modify-1.0.x-dev/tests/src/Kernel/EntityReferenceEntityModifyItemTest.php

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

declare(strict_types=1);

namespace Drupal\Tests\media_library_media_modify\Kernel;

use Drupal\entity_test\Entity\EntityTest;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\Tests\media\Kernel\MediaKernelTestBase;
use Drupal\Component\Serialization\Json;

/**
 * Tests the access of field values with the media item.
 *
 * @group media_library_media_modify
 */
class EntityReferenceEntityModifyItemTest extends MediaKernelTestBase {

  /**
   * Type of the reference field.
   *
   * @var string
   */
  protected $fieldType = 'entity_reference_entity_modify';

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'entity_test',
    'media_library_media_modify',
    'views',
    'media_library',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    $this->installEntitySchema('entity_test');

    $field_name = 'field_media';
    $entity_type = 'entity_test';
    FieldStorageConfig::create([
      'field_name' => $field_name,
      'type' => $this->fieldType,
      'entity_type' => $entity_type,
      'cardinality' => -1,
      'settings' => [
        'target_type' => 'media',
      ],
    ])->save();

    FieldConfig::create([
      'field_name' => $field_name,
      'entity_type' => $entity_type,
      'bundle' => $entity_type,
      'label' => $field_name,
    ])->save();
  }

  /**
   * Tests the overwrites for a media field.
   */
  public function testOverwrittenMetadata(): void {
    $mediaType = $this->createMediaType('file');
    $media = $this->generateMedia('test.patch', $mediaType);
    $media->save();

    $entity = EntityTest::create([
      'name' => 'Test entity',
      'field_media' => $media,
    ]);
    $entity->save();

    $this->assertEquals('Mr. Jones', $entity->field_media->entity->label());
    $this->assertEquals('', $entity->field_media->entity->field_media_file->entity->description);
    $this->assertEquals(1, $entity->field_media->entity->field_media_file->entity->id());
    $this->assertEquals('test.patch', $entity->field_media->entity->field_media_file->entity->getFilename());

    $entity->field_media->overwritten_property_map = Json::encode([
      'name' => 'Overwritten name',
      'field_media_file' => [['description' => 'Nice description!']],
    ]);

    $this->assertEquals('Overwritten name', $entity->field_media->entity->label());
    $this->assertEquals('Nice description!', $entity->field_media->entity->field_media_file->description);
    $this->assertEquals(1, $entity->field_media->entity->field_media_file->entity->id());
    $this->assertEquals('test.patch', $entity->field_media->entity->field_media_file->entity->getFilename());

    $entity->save();

    $this->assertEquals('Overwritten name', $entity->field_media->entity->label());
    $this->assertEquals('Nice description!', $entity->field_media->entity->field_media_file->description);
    $this->assertEquals(1, $entity->field_media->entity->field_media_file->entity->id());
    $this->assertEquals('test.patch', $entity->field_media->entity->field_media_file->entity->getFilename());
  }

  /**
   * Tests the overwrites for a media field.
   */
  public function testMultivalueOverwrittenMetadata(): void {
    $mediaType = $this->createMediaType('file');

    FieldStorageConfig::create([
      'field_name' => 'field_text',
      'type' => 'string',
      'entity_type' => 'media',
      'cardinality' => -1,
    ])->save();

    FieldConfig::create([
      'field_name' => 'field_text',
      'entity_type' => 'media',
      'bundle' => $mediaType->id(),
      'label' => 'field_text',
    ])->save();

    $media1 = $this->generateMedia('test.patch', $mediaType);
    $media1->set('field_text', 'Media Text 1');
    $media1->save();

    $media2 = $this->generateMedia('test1.patch', $mediaType);
    $media2->save();

    $entity = EntityTest::create([
      'name' => 'Test entity',
      'field_media' => [$media1, $media2],
    ]);
    $entity->save();

    $this->assertEquals('Mr. Jones', $entity->field_media->entity->label());
    $this->assertEquals('', $entity->field_media->entity->field_media_file->entity->description);
    $this->assertEquals(1, $entity->field_media->entity->field_media_file->entity->id());
    $this->assertEquals('test.patch', $entity->field_media->entity->field_media_file->entity->getFilename());

    $this->assertEquals('Mr. Jones', $entity->field_media->get(1)->entity->getName());
    $this->assertEquals('', $entity->field_media->get(1)->entity->field_media_file->entity->description);
    // ID 3 is correct, ID 2 is the generic media icon.
    $this->assertEquals(3, $entity->field_media->get(1)->entity->field_media_file->entity->id());
    $this->assertEquals('test1.patch', $entity->field_media->get(1)->entity->field_media_file->entity->getFilename());

    $entity->field_media->get(0)->overwritten_property_map = Json::encode([
      'name' => 'Overwritten name',
      'field_media_file' => [['description' => 'Nice description!']],
      'field_text' => [1 => ['value' => 'Overwritten Text 2']],
    ]);
    $entity->field_media->get(1)->overwritten_property_map = Json::encode([
      'name' => 'Overwritten name for media 2',
      'field_media_file' => [['description' => 'Nice description for media 2!']],
    ]);
    $entity->save();

    $this->assertEquals('Overwritten name', $entity->field_media->get(0)->entity->getName());
    $this->assertEquals('Nice description!', $entity->field_media->get(0)->entity->field_media_file->description);
    $this->assertEquals(1, $entity->field_media->get(0)->entity->field_media_file->entity->id());
    $this->assertEquals('test.patch', $entity->field_media->get(0)->entity->field_media_file->entity->getFilename());
    $this->assertEquals('Media Text 1', $entity->field_media->get(0)->entity->field_text->get(0)->value);
    $this->assertEmpty($entity->field_media->get(0)->entity->field_text->get(1));

    $this->assertEquals('Overwritten name for media 2', $entity->field_media->get(1)->entity->getName());
    $this->assertEquals('Nice description for media 2!', $entity->field_media->get(1)->entity->field_media_file->get(0)->description);
    $this->assertEquals(3, $entity->field_media->get(1)->entity->field_media_file->entity->id());
    $this->assertEquals('test1.patch', $entity->field_media->get(1)->entity->field_media_file->entity->getFilename());

    $entity->field_media->get(0)->overwritten_property_map = Json::encode([
      'name' => 'Overwritten name for media 2',
      'field_text' => [],
    ]);
    $entity->save();
    $this->assertEmpty($entity->field_media->get(0)->entity->field_text->get(0));
    $this->assertEmpty($entity->field_media->get(0)->entity->field_text->get(1));
  }

}

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

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