You are here

public function WebformElementTextFormatTest::testTextFormatFiles in Webform 6.x

Same name and namespace in other branches
  1. 8.5 tests/src/Functional/Element/WebformElementTextFormatTest.php \Drupal\Tests\webform\Functional\Element\WebformElementTextFormatTest::testTextFormatFiles()

Tests webform text format element files.

File

tests/src/Functional/Element/WebformElementTextFormatTest.php, line 83

Class

WebformElementTextFormatTest
Tests for text format element.

Namespace

Drupal\Tests\webform\Functional\Element

Code

public function testTextFormatFiles() {
  $this
    ->createFilters();
  $webform = Webform::load('test_element_text_format');
  $this
    ->drupalLogin($this->rootUser);

  // Create three test images.

  /** @var \Drupal\file\FileInterface[] $images */
  $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();
  }

  // Check that all images are temporary.
  $this
    ->assertTrue($images[0]
    ->isTemporary());
  $this
    ->assertTrue($images[1]
    ->isTemporary());
  $this
    ->assertTrue($images[2]
    ->isTemporary());

  // Upload the first image.
  $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);

  // Check that first image is not temporary.
  $this
    ->assertFalse($images[0]
    ->isTemporary());
  $this
    ->assertTrue($images[1]
    ->isTemporary());
  $this
    ->assertTrue($images[2]
    ->isTemporary());

  // Check create first image file usage.
  $this
    ->assertIdentical([
    'editor' => [
      'webform_submission' => [
        $sid => '1',
      ],
    ],
  ], $this->fileUsage
    ->listUsage($images[0]), 'The file has 1 usage.');

  // Upload the second image.
  $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);

  // Check that first and second image are not temporary.
  $this
    ->assertFalse($images[0]
    ->isTemporary());
  $this
    ->assertFalse($images[1]
    ->isTemporary());
  $this
    ->assertTrue($images[2]
    ->isTemporary());

  // Check first and second image file usage.
  $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.');

  // Remove the first image.
  $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);

  // Check that first is temporary and second image is not temporary.
  $this
    ->assertTrue($images[0]
    ->isTemporary());
  $this
    ->assertFalse($images[1]
    ->isTemporary());
  $this
    ->assertTrue($images[2]
    ->isTemporary());

  // Check first and second image file usage.
  $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.');

  // Duplicate submission.
  $webform_submission = WebformSubmission::load($sid);
  $webform_submission_duplicate = $webform_submission
    ->createDuplicate();
  $webform_submission_duplicate
    ->save();

  // Check second image file usage.
  $this
    ->assertIdentical([
    'editor' => [
      'webform_submission' => [
        $webform_submission
          ->id() => '1',
        $webform_submission_duplicate
          ->id() => '1',
      ],
    ],
  ], $this->fileUsage
    ->listUsage($images[1]), 'The file has 2 usages.');

  // Delete the duplicate webform submission.
  $webform_submission_duplicate
    ->delete();

  // Check second image file usage.
  $this
    ->assertIdentical([
    'editor' => [
      'webform_submission' => [
        $sid => '1',
      ],
    ],
  ], $this->fileUsage
    ->listUsage($images[1]), 'The file has 1 usage.');

  // Delete the webform submission.
  $this
    ->drupalPostForm("/admin/structure/webform/manage/test_element_text_format/submission/{$sid}/delete", [], 'Delete');
  $this
    ->reloadImages($images);

  // Check that first and second image are temporary.
  $this
    ->assertTrue($images[0]
    ->isTemporary());
  $this
    ->assertTrue($images[1]
    ->isTemporary());
  $this
    ->assertTrue($images[2]
    ->isTemporary());
}