You are here

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\Tests

Code

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');
}