MaximumFileSizeExceededUploadTest.php in Drupal 9
File
core/modules/file/tests/src/FunctionalJavascript/MaximumFileSizeExceededUploadTest.php
View source
<?php
namespace Drupal\Tests\file\FunctionalJavascript;
use Drupal\Component\Utility\Bytes;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\Tests\TestFileCreationTrait;
use Drupal\Tests\file\Functional\FileFieldCreationTrait;
class MaximumFileSizeExceededUploadTest extends WebDriverTestBase {
use FileFieldCreationTrait;
use TestFileCreationTrait;
protected static $modules = [
'node',
'file',
];
protected $defaultTheme = 'stark';
protected $fileSystem;
protected $user;
protected $originalDisplayErrorsValue;
protected function setUp() : void {
parent::setUp();
$this->fileSystem = $this->container
->get('file_system');
$this
->drupalCreateContentType([
'type' => 'article',
'name' => 'Article',
]);
$field_settings = [
'file_extensions' => 'txt',
];
$this
->createFileField('field_file', 'node', 'article', [], $field_settings);
$this->user = $this
->drupalCreateUser([
'access content',
'create article content',
]);
$this
->drupalLogin($this->user);
$this->originalDisplayErrorsValue = ini_set('display_errors', '0');
}
protected function tearDown() : void {
ini_set('display_errors', $this->originalDisplayErrorsValue);
parent::tearDown();
}
public function testUploadFileExceedingMaximumFileSize() {
$session = $this
->getSession();
$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);
$this
->drupalGet('node/add/article');
$page = $session
->getPage();
$page
->attachFileToField("files[field_file_0]", $this->fileSystem
->realpath($invalid_file));
$this
->assertSession()
->waitForElement('css', '.messages--error');
$this
->assertSession()
->pageTextContains('An unrecoverable error occurred. The uploaded file likely exceeded the maximum file size');
$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');
}
}