You are here

public function WebformEditorTest::testWebformSettingsFiles in Webform 8.5

Same name and namespace in other branches
  1. 6.x tests/src/Functional/WebformEditorTest.php \Drupal\Tests\webform\Functional\WebformEditorTest::testWebformSettingsFiles()

Tests webform entity settings files.

File

tests/src/Functional/WebformEditorTest.php, line 47

Class

WebformEditorTest
Tests for webform editor.

Namespace

Drupal\Tests\webform\Functional

Code

public function testWebformSettingsFiles() {
  $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());
  $this
    ->assertTrue($images[3]
    ->isTemporary());

  // Upload the first image.
  $edit = [
    'description[value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[0]
      ->uuid() . '"/>',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/settings', $edit, 'Save');
  $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());
  $this
    ->assertTrue($images[3]
    ->isTemporary());

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

  // Upload the second image.
  $edit = [
    'description[value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[0]
      ->uuid() . '"/><img data-entity-type="file" data-entity-uuid="' . $images[1]
      ->uuid() . '"/>',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/settings', $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());
  $this
    ->assertTrue($images[3]
    ->isTemporary());

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

  // Remove the first image.
  $edit = [
    'description[value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[1]
      ->uuid() . '"/>',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/settings', $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());
  $this
    ->assertTrue($images[3]
    ->isTemporary());

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

  // Check that processed text's image is parsed.
  $edit = [
    'key' => 'test',
    'properties[text][value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[3]
      ->uuid() . '"/>',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/element/add/processed_text', $edit, 'Save');
  $this
    ->reloadImages($images);

  // Check that fourth is not temporary.
  $this
    ->assertFalse($images[3]
    ->isTemporary());

  // Delete the processed text.
  $this
    ->drupalPostForm('admin/structure/webform/manage/contact/element/test/delete', [], 'Delete');
  $this
    ->reloadImages($images);

  // Check that fourth image is temporary.
  $this
    ->assertTrue($images[3]
    ->isTemporary());

  // Stop marking unused files as temporary.
  \Drupal::configFactory()
    ->getEditable('webform.settings')
    ->set('html_editor.make_unused_managed_files_temporary', FALSE)
    ->save();
  $this
    ->assertTrue($images[0]
    ->isTemporary());

  // Check uploaded file is NOT temporary.
  $this
    ->assertTrue($images[0]
    ->isTemporary());
  $edit = [
    'description[value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[0]
      ->uuid() . '"/>',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/settings', $edit, 'Save');
  $this
    ->reloadImages($images);
  $this
    ->assertFalse($images[0]
    ->isTemporary());

  // Check unused file is NOT temporary.
  $edit = [
    'description[value]' => '',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/settings', $edit, 'Save');
  $this
    ->reloadImages($images);
  $this
    ->assertFalse($images[0]
    ->isTemporary());

  // Start marking unused files as temporary.
  \Drupal::configFactory()
    ->getEditable('webform.settings')
    ->set('html_editor.make_unused_managed_files_temporary', TRUE)
    ->save();
  $edit = [
    'description[value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[0]
      ->uuid() . '"/>',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/manage/contact/settings', $edit, 'Save');
  $this
    ->reloadImages($images);

  // Check that upload file is not temporary.
  $this
    ->assertFalse($images[0]
    ->isTemporary());

  // Delete the webform.
  $this
    ->reloadWebform('contact')
    ->delete();
  $this
    ->reloadImages($images);

  // Check that file is temporary after the webform is deleted.
  $this
    ->assertTrue($images[0]
    ->isTemporary());
}