media_acquiadam-8.x-1.46/tests/src/Traits/AcquiadamMockedMediaEntityTrait.php

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

namespace Drupal\Tests\media_acquiadam\Traits;

use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Entity\Plugin\DataType\EntityAdapter;
use Drupal\Core\Entity\Plugin\DataType\EntityReference;
use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemList;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
use Drupal\Core\Field\Plugin\Field\FieldType\StringItem;
use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
use Drupal\Core\TypedData\DataDefinitionInterface;
use Drupal\Core\TypedData\TypedDataManagerInterface;
use Drupal\file\FileInterface;
use Drupal\media\MediaInterface;
use Drupal\media\MediaSourceInterface;
use Drupal\media\MediaTypeInterface;

/**
 * Shared complex mocked media and related entities.
 */
trait AcquiadamMockedMediaEntityTrait {

  /**
   * Mocks a Media entity to add shared functionality for tests.
   *
   * @param int $assetId
   *   The asset ID to assign to the entity.
   * @param string $sourceField
   *   The source field name to use. Allows overriding the success path.
   * @param int $mediaEntityId
   *   The ID to assign to the media entity.
   *
   * @return \Drupal\media\MediaInterface|\PHPUnit\Framework\MockObject\MockObject
   *   The mocked MediaInterface entity.
   */
  protected function getMockedMediaEntity($assetId, $sourceField = NULL, $mediaEntityId = 47247625) {
    if (!\Drupal::hasContainer()) {
      $container = new ContainerBuilder();
    }
    else {
      $container = \Drupal::getContainer();
    }
    $typed_data_manager = $this->createMock(TypedDataManagerInterface::class);
    $typed_data_manager
      ->method('getPropertyInstance')
      ->willReturnCallback(function () {
        $args = func_get_args();
        self::assertCount(3, $args);
        if ($args[1] === 'entity') {
          $instance = new EntityReference(
            $this->createStub(DataDefinitionInterface::class)
          );
          $instance->setValue($args[2]);
          return $instance;
        }
      });
    $container->set('typed_data_manager', $typed_data_manager);
    \Drupal::setContainer($container);

    $sourceField = $sourceField ?? 'phpunit_asset_id_field';

    $source_field_definition = $this->getMockBuilder(FieldDefinitionInterface::class)
      ->disableOriginalConstructor()
      ->getMock();
    $source_field_definition->method('getName')
      ->willReturn($sourceField);

    $media_source = $this->getMockBuilder(MediaSourceInterface::class)
      ->disableOriginalConstructor()
      ->getMock();
    $media_source->method('getSourceFieldDefinition')
      ->willReturn($source_field_definition);

    $media_bundle = $this->createStub(MediaTypeInterface::class);
    $media_bundle->method('id')->willReturn('test_media_type');
    $media_bundle->method('getTypedData')->willReturn(EntityAdapter::createFromEntity($media_bundle));
    $bundle_definition = $this->createStub(EntityReferenceFieldItemListInterface::class);
    $definition = $this->createMock(ComplexDataDefinitionInterface::class);
    $definition->method('getPropertyDefinitions')->willReturn([]);
    $bundle_definition_item = new EntityReferenceItem($definition);
    $bundle_definition_item->setValue([
      'target_id' => $media_bundle->id(),
      'entity' => $media_bundle,
    ]);
    $bundle_definition->method('first')->willReturn($bundle_definition_item);
    $bundle_definition->method('__get')->with('entity')->willReturn($media_bundle);

    $media = $this->getMockBuilder(MediaInterface::class)
      ->disableOriginalConstructor()
      ->getMock();

    $media->method('getSource')->willReturn($media_source);
    $media->method('uuid')->willReturn('e63ce44d-4cfe-44d4-af7d-0692821d52cc');

    $media->method('hasField')->willReturnMap([
      ['phpunit_asset_id_field', TRUE],
      ['phpunit_file_field', TRUE],
      ['phpunit_test_fail', FALSE],
    ]);
    $media->method('getEntityTypeId')->willReturn('media');
    $media->method('bundle')->willReturn('media_acquiadam');
    $media->method('id')->willReturn($mediaEntityId);
    $media->method('get')
      ->with('bundle')
      ->willReturn($bundle_definition);

    $file_field = $this->createStub(FieldItemList::class);
    $definition = $this->createMock(ComplexDataDefinitionInterface::class);
    $definition->method('getPropertyDefinitions')->willReturn([]);
    $field_field_item = new EntityReferenceItem($definition);
    $field_field_item->setValue([
      'target_id' => $this->getMockedFileEntity()->id(),
    ]);
    $file_field->method('first')->willReturn($field_field_item);
    $media->phpunit_file_field = $file_field;
    $media->phpunit_file_field->target_id = $this->getMockedFileEntity()->id();

    $asset_id_field = $this->createStub(FieldItemListInterface::class);
    $definition = $this->createMock(ComplexDataDefinitionInterface::class);
    $definition->method('getPropertyDefinitions')->willReturn([]);
    $asset_id_field_item = new StringItem($definition);
    $asset_id_field_item->setValue([
      'value' => $assetId,
    ]);
    $asset_id_field->method('first')->willReturn($asset_id_field_item);

    $media->phpunit_asset_id_field = $asset_id_field;

    return $media;
  }

  /**
   * Return a consistent, barebones file entity.
   *
   * @return \Drupal\file\FileInterface|\PHPUnit\Framework\MockObject\MockObject
   *   A mocked file entity.
   */
  protected function getMockedFileEntity() {
    $file_entity = $this->getMockBuilder(FileInterface::class)
      ->disableOriginalConstructor()
      ->getMock();
    $file_entity->method('id')->willReturn(894782578);

    return $file_entity;
  }

}

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

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