You are here

public function MaximumFileSizeExceededUploadTest::testUploadFileExceedingMaximumFileSize in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/file/tests/src/FunctionalJavascript/MaximumFileSizeExceededUploadTest.php \Drupal\Tests\file\FunctionalJavascript\MaximumFileSizeExceededUploadTest::testUploadFileExceedingMaximumFileSize()

Tests that uploading files exceeding maximum size are handled correctly.

File

core/modules/file/tests/src/FunctionalJavascript/MaximumFileSizeExceededUploadTest.php, line 98

Class

MaximumFileSizeExceededUploadTest
Tests uploading a file that exceeds the maximum file size.

Namespace

Drupal\Tests\file\FunctionalJavascript

Code

public function testUploadFileExceedingMaximumFileSize() {
  $session = $this
    ->getSession();

  // Create a test file that exceeds the maximum POST size with 1 kilobyte.
  $post_max_size = Bytes::toNumber(ini_get('post_max_size'));
  $invalid_file = $this
    ->generateFile('exceeding_post_max_size', ceil(($post_max_size + 1024) / 1024), 1024);

  // Go to the node creation form and try to upload the test file.
  $this
    ->drupalGet('node/add/article');
  $page = $session
    ->getPage();
  $page
    ->attachFileToField("files[field_file_0]", $this->fileSystem
    ->realpath($invalid_file));

  // An error message should appear informing the user that the file exceeded
  // the maximum file size.
  $this
    ->assertSession()
    ->waitForElement('css', '.messages--error');

  // The error message includes the actual file size limit which depends on
  // the current environment, so we check for a part of the message.
  $this
    ->assertSession()
    ->pageTextContains('An unrecoverable error occurred. The uploaded file likely exceeded the maximum file size');

  // Now upload a valid file and check that the error message disappears.
  $valid_file = $this
    ->generateFile('not_exceeding_post_max_size', 8, 8);
  $page
    ->attachFileToField("files[field_file_0]", $this->fileSystem
    ->realpath($valid_file));
  $this
    ->assertSession()
    ->waitForElement('named', [
    'id_or_name',
    'field_file_0_remove_button',
  ]);
  $this
    ->assertSession()
    ->elementNotExists('css', '.messages--error');
}