public function FileListingTest::testFileListingPages in Drupal 8
Same name and namespace in other branches
- 9 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\FunctionalCode
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.');
}
}