You are here

public function AjaxInGroupTest::testSimpleAjaxFormValue in Drupal 10

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

Submits forms with select and checkbox elements via Ajax.

File

core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxInGroupTest.php, line 36

Class

AjaxInGroupTest
Tests that form elements in groups work correctly with AJAX.

Namespace

Drupal\FunctionalJavascriptTests\Ajax

Code

public function testSimpleAjaxFormValue() {
  $this
    ->drupalGet('/ajax_forms_test_get_form');
  $assert_session = $this
    ->assertSession();
  $assert_session
    ->responseContains('Test group');
  $assert_session
    ->responseContains('AJAX checkbox in a group');
  $session = $this
    ->getSession();
  $checkbox_original = $session
    ->getPage()
    ->findField('checkbox_in_group');
  $this
    ->assertNotNull($checkbox_original, 'The checkbox_in_group is on the page.');
  $original_id = $checkbox_original
    ->getAttribute('id');

  // Triggers an AJAX request/response.
  $checkbox_original
    ->check();

  // The response contains a new nested "test group" form element, similar
  // to the one already in the DOM except for a change in the form build id.
  $checkbox_new = $assert_session
    ->waitForElement('xpath', "//input[@name='checkbox_in_group' and not(@id='{$original_id}')]");
  $this
    ->assertNotNull($checkbox_new, 'DOM update: clicking the checkbox refreshed the checkbox_in_group structure');
  $assert_session
    ->responseContains('Test group');
  $assert_session
    ->responseContains('AJAX checkbox in a group');
  $assert_session
    ->responseContains('AJAX checkbox in a nested group');
  $assert_session
    ->responseContains('Another AJAX checkbox in a nested group');
}