function DependentDropdownTest::testDependentDropdown
Test the dependent dropdown form with AJAX.
File
- 
              modules/
ajax_example/ tests/ src/ FunctionalJavascript/ DependentDropdownTest.php, line 30  
Class
- DependentDropdownTest
 - Functional test of dependent dropdown example.
 
Namespace
Drupal\Tests\ajax_example\FunctionalJavascriptCode
public function testDependentDropdown() {
  // Get the Mink stuff.
  $assert = $this->assertSession();
  $page = $this->getSession()
    ->getPage();
  // Get a URL object for the form, specifying AJAX.
  $dropdown_url = Url::fromRoute('ajax_example.dependent_dropdown');
  // Get the form.
  $this->drupalGet($dropdown_url);
  // Check for the initial state.
  $assert->fieldDisabled('instrument_dropdown');
  $assert->fieldValueEquals('instrument_dropdown', 'none');
  $submit_button = $page->findButton('edit-submit');
  $this->assertTrue($submit_button->hasAttribute('disabled'));
  // Run through the matrix of families.
  $families = [
    'String' => [
      'Violin',
      'Viola',
      'Cello',
      'Double Bass',
    ],
    'Woodwind' => [
      'Flute',
      'Clarinet',
      'Oboe',
      'Bassoon',
    ],
    'Brass' => [
      'Trumpet',
      'Trombone',
      'French Horn',
      'Euphonium',
    ],
    'Percussion' => [
      'Bass Drum',
      'Timpani',
      'Snare Drum',
      'Tambourine',
    ],
  ];
  foreach ($families as $family => $instruments) {
    // Select a family.
    $family_dropdown = $assert->fieldExists('instrument_family_dropdown');
    $family_dropdown->setValue($family);
    $assert->assertWaitOnAjaxRequest();
    // Get the instrument dropdown elements.
    $instrument_options = $page->findAll('css', 'select[name="instrument_dropdown"] option');
    $this->assertCount(count($instruments), $instrument_options);
    // Make sure all the instruments are in the select dropdown.
    foreach ($instrument_options as $instrument) {
      $this->assertContains($instrument->getAttribute('value'), $instruments);
    }
    // Post each instrument.
    foreach ($instruments as $instrument) {
      $this->drupalGet($dropdown_url);
      $assert->selectExists('instrument_family_dropdown')
        ->selectOption($family);
      $assert->assertWaitOnAjaxRequest();
      $assert->selectExists('instrument_dropdown')
        ->selectOption($instrument);
      $assert->buttonExists('Submit')
        ->press();
      $assert->pageTextContains("Your values have been submitted. Instrument family: {$family}, Instrument: {$instrument}");
    }
  }
}