You are here

public function ImageAdminStylesTest::testAjaxEnabledEffectForm in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/image/tests/src/FunctionalJavascript/ImageAdminStylesTest.php \Drupal\Tests\image\FunctionalJavascript\ImageAdminStylesTest::testAjaxEnabledEffectForm()

Tests editing Ajax-enabled image effect forms.

File

core/modules/image/tests/src/FunctionalJavascript/ImageAdminStylesTest.php, line 22

Class

ImageAdminStylesTest
Tests creation, deletion, and editing of image styles and effects.

Namespace

Drupal\Tests\image\FunctionalJavascript

Code

public function testAjaxEnabledEffectForm() {
  $admin_path = 'admin/config/media/image-styles';

  // Setup a style to be created and effects to add to it.
  $style_name = strtolower($this
    ->randomMachineName(10));
  $style_label = $this
    ->randomString();
  $style_path = $admin_path . '/manage/' . $style_name;
  $effect_edit = [
    'data[test_parameter]' => 100,
  ];

  // Add style form.
  $page = $this
    ->getSession()
    ->getPage();
  $assert = $this
    ->assertSession();
  $this
    ->drupalGet($admin_path . '/add');
  $page
    ->findField('label')
    ->setValue($style_label);
  $assert
    ->waitForElementVisible('named', [
    'button',
    'Edit',
  ])
    ->press();
  $assert
    ->waitForElementVisible('named', [
    'id_or_name',
    'name',
  ])
    ->setValue($style_name);
  $page
    ->pressButton('Create new style');
  $assert
    ->pageTextContains("Style {$style_label} was created.");

  // Add two Ajax-enabled test effects.
  $this
    ->drupalGet($style_path);
  $this
    ->submitForm([
    'new' => 'image_module_test_ajax',
  ], 'Add');
  $this
    ->submitForm($effect_edit, 'Add effect');
  $this
    ->drupalGet($style_path);
  $this
    ->submitForm([
    'new' => 'image_module_test_ajax',
  ], 'Add');
  $this
    ->submitForm($effect_edit, 'Add effect');

  // Load the saved image style.
  $style = ImageStyle::load($style_name);

  // Edit back the effects.
  foreach ($style
    ->getEffects() as $uuid => $effect) {
    $effect_path = $admin_path . '/manage/' . $style_name . '/effects/' . $uuid;
    $this
      ->drupalGet($effect_path);
    $page
      ->findField('data[test_parameter]')
      ->setValue(111);
    $ajax_value = $page
      ->find('css', '#ajax-value')
      ->getText();
    $this
      ->assertSame('Ajax value bar', $ajax_value);
    $this
      ->getSession()
      ->getPage()
      ->pressButton('Ajax refresh');
    $this
      ->assertTrue($page
      ->waitFor(10, function ($page) {
      $ajax_value = $page
        ->find('css', '#ajax-value')
        ->getText();
      return (bool) preg_match('/^Ajax value [0-9.]+ [0-9.]+$/', $ajax_value);
    }));
    $page
      ->pressButton('Update effect');
    $assert
      ->pageTextContains('The image effect was successfully applied.');
  }
}