View source
<?php
namespace Drupal\Tests\webform\Functional\Element;
use Drupal\file\Entity\File;
use Drupal\Tests\TestFileCreationTrait;
use Drupal\webform\Entity\Webform;
use Drupal\webform\Entity\WebformSubmission;
class WebformElementTextFormatTest extends WebformElementBrowserTestBase {
use TestFileCreationTrait;
public static $modules = [
'filter',
'file',
'webform',
];
protected static $testWebforms = [
'test_element_text_format',
];
protected $fileUsage;
protected function setUp() {
parent::setUp();
$this->fileUsage = $this->container
->get('file.usage');
}
public function testTextFormat() {
$webform = Webform::load('test_element_text_format');
$this
->drupalGet('/webform/test_element_text_format');
$this
->assertRaw('<div class="js-filter-wrapper filter-wrapper js-form-wrapper form-wrapper" data-drupal-selector="edit-text-format-format" style="display: none" data-webform-states-no-clear id="edit-text-format-format">');
$this
->assertRaw('<div class="filter-help js-form-wrapper form-wrapper" data-drupal-selector="edit-text-format-format-help" style="display: none" id="edit-text-format-format-help">');
$this
->assertRaw('<div data-drupal-selector="edit-text-format-description-more" id="edit-text-format-description-more--description"><div class="webform-element-description">This is a description</div>');
$this
->assertRaw('<div id="edit-text-format-description-more--more" class="js-webform-element-more webform-element-more">');
$this
->assertRaw('<div class="webform-element-more--link"><a role="button" href="#edit-text-format-description-more--more--content">More</a></div>');
$this
->assertRaw('<div id="edit-text-format-description-more--more--content" class="webform-element-more--content">This is more</div>');
$this
->drupalGet('/webform/test_element_text_format');
$this
->assertFieldByName('text_format[value]', 'The quick brown fox jumped over the lazy dog.');
$this
->assertRaw('No HTML tags allowed.');
$text_format = [
'value' => 'Custom value',
'format' => 'custom_format',
];
$form = $webform
->getSubmissionForm([
'data' => [
'text_format' => $text_format,
],
]);
$this
->assertEqual($form['elements']['text_format']['#default_value'], $text_format['value']);
$this
->assertEqual($form['elements']['text_format']['#format'], $text_format['format']);
}
public function testTextFormatFiles() {
$this
->createFilters();
$webform = Webform::load('test_element_text_format');
$this
->drupalLogin($this->rootUser);
$images = $this
->getTestFiles('image');
$images = array_slice($images, 0, 5);
foreach ($images as $index => $image_file) {
$images[$index] = File::create((array) $image_file);
$images[$index]
->save();
}
$this
->assertTrue($images[0]
->isTemporary());
$this
->assertTrue($images[1]
->isTemporary());
$this
->assertTrue($images[2]
->isTemporary());
$edit = [
'text_format[value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[0]
->uuid() . '"/>',
'text_format[format]' => 'full_html',
];
$sid = $this
->postSubmission($webform, $edit);
$this
->reloadImages($images);
$this
->assertFalse($images[0]
->isTemporary());
$this
->assertTrue($images[1]
->isTemporary());
$this
->assertTrue($images[2]
->isTemporary());
$this
->assertIdentical([
'editor' => [
'webform_submission' => [
$sid => '1',
],
],
], $this->fileUsage
->listUsage($images[0]), 'The file has 1 usage.');
$edit = [
'text_format[value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[0]
->uuid() . '"/><img data-entity-type="file" data-entity-uuid="' . $images[1]
->uuid() . '"/>',
'text_format[format]' => 'full_html',
];
$this
->drupalPostForm("/admin/structure/webform/manage/test_element_text_format/submission/{$sid}/edit", $edit, 'Save');
$this
->reloadImages($images);
$this
->assertFalse($images[0]
->isTemporary());
$this
->assertFalse($images[1]
->isTemporary());
$this
->assertTrue($images[2]
->isTemporary());
$this
->assertIdentical([
'editor' => [
'webform_submission' => [
$sid => '1',
],
],
], $this->fileUsage
->listUsage($images[0]), 'The file has 1 usage.');
$this
->assertIdentical([
'editor' => [
'webform_submission' => [
$sid => '1',
],
],
], $this->fileUsage
->listUsage($images[1]), 'The file has 1 usage.');
$edit = [
'text_format[value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[1]
->uuid() . '"/>',
'text_format[format]' => 'full_html',
];
$this
->drupalPostForm("/admin/structure/webform/manage/test_element_text_format/submission/{$sid}/edit", $edit, 'Save');
$this
->reloadImages($images);
$this
->assertTrue($images[0]
->isTemporary());
$this
->assertFalse($images[1]
->isTemporary());
$this
->assertTrue($images[2]
->isTemporary());
$this
->assertIdentical([], $this->fileUsage
->listUsage($images[0]), 'The file has 0 usage.');
$this
->assertIdentical([
'editor' => [
'webform_submission' => [
$sid => '1',
],
],
], $this->fileUsage
->listUsage($images[1]), 'The file has 1 usage.');
$webform_submission = WebformSubmission::load($sid);
$webform_submission_duplicate = $webform_submission
->createDuplicate();
$webform_submission_duplicate
->save();
$this
->assertIdentical([
'editor' => [
'webform_submission' => [
$webform_submission
->id() => '1',
$webform_submission_duplicate
->id() => '1',
],
],
], $this->fileUsage
->listUsage($images[1]), 'The file has 2 usages.');
$webform_submission_duplicate
->delete();
$this
->assertIdentical([
'editor' => [
'webform_submission' => [
$sid => '1',
],
],
], $this->fileUsage
->listUsage($images[1]), 'The file has 1 usage.');
$this
->drupalPostForm("/admin/structure/webform/manage/test_element_text_format/submission/{$sid}/delete", [], 'Delete');
$this
->reloadImages($images);
$this
->assertTrue($images[0]
->isTemporary());
$this
->assertTrue($images[1]
->isTemporary());
$this
->assertTrue($images[2]
->isTemporary());
}
protected function reloadImages(array &$images) {
\Drupal::entityTypeManager()
->getStorage('file')
->resetCache();
foreach ($images as $index => $image) {
$images[$index] = File::load($image
->id());
}
}
}