function FileReferenceResolverTest::testFileReferenceResolveFromReferencingRevision

Tests that reference in a non-default revision are resolved.

File

core/modules/file/tests/src/Kernel/FileReferenceResolverTest.php, line 56

Class

FileReferenceResolverTest
Tests the FileReferenceResolver methods.

Namespace

Drupal\Tests\file\Kernel

Code

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

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.