FileReferenceResolverTest.php
Namespace
Drupal\Tests\file\KernelFile
-
core/
modules/ file/ tests/ src/ Kernel/ FileReferenceResolverTest.php
View source
<?php
declare (strict_types=1);
namespace Drupal\Tests\file\Kernel;
use Drupal\entity_test\Entity\EntityTestMulRevPub;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\file\FileReferenceResolver;
use Drupal\file\FileReferenceUsage;
use Drupal\language\Entity\ConfigurableLanguage;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\CoversMethod;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
/**
* Tests the FileReferenceResolver methods.
*/
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);
}
}
Classes
| Title | Deprecated | Summary |
|---|---|---|
| FileReferenceResolverTest | Tests the FileReferenceResolver methods. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.