Same name and namespace in other branches
  1. 8.9.x core/modules/file/tests/src/Kernel/LoadTest.php \Drupal\Tests\file\Kernel\LoadTest
  2. 9 core/modules/file/tests/src/Kernel/LoadTest.php \Drupal\Tests\file\Kernel\LoadTest

Tests \Drupal\file\Entity\File::load().

@group file

Hierarchy

Expanded class hierarchy of LoadTest

File

core/modules/file/tests/src/Kernel/LoadTest.php, line 13

Namespace

Drupal\Tests\file\Kernel
View source
class LoadTest extends FileManagedUnitTestBase {

  /**
   * Try to load a non-existent file by fid.
   */
  public function testLoadMissingFid() {
    $this
      ->assertNull(File::load(-1), 'Try to load an invalid fid fails.');
    $this
      ->assertFileHooksCalled([]);
  }

  /**
   * Try to load a non-existent file by URI.
   */
  public function testLoadMissingFilepath() {
    $files = \Drupal::entityTypeManager()
      ->getStorage('file')
      ->loadByProperties([
      'uri' => 'foobar://misc/druplicon.png',
    ]);
    $this
      ->assertFalse(reset($files), "Try to load a file that doesn't exist in the database fails.");
    $this
      ->assertFileHooksCalled([]);
  }

  /**
   * Try to load a non-existent file by status.
   */
  public function testLoadInvalidStatus() {
    $files = \Drupal::entityTypeManager()
      ->getStorage('file')
      ->loadByProperties([
      'status' => -99,
    ]);
    $this
      ->assertFalse(reset($files), 'Trying to load a file with an invalid status fails.');
    $this
      ->assertFileHooksCalled([]);
  }

  /**
   * Load a single file and ensure that the correct values are returned.
   */
  public function testSingleValues() {

    // Create a new file entity from scratch so we know the values.
    $file = $this
      ->createFile('druplicon.txt', NULL, 'public');
    $by_fid_file = File::load($file
      ->id());
    $this
      ->assertFileHookCalled('load');
    $this
      ->assertIsObject($by_fid_file);
    $this
      ->assertEquals($file
      ->id(), $by_fid_file
      ->id(), 'Loading by fid got the same fid.');
    $this
      ->assertEquals($file
      ->getFileUri(), $by_fid_file
      ->getFileUri(), 'Loading by fid got the correct filepath.');
    $this
      ->assertEquals($file
      ->getFilename(), $by_fid_file
      ->getFilename(), 'Loading by fid got the correct filename.');
    $this
      ->assertEquals($file
      ->getMimeType(), $by_fid_file
      ->getMimeType(), 'Loading by fid got the correct MIME type.');
    $this
      ->assertEquals($file
      ->isPermanent(), $by_fid_file
      ->isPermanent(), 'Loading by fid got the correct status.');
    $this
      ->assertTrue($by_fid_file->file_test['loaded'], 'file_test_file_load() was able to modify the file during load.');
  }

  /**
   * This will test loading file data from the database.
   */
  public function testMultiple() {

    // Create a new file entity.
    $file = $this
      ->createFile('druplicon.txt', NULL, 'public');

    // Load by path.
    file_test_reset();
    $by_path_files = \Drupal::entityTypeManager()
      ->getStorage('file')
      ->loadByProperties([
      'uri' => $file
        ->getFileUri(),
    ]);
    $this
      ->assertFileHookCalled('load');
    $this
      ->assertCount(1, $by_path_files, '\\Drupal::entityTypeManager()->getStorage(\'file\')->loadByProperties() returned an array of the correct size.');
    $by_path_file = reset($by_path_files);
    $this
      ->assertTrue($by_path_file->file_test['loaded'], 'file_test_file_load() was able to modify the file during load.');
    $this
      ->assertEquals($file
      ->id(), $by_path_file
      ->id(), 'Loading by filepath got the correct fid.');

    // Load by fid.
    file_test_reset();
    $by_fid_files = File::loadMultiple([
      $file
        ->id(),
    ]);
    $this
      ->assertFileHooksCalled([]);
    $this
      ->assertCount(1, $by_fid_files, '\\Drupal\\file\\Entity\\File::loadMultiple() returned an array of the correct size.');
    $by_fid_file = reset($by_fid_files);
    $this
      ->assertTrue($by_fid_file->file_test['loaded'], 'file_test_file_load() was able to modify the file during load.');
    $this
      ->assertEquals($file
      ->getFileUri(), $by_fid_file
      ->getFileUri(), 'Loading by fid got the correct filepath.');
  }

  /**
   * Loads a single file and ensure that the correct values are returned.
   */
  public function testUuidValues() {

    // Create a new file entity from scratch so we know the values.
    $file = $this
      ->createFile('druplicon.txt', NULL, 'public');
    $file
      ->save();
    file_test_reset();
    $by_uuid_file = \Drupal::service('entity.repository')
      ->loadEntityByUuid('file', $file
      ->uuid());
    $this
      ->assertFileHookCalled('load');
    $this
      ->assertInstanceOf(FileInterface::class, $by_uuid_file);
    $this
      ->assertEquals($file
      ->id(), $by_uuid_file
      ->id(), 'Loading by UUID got the same fid.');
    $this
      ->assertTrue($by_uuid_file->file_test['loaded'], 'file_test_file_load() was able to modify the file during load.');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
FileManagedUnitTestBase::$modules protected static property Modules to enable.
FileManagedUnitTestBase::assertDifferentFile public function Asserts that two files are not the same by comparing the fid and filepath.
FileManagedUnitTestBase::assertFileHookCalled public function Assert that a hook_file_* hook was called a certain number of times.
FileManagedUnitTestBase::assertFileHooksCalled public function Asserts that the specified file hooks were called only once.
FileManagedUnitTestBase::assertFileUnchanged public function Asserts that two files have the same values (except timestamp).
FileManagedUnitTestBase::assertSameFile public function Asserts that two files are the same by comparing the fid and filepath.
FileManagedUnitTestBase::createFile public function Creates and saves a file, asserting that it was saved.
FileManagedUnitTestBase::createUri public function Creates a file and returns its URI.
FileManagedUnitTestBase::setUp protected function 5
LoadTest::testLoadInvalidStatus public function Try to load a non-existent file by status.
LoadTest::testLoadMissingFid public function Try to load a non-existent file by fid.
LoadTest::testLoadMissingFilepath public function Try to load a non-existent file by URI.
LoadTest::testMultiple public function This will test loading file data from the database.
LoadTest::testSingleValues public function Load a single file and ensure that the correct values are returned.
LoadTest::testUuidValues public function Loads a single file and ensure that the correct values are returned.