You are here

public function WebformEditorTest::testWebformConfigurationFiles in Webform 6.x

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

Tests webform configuration files.

File

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

Class

WebformEditorTest
Tests for webform editor.

Namespace

Drupal\Tests\webform\Functional

Code

public function testWebformConfigurationFiles() {
  $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 = [
    'form_settings[default_form_open_message][value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[0]
      ->uuid() . '"/>',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/config', $edit, 'Save configuration');
  $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' => [
      'config' => [
        'webform.settings' => '1',
      ],
    ],
  ], $this->fileUsage
    ->listUsage($images[0]), 'The file has 1 usage.');

  // Upload the second image.
  $edit = [
    'form_settings[default_form_open_message][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/config', $edit, 'Save configuration');
  $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' => [
      'config' => [
        'webform.settings' => '1',
      ],
    ],
  ], $this->fileUsage
    ->listUsage($images[0]), 'The file has 1 usage.');
  $this
    ->assertIdentical([
    'editor' => [
      'config' => [
        'webform.settings' => '1',
      ],
    ],
  ], $this->fileUsage
    ->listUsage($images[1]), 'The file has 1 usage.');

  // Remove the first image.
  $edit = [
    'form_settings[default_form_open_message][value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[1]
      ->uuid() . '"/>',
  ];
  $this
    ->drupalPostForm('/admin/structure/webform/config', $edit, 'Save configuration');
  $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' => [
      'config' => [
        'webform.settings' => '1',
      ],
    ],
  ], $this->fileUsage
    ->listUsage($images[1]), 'The file has 1 usage.');

  // Simulate deleting webform.settings.yml during webform uninstall.
  // @see webform_uninstall()
  $config = \Drupal::configFactory()
    ->get('webform.settings');
  _webform_config_delete($config);
  $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());
}