3 namespace Drupal\FunctionalJavascriptTests\EntityReference;
5 use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
6 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
7 use Drupal\simpletest\ContentTypeCreationTrait;
8 use Drupal\simpletest\NodeCreationTrait;
11 * Tests the output of entity reference autocomplete widgets.
13 * @group entity_reference
15 class EntityReferenceAutocompleteWidgetTest extends JavascriptTestBase {
17 use ContentTypeCreationTrait;
18 use EntityReferenceTestTrait;
19 use NodeCreationTrait;
24 public static $modules = ['node'];
29 protected function setUp() {
32 // Create a Content type and two test nodes.
33 $this->createContentType(['type' => 'page']);
34 $this->createNode(['title' => 'Test page']);
35 $this->createNode(['title' => 'Page test']);
37 $user = $this->drupalCreateUser([
39 'create page content',
41 $this->drupalLogin($user);
45 * Tests that the default autocomplete widget return the correct results.
47 public function testEntityReferenceAutocompleteWidget() {
48 // Create an entity reference field and use the default 'CONTAINS' match
50 $field_name = 'field_test';
51 $this->createEntityReferenceField('node', 'page', $field_name, $field_name, 'node', 'default', ['target_bundles' => ['page']]);
52 entity_get_form_display('node', 'page', 'default')
53 ->setComponent($field_name, [
54 'type' => 'entity_reference_autocomplete',
56 'match_operator' => 'CONTAINS',
61 // Visit the node add page.
62 $this->drupalGet('node/add/page');
63 $page = $this->getSession()->getPage();
64 $assert_session = $this->assertSession();
66 $autocomplete_field = $page->findField($field_name . '[0][target_id]');
67 $autocomplete_field->setValue('Test');
68 $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), ' ');
69 $assert_session->waitOnAutocomplete();
71 $results = $page->findAll('css', '.ui-autocomplete li');
73 $this->assertCount(2, $results);
74 $assert_session->pageTextContains('Test page');
75 $assert_session->pageTextContains('Page test');
77 // Now switch the autocomplete widget to the 'STARTS_WITH' match operator.
78 entity_get_form_display('node', 'page', 'default')
79 ->setComponent($field_name, [
80 'type' => 'entity_reference_autocomplete',
82 'match_operator' => 'STARTS_WITH',
87 $this->drupalGet('node/add/page');
88 $page = $this->getSession()->getPage();
90 $autocomplete_field = $page->findField($field_name . '[0][target_id]');
91 $autocomplete_field->setValue('Test');
92 $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), ' ');
93 $assert_session->waitOnAutocomplete();
95 $results = $page->findAll('css', '.ui-autocomplete li');
97 $this->assertCount(1, $results);
98 $assert_session->pageTextContains('Test page');
99 $assert_session->pageTextNotContains('Page test');