View source
<?php
namespace Drupal\Tests\file\FunctionalJavascript;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
class FileManagedFileElementTest extends WebDriverTestBase {
protected static $modules = [
'node',
'file',
'file_module_test',
'field_ui',
];
protected $defaultTheme = 'stark';
protected $adminUser;
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',
]);
}
public function testManagedFile() {
$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 . ']';
$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_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 .');
$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 .');
}
}
}
}
protected function getLastFileId() {
return (int) \Drupal::entityQueryAggregate('file')
->accessCheck(FALSE)
->aggregate('fid', 'max')
->execute()[0]['fid_max'];
}
}