function FileListingTest::testFileListingPages

Same name and namespace in other branches
  1. 10 core/modules/file/tests/src/Functional/FileListingTest.php \Drupal\Tests\file\Functional\FileListingTest::testFileListingPages()
  2. 11.x core/modules/file/tests/src/Functional/FileListingTest.php \Drupal\Tests\file\Functional\FileListingTest::testFileListingPages()
  3. 9 core/modules/file/tests/src/Functional/FileListingTest.php \Drupal\Tests\file\Functional\FileListingTest::testFileListingPages()
  4. main core/modules/file/tests/src/Functional/FileListingTest.php \Drupal\Tests\file\Functional\FileListingTest::testFileListingPages()

Tests file overview with different user permissions.

File

core/modules/file/tests/src/Functional/FileListingTest.php, line 76

Class

FileListingTest
Tests file listing page functionality.

Namespace

Drupal\Tests\file\Functional

Code

public function testFileListingPages() {
  $file_usage = $this->container
    ->get('file.usage');
  // Users without sufficient permissions should not see file listing.
  $this->drupalLogin($this->baseUser);
  $this->drupalGet('admin/content/files');
  $this->assertSession()
    ->statusCodeEquals(403);
  // Log in with user with right permissions and test listing.
  $this->drupalLogin($this->adminUser);
  for ($i = 0; $i < 5; $i++) {
    $nodes[] = $this->drupalCreateNode([
      'type' => 'article',
    ]);
  }
  $this->drupalGet('admin/content/files');
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertText('No files available.');
  $this->drupalGet('admin/content/files');
  $this->assertSession()
    ->statusCodeEquals(200);
  // Create a file with no usage.
  $file = $this->createFile();
  $this->drupalGet('admin/content/files/usage/' . $file->id());
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertTitle('File usage information for ' . $file->getFilename() . ' | Drupal');
  foreach ($nodes as &$node) {
    $this->drupalGet('node/' . $node->id() . '/edit');
    $file = $this->getTestFile('image');
    $edit = [
      'files[file_0]' => \Drupal::service('file_system')->realpath($file->getFileUri()),
    ];
    $this->drupalPostForm(NULL, $edit, t('Save'));
    $node = Node::load($node->id());
  }
  $this->drupalGet('admin/content/files');
  foreach ($nodes as $node) {
    $file = File::load($node->file->target_id);
    $this->assertText($file->getFilename());
    $this->assertLinkByHref(file_create_url($file->getFileUri()));
    $this->assertLinkByHref('admin/content/files/usage/' . $file->id());
  }
  $this->assertSession()
    ->elementTextNotContains('css', 'table.views-table', 'Temporary');
  $this->assertSession()
    ->elementTextContains('css', 'table.views-table', 'Permanent');
  // Use one file two times and check usage information.
  $orphaned_file = $nodes[1]->file->target_id;
  $used_file = $nodes[0]->file->target_id;
  $nodes[1]->file->target_id = $used_file;
  $nodes[1]->save();
  $this->drupalGet('admin/content/files');
  $file = File::load($orphaned_file);
  $usage = $this->sumUsages($file_usage->listUsage($file));
  $this->assertRaw('admin/content/files/usage/' . $file->id() . '">' . $usage);
  $file = File::load($used_file);
  $usage = $this->sumUsages($file_usage->listUsage($file));
  $this->assertRaw('admin/content/files/usage/' . $file->id() . '">' . $usage);
  $result = $this->xpath("//td[contains(@class, 'views-field-status') and contains(text(), :value)]", [
    ':value' => 'Temporary',
  ]);
  $this->assertCount(1, $result, 'Unused file marked as temporary.');
  // Test file usage page.
  foreach ($nodes as $node) {
    $file = File::load($node->file->target_id);
    $usage = $file_usage->listUsage($file);
    $this->drupalGet('admin/content/files/usage/' . $file->id());
    $this->assertSession()
      ->statusCodeEquals(200);
    $this->assertText($node->getTitle(), 'Node title found on usage page.');
    $this->assertText('node', 'Registering entity type found on usage page.');
    $this->assertText('file', 'Registering module found on usage page.');
    foreach ($usage as $module) {
      foreach ($module as $entity_type) {
        foreach ($entity_type as $entity) {
          $this->assertText($entity, 'Usage count found on usage page.');
        }
      }
    }
    $this->assertLinkByHref('node/' . $node->id(), 0, 'Link to registering entity found on usage page.');
  }
}

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