class FileManagedFileElementTest in Drupal 10
Same name in this branch
- 10 core/modules/file/tests/src/Functional/FileManagedFileElementTest.php \Drupal\Tests\file\Functional\FileManagedFileElementTest
- 10 core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php \Drupal\Tests\file\FunctionalJavascript\FileManagedFileElementTest
Same name and namespace in other branches
- 8 core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php \Drupal\Tests\file\FunctionalJavascript\FileManagedFileElementTest
- 9 core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php \Drupal\Tests\file\FunctionalJavascript\FileManagedFileElementTest
Tests the 'managed_file' element type.
@group file
Hierarchy
- class \Drupal\Tests\BrowserTestBase extends \PHPUnit\Framework\TestCase uses \Drupal\Tests\PhpUnitCompatibilityTrait, \Symfony\Bridge\PhpUnit\ExpectDeprecationTrait, FunctionalTestSetupTrait, TestSetupTrait, BlockCreationTrait, ConfigTestTrait, ExtensionListTestTrait, ContentTypeCreationTrait, NodeCreationTrait, RandomGeneratorTrait, TestRequirementsTrait, PhpUnitWarnings, UiHelperTrait, UserCreationTrait, XdebugRequestTrait
- class \Drupal\FunctionalJavascriptTests\WebDriverTestBase
- class \Drupal\Tests\file\FunctionalJavascript\FileManagedFileElementTest
- class \Drupal\FunctionalJavascriptTests\WebDriverTestBase
Expanded class hierarchy of FileManagedFileElementTest
File
- core/
modules/ file/ tests/ src/ FunctionalJavascript/ FileManagedFileElementTest.php, line 12
Namespace
Drupal\Tests\file\FunctionalJavascriptView source
class FileManagedFileElementTest extends WebDriverTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'node',
'file',
'file_module_test',
'field_ui',
];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* A user with administration permissions.
*
* @var \Drupal\user\UserInterface
*/
protected $adminUser;
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
$this->adminUser = $this
->drupalCreateUser([
'access content',
'access administration pages',
'administer site configuration',
'administer users',
'administer permissions',
'administer content types',
'administer node fields',
'administer node display',
'administer nodes',
'bypass node access',
]);
$this
->drupalLogin($this->adminUser);
$this
->drupalCreateContentType([
'type' => 'article',
'name' => 'Article',
]);
}
/**
* Tests the managed_file element type.
*/
public function testManagedFile() {
// Perform the tests with all permutations of $form['#tree'],
// $element['#extended'], and $element['#multiple'].
$filename = \Drupal::service('file_system')
->tempnam('temporary://', "testManagedFile") . '.txt';
file_put_contents($filename, $this
->randomString(128));
foreach ([
0,
1,
] as $tree) {
foreach ([
0,
1,
] as $extended) {
foreach ([
0,
1,
] as $multiple) {
$path = 'file/test/' . $tree . '/' . $extended . '/' . $multiple;
$input_base_name = $tree ? 'nested_file' : 'file';
$file_field_name = $multiple ? 'files[' . $input_base_name . '][]' : 'files[' . $input_base_name . ']';
// Now, test the Upload and Remove buttons, with Ajax.
// Upload, then Submit.
$last_fid_prior = $this
->getLastFileId();
$this
->drupalGet($path);
$this
->getSession()
->getPage()
->attachFileToField($file_field_name, $this->container
->get('file_system')
->realpath($filename));
$uploaded_file = $this
->assertSession()
->waitForElement('css', '.file--mime-text-plain');
$this
->assertNotEmpty($uploaded_file);
$last_fid = $this
->getLastFileId();
$this
->assertGreaterThan($last_fid_prior, $last_fid, 'New file got uploaded.');
$this
->submitForm([], 'Save');
// Remove, then Submit.
$remove_button_title = $multiple ? 'Remove selected' : 'Remove';
$this
->drupalGet($path . '/' . $last_fid);
if ($multiple) {
$selected_checkbox = ($tree ? 'nested[file]' : 'file') . '[file_' . $last_fid . '][selected]';
$this
->getSession()
->getPage()
->checkField($selected_checkbox);
}
$this
->getSession()
->getPage()
->pressButton($remove_button_title);
$this
->assertSession()
->assertWaitOnAjaxRequest();
$this
->submitForm([], 'Save');
$this
->assertSession()
->pageTextContains('The file ids are .');
// Upload, then Remove, then Submit.
$this
->drupalGet($path);
$this
->getSession()
->getPage()
->attachFileToField($file_field_name, $this->container
->get('file_system')
->realpath($filename));
$uploaded_file = $this
->assertSession()
->waitForElement('css', '.file--mime-text-plain');
$this
->assertNotEmpty($uploaded_file);
if ($multiple) {
$selected_checkbox = ($tree ? 'nested[file]' : 'file') . '[file_' . $this
->getLastFileId() . '][selected]';
$this
->getSession()
->getPage()
->checkField($selected_checkbox);
}
$this
->getSession()
->getPage()
->pressButton($remove_button_title);
$this
->assertSession()
->assertWaitOnAjaxRequest();
$this
->submitForm([], 'Save');
$this
->assertSession()
->pageTextContains('The file ids are .');
}
}
}
}
/**
* Retrieves the fid of the last inserted file.
*/
protected function getLastFileId() {
return (int) \Drupal::entityQueryAggregate('file')
->accessCheck(FALSE)
->aggregate('fid', 'max')
->execute()[0]['fid_max'];
}
}