class FileReferenceResolverTest
Tests the FileReferenceResolver methods.
Attributes
#[Group('file')]
#[RunTestsInSeparateProcesses]
#[CoversClass(FileReferenceResolver::class)]
#[CoversMethod(FileReferenceResolver::class, 'isFileReferencedByField')]
#[CoversMethod(FileReferenceResolver::class, 'getReferencingRevision')]
Hierarchy
- class \Drupal\Tests\file\Kernel\FileReferenceResolverTest extends \Drupal\Tests\file\Kernel\FileManagedUnitTestBase
Expanded class hierarchy of FileReferenceResolverTest
File
-
core/
modules/ file/ tests/ src/ Kernel/ FileReferenceResolverTest.php, line 21
Namespace
Drupal\Tests\file\KernelView source
class FileReferenceResolverTest extends FileManagedUnitTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'entity_test',
'language',
];
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
$this->installEntitySchema('entity_test_mulrevpub');
FieldStorageConfig::create([
'field_name' => 'field_file',
'entity_type' => 'entity_test_mulrevpub',
'type' => 'file',
])->save();
FieldConfig::create([
'entity_type' => 'entity_test_mulrevpub',
'bundle' => 'entity_test_mulrevpub',
'field_name' => 'field_file',
'label' => 'File',
'translatable' => TRUE,
])->save();
}
/**
* Tests that reference in a non-default revision are resolved.
*/
public function testFileReferenceResolveFromReferencingRevision() : void {
$file1 = $this->createFile();
$file2 = $this->createFile();
$entity = EntityTestMulRevPub::create([
'name' => $this->randomMachineName(),
'field_file' => $file1,
]);
$entity->save();
$first_revision_id = $entity->getRevisionId();
// Create new revision with file2.
$entity = EntityTestMulRevPub::load($entity->id());
$entity->setNewRevision();
$entity->set('field_file', $file2);
$entity->save();
$resolver = $this->container
->get(FileReferenceResolver::class);
// The default revision references file2.
$file_2_references = iterator_to_array($resolver->getReferences($file2), FALSE);
$this->assertCount(1, $file_2_references);
$this->assertInstanceOf(FileReferenceUsage::class, $file_2_references[0]);
$this->assertEquals($entity->id(), $file_2_references[0]->id);
// File1 is not the default revision anymore. It is associated with the
// older revision.
$file_1_references = iterator_to_array($resolver->getReferences($file1), FALSE);
$this->assertCount(1, $file_1_references);
$this->assertInstanceOf(FileReferenceUsage::class, $file_1_references[0]);
$this->assertEquals($first_revision_id, $file_1_references[0]->revisionId);
// Verify that usage can be resolved back to the original revision entity.
$loaded = $resolver->loadEntityFromUsage($file_1_references[0]);
$this->assertEquals($first_revision_id, $loaded->getRevisionId());
$this->assertEquals($file1->id(), $loaded->get('field_file')->target_id);
}
/**
* Tests that references in a translation are resolved.
*/
public function testFileReferenceResolveFromTranslationRevision() : void {
ConfigurableLanguage::create([
'id' => 'es',
'label' => 'Spanish',
])->save();
$es_file = $this->createFile();
$entity = EntityTestMulRevPub::create([
'name' => $this->randomMachineName(),
'langcode' => 'en',
]);
$entity->save();
// Add a Spanish translation with a different file attached.
$entity->addTranslation('es', [
'name' => $this->randomMachineName(),
'field_file' => $es_file,
])
->save();
$resolver = $this->container
->get(FileReferenceResolver::class);
// Ensure that file from spanish translation is also included in references.
$es_references = iterator_to_array($resolver->getReferences($es_file), FALSE);
$this->assertCount(1, $es_references);
$this->assertInstanceOf(FileReferenceUsage::class, $es_references[0]);
$this->assertEquals($entity->id(), $es_references[0]->id);
$this->assertNull($es_references[0]->revisionId);
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.