You are here

public function AjaxFormPageCacheTest::testSimpleAJAXFormValue in Drupal 10

Same name and namespace in other branches
  1. 8 core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxFormPageCacheTest.php \Drupal\FunctionalJavascriptTests\Ajax\AjaxFormPageCacheTest::testSimpleAJAXFormValue()
  2. 9 core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxFormPageCacheTest.php \Drupal\FunctionalJavascriptTests\Ajax\AjaxFormPageCacheTest::testSimpleAJAXFormValue()

Create a simple form, then submit the form via AJAX to change to it.

File

core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxFormPageCacheTest.php, line 47

Class

AjaxFormPageCacheTest
Performs tests on AJAX forms in cached pages.

Namespace

Drupal\FunctionalJavascriptTests\Ajax

Code

public function testSimpleAJAXFormValue() {
  $this
    ->drupalGet('ajax_forms_test_get_form');
  $build_id_initial = $this
    ->getFormBuildId();

  // Changing the value of a select input element, triggers an AJAX
  // request/response. The callback on the form responds with three AJAX
  // commands:
  // - UpdateBuildIdCommand
  // - HtmlCommand
  // - DataCommand
  $session = $this
    ->getSession();
  $session
    ->getPage()
    ->selectFieldOption('select', 'green');

  // Wait for the DOM to update. The HtmlCommand will update
  // #ajax_selected_color to reflect the color change.
  $green_span = $this
    ->assertSession()
    ->waitForElement('css', "#ajax_selected_color:contains('green')");
  $this
    ->assertNotNull($green_span, 'DOM update: The selected color SPAN is green.');

  // Confirm the operation of the UpdateBuildIdCommand.
  $build_id_first_ajax = $this
    ->getFormBuildId();
  $this
    ->assertNotEquals($build_id_initial, $build_id_first_ajax, 'Build id is changed in the form_build_id element on first AJAX submission');

  // Changing the value of a select input element, triggers an AJAX
  // request/response.
  $session
    ->getPage()
    ->selectFieldOption('select', 'red');

  // Wait for the DOM to update.
  $red_span = $this
    ->assertSession()
    ->waitForElement('css', "#ajax_selected_color:contains('red')");
  $this
    ->assertNotNull($red_span, 'DOM update: The selected color SPAN is red.');

  // Confirm the operation of the UpdateBuildIdCommand.
  $build_id_second_ajax = $this
    ->getFormBuildId();
  $this
    ->assertNotEquals($build_id_first_ajax, $build_id_second_ajax, 'Build id changes on subsequent AJAX submissions');

  // Emulate a push of the reload button and then repeat the test sequence
  // this time with a page loaded from the cache.
  $session
    ->reload();
  $build_id_from_cache_initial = $this
    ->getFormBuildId();
  $this
    ->assertEquals($build_id_initial, $build_id_from_cache_initial, 'Build id is the same as on the first request');

  // Changing the value of a select input element, triggers an AJAX
  // request/response.
  $session
    ->getPage()
    ->selectFieldOption('select', 'green');

  // Wait for the DOM to update.
  $green_span2 = $this
    ->assertSession()
    ->waitForElement('css', "#ajax_selected_color:contains('green')");
  $this
    ->assertNotNull($green_span2, 'DOM update: After reload - the selected color SPAN is green.');
  $build_id_from_cache_first_ajax = $this
    ->getFormBuildId();
  $this
    ->assertNotEquals($build_id_from_cache_initial, $build_id_from_cache_first_ajax, 'Build id is changed in the DOM on first AJAX submission');
  $this
    ->assertNotEquals($build_id_first_ajax, $build_id_from_cache_first_ajax, 'Build id from first user is not reused');

  // Changing the value of a select input element, triggers an AJAX
  // request/response.
  $session
    ->getPage()
    ->selectFieldOption('select', 'red');

  // Wait for the DOM to update.
  $red_span2 = $this
    ->assertSession()
    ->waitForElement('css', "#ajax_selected_color:contains('red')");
  $this
    ->assertNotNull($red_span2, 'DOM update: After reload - the selected color SPAN is red.');
  $build_id_from_cache_second_ajax = $this
    ->getFormBuildId();
  $this
    ->assertNotEquals($build_id_from_cache_first_ajax, $build_id_from_cache_second_ajax, 'Build id changes on subsequent AJAX submissions');
}