media_acquiadam-8.x-1.46/tests/src/Kernel/AcquiadamKernelTestBase.php
tests/src/Kernel/AcquiadamKernelTestBase.php
<?php namespace Drupal\Tests\media_acquiadam\Kernel; use Drupal\KernelTests\Core\Entity\EntityKernelTestBase; use Drupal\media\Entity\Media; use Drupal\media\MediaInterface; use Drupal\media_acquiadam\AssetData; use Drupal\media_acquiadam\Client; use Drupal\media_acquiadam\Entity\Asset; use Drupal\media_acquiadam\Service\AssetFileEntityHelper; use Drupal\media_acquiadam_test\TestClient; use Drupal\Tests\media_acquiadam\Traits\AcquiadamAssetDataTrait; /** * Base class for Acquia DAM kernel tests. */ abstract class AcquiadamKernelTestBase extends EntityKernelTestBase { use AcquiadamAssetDataTrait; const DEFAULT_BUNDLE = 'acquia_dam_asset'; /** * The modules to load to run the test. * * @var array */ protected static $modules = [ 'fallback_formatter', 'file', 'image', 'media', 'media_acquiadam', 'media_acquiadam_test', ]; /** * The test client. * * @var \Drupal\media_acquiadam_test\TestClient */ protected $testClient; /** * Acquia DAM asset data service. * * Mocked to have a fixed set/get. * * @var \Drupal\media_acquiadam\AssetData|\PHPUnit\Framework\MockObject\MockObject */ protected $acquiaAssetData; /** * The initial asset for this test. * * @var \Drupal\media_acquiadam\Entity\Asset */ protected $asset; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->setTestClient(); $this->installConfig('media_acquiadam_test'); $this->installEntitySchema('file'); $this->installEntitySchema('media'); $this->installSchema('file', ['file_usage']); $this->installSchema('media_acquiadam', ['acquiadam_assets_data']); } /** * Sets a test client for this test. */ protected function setTestClient() { $this->testClient = new TestClient(); $acquiadam_client_factory = $this->createMock(Client::class); $acquiadam_client_factory->expects($this->any()) ->method('getAsset') ->willReturnCallback(function ($assetId) { return $this->testClient->getAsset($assetId); }); $acquiadam_client_factory->expects($this->any()) ->method('getSpecificMetadataFields') ->willReturn([ 'author' => [ 'label' => "author", 'type' => "string", ], ]); $this->container->set('media_acquiadam.client', $acquiadam_client_factory); $asset_data = $this->getMockBuilder(AssetData::class) ->disableOriginalConstructor() ->onlyMethods(['get', 'set', 'isUpdatedAsset']) ->getMock(); $asset_data->expects($this->any()) ->method('get')->willReturn(function ($assetId, $name) { return $this->asset->{$name}; }); $asset_data->expects($this->any()) ->method('isUpdatedAsset')->willReturn(TRUE); $this->container->set('media_acquiadam.asset_data', $asset_data); $this->acquiaAssetData = $asset_data; $fileHelper = $this->getMockBuilder(AssetFileEntityHelper::class) ->setConstructorArgs([ $this->container->get('entity_type.manager'), $this->container->get('entity_field.manager'), $this->container->get('config.factory'), $this->container->get('file_system'), $this->container->get('token'), $this->container->get('media_acquiadam.asset_image.helper'), $this->container->get('media_acquiadam.acquiadam'), $this->container->get('media_acquiadam.asset_media.factory'), $this->container->get('logger.factory'), $this->container->get('http_client'), ]) ->onlyMethods([ 'fetchRemoteAssetData', ]) ->getMock(); $fileHelper->setFileRepository($this->container->get('file.repository')); $fileHelper->method('fetchRemoteAssetData')->willReturn('File contents'); $this->container->set('media_acquiadam.asset_file.helper', $fileHelper); \Drupal::setContainer($this->container); } /** * Creates a media entity with a given Asset ID. * * @param string $asset_id * The asset ID. * @param string $bundle * The media entity. * * @return \Drupal\Core\Entity\EntityInterface|\Drupal\media\Entity\Media * The created media entity. * * @throws \Drupal\Core\Entity\EntityStorageException */ protected function createMedia(string $asset_id, string $bundle = self::DEFAULT_BUNDLE) { $media = Media::create([ 'bundle' => $bundle, 'field_acquiadam_asset_id' => $asset_id, ]); $media->save(); return $media; } /** * Get asset file entity from Media entity. * * @param \Drupal\media\MediaInterface $media * The media entity to get the file from. * * @return mixed * The referenced file entity. */ public function getAssetFileEntity(MediaInterface $media) { return current($media ->get('field_acquiadam_asset_file') ->referencedEntities()); } /** * Get the URI from a given asset. * * @param \Drupal\media_acquiadam\Entity\Asset $asset * The asset to generate the URI. * @param \Drupal\media\MediaInterface $media * The media entity for this asset. * * @return string * The expected URI for the asset. * * @throws \Exception */ protected function getAssetUri(Asset $asset, MediaInterface $media) { $destination_folder = $this->container ->get('media_acquiadam.asset_file.helper') ->getDestinationFromEntity($media, 'field_acquiadam_asset_file', $asset->file_upload_date); return sprintf('%s/%s', $destination_folder, $asset->filename); } }