03fed5446202800f907a79e014a4a347366e1009
[yaffs-website] / web / core / tests / Drupal / FunctionalJavascriptTests / EntityReference / EntityReferenceAutocompleteWidgetTest.php
1 <?php
2
3 namespace Drupal\FunctionalJavascriptTests\EntityReference;
4
5 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
6 use Drupal\simpletest\ContentTypeCreationTrait;
7 use Drupal\simpletest\NodeCreationTrait;
8 use Drupal\Tests\field\Traits\EntityReferenceTestTrait;
9
10 /**
11  * Tests the output of entity reference autocomplete widgets.
12  *
13  * @group entity_reference
14  */
15 class EntityReferenceAutocompleteWidgetTest extends WebDriverTestBase {
16
17   use ContentTypeCreationTrait;
18   use EntityReferenceTestTrait;
19   use NodeCreationTrait;
20
21   /**
22    * {@inheritdoc}
23    */
24   public static $modules = ['node'];
25
26   /**
27    * {@inheritdoc}
28    */
29   protected function setUp() {
30     parent::setUp();
31
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']);
36
37     $user = $this->drupalCreateUser([
38       'access content',
39       'create page content',
40     ]);
41     $this->drupalLogin($user);
42   }
43
44   /**
45    * Tests that the default autocomplete widget return the correct results.
46    */
47   public function testEntityReferenceAutocompleteWidget() {
48     // Create an entity reference field and use the default 'CONTAINS' match
49     // operator.
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',
55         'settings' => [
56           'match_operator' => 'CONTAINS',
57         ],
58       ])
59       ->save();
60
61     // Visit the node add page.
62     $this->drupalGet('node/add/page');
63     $page = $this->getSession()->getPage();
64     $assert_session = $this->assertSession();
65
66     $autocomplete_field = $assert_session->waitForElement('css', '[name="' . $field_name . '[0][target_id]"].ui-autocomplete-input');
67     $autocomplete_field->setValue('Test');
68     $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), ' ');
69     $assert_session->waitOnAutocomplete();
70
71     $results = $page->findAll('css', '.ui-autocomplete li');
72
73     $this->assertCount(2, $results);
74     $assert_session->pageTextContains('Test page');
75     $assert_session->pageTextContains('Page test');
76
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',
81         'settings' => [
82           'match_operator' => 'STARTS_WITH',
83         ],
84       ])
85       ->save();
86
87     $this->drupalGet('node/add/page');
88     $page = $this->getSession()->getPage();
89
90     $autocomplete_field = $assert_session->waitForElement('css', '[name="' . $field_name . '[0][target_id]"].ui-autocomplete-input');
91     $autocomplete_field->setValue('Test');
92     $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), ' ');
93     $assert_session->waitOnAutocomplete();
94
95     $results = $page->findAll('css', '.ui-autocomplete li');
96
97     $this->assertCount(1, $results);
98     $assert_session->pageTextContains('Test page');
99     $assert_session->pageTextNotContains('Page test');
100   }
101
102 }