Issue by zviryatko, Krzysztof Domański, alexpott, drclaw, vijaycs85, Madis, charlotte.b, mcdruid, Berdir, lauriii: Uploading a managed file on a custom form that allows multiple files also triggers the remove button which results in a duplicate temporary record and results in the file being deleted

(cherry picked from commit 982773dea5)
8.7.x
Alex Pott 2019-05-18 11:37:04 +02:00
parent 4615f549de
commit 20ebfa4348
No known key found for this signature in database
GPG Key ID: 31905460D4A69276
3 changed files with 51 additions and 2 deletions
core/modules/file

View File

@ -201,7 +201,7 @@
triggerUploadButton(event) {
$(event.target)
.closest('.js-form-managed-file')
.find('.js-form-submit')
.find('.js-form-submit[data-drupal-selector$="upload-button"]')
.trigger('mousedown');
},

View File

@ -92,7 +92,7 @@
}
},
triggerUploadButton: function triggerUploadButton(event) {
$(event.target).closest('.js-form-managed-file').find('.js-form-submit').trigger('mousedown');
$(event.target).closest('.js-form-managed-file').find('.js-form-submit[data-drupal-selector$="upload-button"]').trigger('mousedown');
},
disableFields: function disableFields(event) {
var $clickedButton = $(this);

View File

@ -0,0 +1,49 @@
<?php
namespace Drupal\Tests\file\FunctionalJavascript;
use Drupal\Core\Url;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
use Drupal\Tests\TestFileCreationTrait;
/**
* Tests ajax upload to managed files.
*
* @group file
*/
class AjaxFileManagedMultipleTest extends WebDriverTestBase {
use TestFileCreationTrait {
getTestFiles as drupalGetTestFiles;
}
/**
* {@inheritdoc}
*/
protected static $modules = ['file_test', 'file', 'file_module_test'];
/**
* Test if managed file form element works well with multiple files upload.
*/
public function testMultipleFilesUpload() {
$file_system = \Drupal::service('file_system');
$file_storage = \Drupal::entityTypeManager()->getStorage('file');
$page = $this->getSession()->getPage();
$this->drupalGet(Url::fromRoute('file_module_test.managed_test', ['multiple' => TRUE]));
$paths = [];
foreach (array_slice($this->drupalGetTestFiles('image'), 0, 2) as $image) {
$paths[] = $image->filename;
$page->attachFileToField('files[nested_file][]', $file_system->realpath($image->uri));
$this->assertSession()->assertWaitOnAjaxRequest();
}
// Save entire form.
$page->pressButton('Save');
$this->assertSession()->pageTextContains('The file ids are 1,2.');
$this->assertCount(2, $file_storage->loadByProperties(['filename' => $paths]));
}
}