file_download_link-8.x-1.0/tests/src/Kernel/FileDownloadLinkMediaApplicableTest.php
tests/src/Kernel/FileDownloadLinkMediaApplicableTest.php
<?php namespace Drupal\Tests\file_download_link\Kernel; use Drupal\field\Entity\FieldConfig; use Drupal\field\Entity\FieldStorageConfig; use Drupal\KernelTests\KernelTestBase; use Drupal\media\Entity\MediaType; use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; use Drupal\Tests\media\Traits\MediaTypeCreationTrait; use Drupal\file_download_link_media\Plugin\Field\FieldFormatter\FileDownloadLinkMedia; use PHPUnit\Framework\Assert; /** * Class for testing file_download_link_media formatter. * * @group file_download_link */ class FileDownloadLinkMediaApplicableTest extends KernelTestBase { use MediaTypeCreationTrait; /** * A test node. * * @var Drupal\node\Entity\Node */ public $node; /** * The modules to load to run the test. * * @var array */ protected static $modules = [ 'field', 'system', 'user', 'media', 'node', 'file', 'file_download_link', 'file_download_link_media', 'image', ]; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->installConfig(['system', 'field']); $this->installSchema('user', ['users_data']); $this->installEntitySchema('user'); $this->installEntitySchema('node'); $this->installEntitySchema('node_type'); $this->installEntitySchema('media'); $this->installEntitySchema('media_type'); $this->createMediaType('file', ['id' => 'file_media', 'label' => 'File Media']); $this->createMediaType('image', ['id' => 'image_media', 'label' => 'Image Media']); $this->createMediaType('oembed:video', ['id' => 'oembed_media', 'label' => 'Oembed Media']); $this->node = $this->createTestNode(); } /** * This should be applicable for image media. */ public function testApplicableImage() { $field_definition = $this->node->getFieldDefinition('field_image'); Assert::assertTrue(FileDownloadLinkMedia::isApplicable($field_definition)); } /** * This should be applicable for file media. */ public function testApplicableFile() { $field_definition = $this->node->getFieldDefinition('field_file'); Assert::assertTrue(FileDownloadLinkMedia::isApplicable($field_definition)); } /** * This should be applicable for file media and image media. */ public function testApplicableBoth() { $field_definition = $this->node->getFieldDefinition('field_both'); Assert::assertTrue(FileDownloadLinkMedia::isApplicable($field_definition)); } /** * This should not work for oembed. */ public function testApplicableOembed() { $field_definition = $this->node->getFieldDefinition('field_oembed'); Assert::assertFalse(FileDownloadLinkMedia::isApplicable($field_definition)); } /** * This should not work for all until I delete oembed media type. */ public function testApplicableAll() { $field_definition = $this->node->getFieldDefinition('field_all'); Assert::assertFalse(FileDownloadLinkMedia::isApplicable($field_definition)); $oembed = MediaType::load('oembed_media'); $oembed->delete(); Assert::assertTrue(FileDownloadLinkMedia::isApplicable($field_definition)); } /** * Helper function to create node that can be used for testing. * * This node has several media fields to test with, though no media * items are actually created. * * @return Drupal\node\Entity\Node * An node to be used for testing. */ protected function createTestNode() { $node_type = NodeType::create(['type' => 'test_node', 'name' => 'Test Node']); $node_type->save(); // Just image media. $field_storage = FieldStorageConfig::create([ 'field_name' => 'field_image', 'entity_type' => 'node', 'type' => 'entity_reference', 'settings' => [ 'target_type' => 'media', ], ]); $field_storage->save(); $instance = FieldConfig::create([ 'field_storage' => $field_storage, 'bundle' => 'test_node', 'label' => 'Media', 'settings' => [ 'handler_settings' => [ 'target_bundles' => [ 'image_media', ], ], ], ]); $instance->save(); // Just file media. $field_storage = FieldStorageConfig::create([ 'field_name' => 'field_file', 'entity_type' => 'node', 'type' => 'entity_reference', 'settings' => [ 'target_type' => 'media', ], ]); $field_storage->save(); $instance = FieldConfig::create([ 'field_storage' => $field_storage, 'bundle' => 'test_node', 'label' => 'Media', 'settings' => [ 'handler_settings' => [ 'target_bundles' => [ 'file_media', ], ], ], ]); $instance->save(); // Just oembed media. $field_storage = FieldStorageConfig::create([ 'field_name' => 'field_oembed', 'entity_type' => 'node', 'type' => 'entity_reference', 'settings' => [ 'target_type' => 'media', ], ]); $field_storage->save(); $instance = FieldConfig::create([ 'field_storage' => $field_storage, 'bundle' => 'test_node', 'label' => 'Media', 'settings' => [ 'handler_settings' => [ 'target_bundles' => [ 'oembed_media', ], ], ], ]); $instance->save(); // Image and file. $field_storage = FieldStorageConfig::create([ 'field_name' => 'field_both', 'entity_type' => 'node', 'type' => 'entity_reference', 'settings' => [ 'target_type' => 'media', ], ]); $field_storage->save(); $instance = FieldConfig::create([ 'field_storage' => $field_storage, 'bundle' => 'test_node', 'label' => 'Media', 'settings' => [ 'handler_settings' => [ 'target_bundles' => [ 'file_media', 'image_media', ], ], ], ]); $instance->save(); // All media. $field_storage = FieldStorageConfig::create([ 'field_name' => 'field_all', 'entity_type' => 'node', 'type' => 'entity_reference', 'settings' => [ 'target_type' => 'media', ], ]); $field_storage->save(); $instance = FieldConfig::create([ 'field_storage' => $field_storage, 'bundle' => 'test_node', 'label' => 'Media', ]); $instance->save(); $node = Node::create(['type' => 'test_node', 'title' => 'Test Entity']); $node->set('status', 1); $node->save(); return $node; } }