protected function YamlFormElementManagedFileTest::checkFileUpload in YAML Form 8
Check file upload.
Parameters
string $type: The type of file upload which can be either single or multiple.
object $first_file: The first file to be uploaded.
object $second_file: The second file that replaces the first file.
1 call to YamlFormElementManagedFileTest::checkFileUpload()
- YamlFormElementManagedFileTest::testFileUpload in src/
Tests/ YamlFormElementManagedFileTest.php - Test single and multiple file upload.
File
- src/
Tests/ YamlFormElementManagedFileTest.php, line 158
Class
- YamlFormElementManagedFileTest
- Test for form element managed file handling.
Namespace
Drupal\yamlform\TestsCode
protected function checkFileUpload($type, $first_file, $second_file) {
$key = 'managed_file_' . $type;
$parameter_name = $type == 'multiple' ? "files[{$key}][]" : "files[{$key}]";
$edit = [
$parameter_name => \Drupal::service('file_system')
->realpath($first_file->uri),
];
$sid = $this
->postSubmission($this->yamlform, $edit);
/** @var \Drupal\yamlform\YamlFormSubmissionInterface $submission */
$submission = YamlFormSubmission::load($sid);
/** @var \Drupal\file\Entity\File $file */
$fid = $this
->getLastFileId();
$file = File::load($fid);
// Check that test file was uploaded to the current submission.
$second = $type == 'multiple' ? [
$fid,
] : $fid;
$this
->assertEqual($submission
->getData($key), $second, 'Test file was upload to the current submission');
// Check test file file usage.
$this
->assertIdentical([
'yamlform' => [
'yamlform_submission' => [
$sid => '1',
],
],
], $this->fileUsage
->listUsage($file), 'The file has 1 usage.');
// Check test file uploaded file path.
$this
->assertEqual($file
->getFileUri(), 'private://yamlform/test_element_managed_file/' . $sid . '/' . $first_file->filename);
// Check that test file exists.
$this
->assert(file_exists($file
->getFileUri()), 'File exists');
// Login admin user.
$this
->drupalLogin($this->adminSubmissionUser);
// Check managed file formatting.
$this
->drupalGet('/admin/structure/yamlform/manage/test_element_managed_file/submission/' . $sid);
if ($type == 'multiple') {
$this
->assertRaw('<b>managed_file (multiple)</b><br/><div class="item-list"><ul><li>');
}
$this
->assertRaw('<span class="file file--mime-text-plain file--text"> <a href="' . file_create_url($file
->getFileUri()) . '" type="text/plain; length=' . $file
->getSize() . '">' . $file
->getFilename() . '</a></span>');
// Remove the uploaded file.
if ($type == 'multiple') {
$edit = [
'managed_file_multiple[file_' . $fid . '][selected]' => TRUE,
];
$submit = t('Remove selected');
}
else {
$edit = [];
$submit = t('Remove');
}
$this
->drupalPostForm('/admin/structure/yamlform/manage/test_element_managed_file/submission/' . $sid . '/edit', $edit, $submit);
// Upload new file.
$edit = [
$parameter_name => \Drupal::service('file_system')
->realpath($second_file->uri),
];
$this
->drupalPostForm(NULL, $edit, t('Upload'));
// Submit the new file.
$this
->drupalPostForm(NULL, [], t('Save'));
/** @var \Drupal\file\Entity\File $test_file_0 */
$new_fid = $this
->getLastFileId();
$new_file = File::load($new_fid);
\Drupal::entityTypeManager()
->getStorage('yamlform_submission')
->resetCache();
$submission = YamlFormSubmission::load($sid);
// Check that test new file was uploaded to the current submission.
$second = $type == 'multiple' ? [
$new_fid,
] : $new_fid;
$this
->assertEqual($submission
->getData($key), $second, 'Test new file was upload to the current submission');
// Check that test file was deleted from the disk and database.
$this
->assert(!file_exists($file
->getFileUri()), 'Test file deleted from disk');
$this
->assertEqual(0, db_query('SELECT COUNT(fid) AS total FROM {file_managed} WHERE fid=:fid', [
':fid' => $fid,
])
->fetchField(), 'Test file 0 deleted from database');
$this
->assertEqual(0, db_query('SELECT COUNT(fid) AS total FROM {file_usage} WHERE fid=:fid', [
':fid' => $fid,
])
->fetchField(), 'Test file 0 deleted from database');
// Check test file 1 file usage.
$this
->assertIdentical([
'yamlform' => [
'yamlform_submission' => [
$sid => '1',
],
],
], $this->fileUsage
->listUsage($new_file), 'The new file has 1 usage.');
// Delete the submission.
$submission
->delete();
// Check that test file 1 was deleted from the disk and database.
$this
->assert(!file_exists($new_file
->getFileUri()), 'Test new file deleted from disk');
$this
->assertEqual(0, db_query('SELECT COUNT(fid) AS total FROM {file_managed} WHERE fid=:fid', [
':fid' => $new_fid,
])
->fetchField(), 'Test new file deleted from database');
}