class EntityAutocompleteTest
Same name in other branches
- 3.x modules/ajax_example/tests/src/FunctionalJavascript/EntityAutocompleteTest.php \Drupal\Tests\ajax_example\FunctionalJavascript\EntityAutocompleteTest
- 4.0.x modules/ajax_example/tests/src/FunctionalJavascript/EntityAutocompleteTest.php \Drupal\Tests\ajax_example\FunctionalJavascript\EntityAutocompleteTest
Tests the behavior of the entity_autocomplete example.
@group ajax_example
Hierarchy
- class \Drupal\Tests\ajax_example\FunctionalJavascript\EntityAutocompleteTest extends \Drupal\FunctionalJavascriptTests\WebDriverTestBase
Expanded class hierarchy of EntityAutocompleteTest
File
-
ajax_example/
tests/ src/ FunctionalJavascript/ EntityAutocompleteTest.php, line 13
Namespace
Drupal\Tests\ajax_example\FunctionalJavascriptView source
class EntityAutocompleteTest extends WebDriverTestBase {
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
public static $modules = [
'ajax_example',
];
/**
* Test the behavior of the submit-driven AJAX example.
*
* Behaviors to test:
* - GET the route ajax_example.autocomplete_user.
* - Examine the DOM to make sure our change hasn't happened yet.
* - Send an event to the DOM to trigger the autocomplete.
* - Wait for the autocomplete request to complete.
* - Examine the DOM to see if our expected change happened.
* - Submit some names to see if our form processed the user properly.
*/
public function testSubmitDriven() {
// Set up some accounts with known names.
$names = [
'bb',
'bc',
];
foreach ($names as $name) {
$this->createUser([], $name);
}
// Get our various Mink elements.
$assert = $this->assertSession();
$session = $this->getSession();
$page = $session->getPage();
// We'll be using the users field quite a bit, so let's make it a variable.
$users_field_id = 'edit-users';
// Get the form.
$this->drupalGet(Url::fromRoute('ajax_example.autocomplete_user'));
// Examine the DOM to make sure our change hasn't happened yet.
$assert->fieldValueEquals($users_field_id, '');
// Send an event to the DOM. This will start the autocomplete process.
$autocomplete_field = $page->findById($users_field_id);
// We can cause the autocomplete to happen by setting the value in the
// element.
$autocomplete_field->setValue('b');
$this->getSession()
->getDriver()
->keyDown($autocomplete_field->getXpath(), ' ');
// Wait for the autocomplete request to complete. Our code is much quicker
// than the request time.
$assert->waitOnAutocomplete();
// Examine the DOM to see if our expected change happened.
$results = $page->findAll('css', '.ui-autocomplete li');
$this->assertCount(2, $results);
foreach ($results as $result) {
$this->assertContains($result->getText(), $names);
}
// Submit to see if our form processed the user properly.
$autocomplete_field->blur();
$this->submitForm([
$users_field_id => 'bb, bc',
], 'Submit');
$assert->pageTextContains('These are your users: bb bc');
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
EntityAutocompleteTest::$defaultTheme | protected | property | |
EntityAutocompleteTest::$modules | public static | property | |
EntityAutocompleteTest::testSubmitDriven | public | function | Test the behavior of the submit-driven AJAX example. |