function FileFieldDisplayTest::testNodeDisplay in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/file/src/Tests/FileFieldDisplayTest.php \Drupal\file\Tests\FileFieldDisplayTest::testNodeDisplay()
Tests normal formatter display on node display.
File
- core/
modules/ file/ src/ Tests/ FileFieldDisplayTest.php, line 23 - Contains \Drupal\file\Tests\FileFieldDisplayTest.
Class
- FileFieldDisplayTest
- Tests the display of file fields in node and views.
Namespace
Drupal\file\TestsCode
function testNodeDisplay() {
$field_name = strtolower($this
->randomMachineName());
$type_name = 'article';
$field_storage_settings = array(
'display_field' => '1',
'display_default' => '1',
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
);
$field_settings = array(
'description_field' => '1',
);
$widget_settings = array();
$this
->createFileField($field_name, 'node', $type_name, $field_storage_settings, $field_settings, $widget_settings);
// Create a new node *without* the file field set, and check that the field
// is not shown for each node display.
$node = $this
->drupalCreateNode(array(
'type' => $type_name,
));
// Check file_default last as the assertions below assume that this is the
// case.
$file_formatters = array(
'file_table',
'file_url_plain',
'hidden',
'file_default',
);
foreach ($file_formatters as $formatter) {
$edit = array(
"fields[{$field_name}][type]" => $formatter,
);
$this
->drupalPostForm("admin/structure/types/manage/{$type_name}/display", $edit, t('Save'));
$this
->drupalGet('node/' . $node
->id());
$this
->assertNoText($field_name, format_string('Field label is hidden when no file attached for formatter %formatter', array(
'%formatter' => $formatter,
)));
}
$test_file = $this
->getTestFile('text');
simpletest_generate_file('escaped-&-text', 64, 10, 'text');
$test_file = File::create([
'uri' => 'public://escaped-&-text.txt',
'name' => 'escaped-&-text',
'filesize' => filesize('public://escaped-&-text.txt'),
]);
// Create a new node with the uploaded file.
$nid = $this
->uploadNodeFile($test_file, $field_name, $type_name);
// Check that the default formatter is displaying with the file name.
$node_storage = $this->container
->get('entity.manager')
->getStorage('node');
$node_storage
->resetCache(array(
$nid,
));
$node = $node_storage
->load($nid);
$node_file = File::load($node->{$field_name}->target_id);
$file_link = array(
'#theme' => 'file_link',
'#file' => $node_file,
);
$default_output = \Drupal::service('renderer')
->renderRoot($file_link);
$this
->assertRaw($default_output, 'Default formatter displaying correctly on full node view.');
// Turn the "display" option off and check that the file is no longer displayed.
$edit = array(
$field_name . '[0][display]' => FALSE,
);
$this
->drupalPostForm('node/' . $nid . '/edit', $edit, t('Save and keep published'));
$this
->assertNoRaw($default_output, 'Field is hidden when "display" option is unchecked.');
// Add a description and make sure that it is displayed.
$description = $this
->randomMachineName();
$edit = array(
$field_name . '[0][description]' => $description,
$field_name . '[0][display]' => TRUE,
);
$this
->drupalPostForm('node/' . $nid . '/edit', $edit, t('Save and keep published'));
$this
->assertText($description);
// Ensure the filename in the link's title attribute is escaped.
$this
->assertRaw('title="escaped-&-text.txt"');
// Test that fields appear as expected after during the preview.
// Add a second file.
$name = 'files[' . $field_name . '_1][]';
$edit[$name] = drupal_realpath($test_file
->getFileUri());
// Uncheck the display checkboxes and go to the preview.
$edit[$field_name . '[0][display]'] = FALSE;
$edit[$field_name . '[1][display]'] = FALSE;
$this
->drupalPostForm("node/{$nid}/edit", $edit, t('Preview'));
$this
->clickLink(t('Back to content editing'));
$this
->assertRaw($field_name . '[0][display]', 'First file appears as expected.');
$this
->assertRaw($field_name . '[1][display]', 'Second file appears as expected.');
}