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;
}
}
