You are here

public function StorageTest::testImmutableForm in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/system/tests/src/Functional/Form/StorageTest.php \Drupal\Tests\system\Functional\Form\StorageTest::testImmutableForm()

Verifies that form build-id is regenerated when loading an immutable form from the cache.

File

core/modules/system/tests/src/Functional/Form/StorageTest.php, line 153

Class

StorageTest
Tests a multistep form using form storage and makes sure validation and caching works right.

Namespace

Drupal\Tests\system\Functional\Form

Code

public function testImmutableForm() {

  // Request the form with 'cache' query parameter to enable form caching.
  $this
    ->drupalGet('form_test/form-storage', [
    'query' => [
      'cache' => 1,
      'immutable' => 1,
    ],
  ]);

  // Ensure the hidden 'form_build_id' field is unique.
  $this
    ->assertSession()
    ->elementsCount('xpath', '//input[@name="form_build_id"]', 1);
  $buildId = $this
    ->assertSession()
    ->hiddenFieldExists('form_build_id')
    ->getValue();

  // Trigger validation error by submitting an empty title.
  $edit = [
    'title' => '',
  ];
  $this
    ->submitForm($edit, 'Continue submit');

  // Verify that the build-id did change.
  $this
    ->assertSession()
    ->hiddenFieldValueNotEquals('form_build_id', $buildId);

  // Ensure the hidden 'form_build_id' field is unique.
  $this
    ->assertSession()
    ->elementsCount('xpath', '//input[@name="form_build_id"]', 1);

  // Retrieve the new build-id.
  $buildId = (string) $this
    ->assertSession()
    ->hiddenFieldExists('form_build_id')
    ->getValue();

  // Trigger validation error by again submitting an empty title.
  $edit = [
    'title' => '',
  ];
  $this
    ->submitForm($edit, 'Continue submit');

  // Verify that the build-id does not change the second time.
  $this
    ->assertSession()
    ->hiddenFieldValueEquals('form_build_id', $buildId);
}