EntityReferenceAutocompleteWidgetTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. namespace Drupal\FunctionalJavascriptTests\EntityReference;
  3. use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
  4. use Drupal\simpletest\ContentTypeCreationTrait;
  5. use Drupal\simpletest\NodeCreationTrait;
  6. use Drupal\Tests\field\Traits\EntityReferenceTestTrait;
  7. /**
  8. * Tests the output of entity reference autocomplete widgets.
  9. *
  10. * @group entity_reference
  11. */
  12. class EntityReferenceAutocompleteWidgetTest extends WebDriverTestBase {
  13. use ContentTypeCreationTrait;
  14. use EntityReferenceTestTrait;
  15. use NodeCreationTrait;
  16. /**
  17. * {@inheritdoc}
  18. */
  19. public static $modules = ['node'];
  20. /**
  21. * {@inheritdoc}
  22. */
  23. protected function setUp() {
  24. parent::setUp();
  25. // Create a Content type and two test nodes.
  26. $this->createContentType(['type' => 'page']);
  27. $this->createNode(['title' => 'Test page']);
  28. $this->createNode(['title' => 'Page test']);
  29. $user = $this->drupalCreateUser([
  30. 'access content',
  31. 'create page content',
  32. ]);
  33. $this->drupalLogin($user);
  34. }
  35. /**
  36. * Tests that the default autocomplete widget return the correct results.
  37. */
  38. public function testEntityReferenceAutocompleteWidget() {
  39. // Create an entity reference field and use the default 'CONTAINS' match
  40. // operator.
  41. $field_name = 'field_test';
  42. $this->createEntityReferenceField('node', 'page', $field_name, $field_name, 'node', 'default', ['target_bundles' => ['page']]);
  43. entity_get_form_display('node', 'page', 'default')
  44. ->setComponent($field_name, [
  45. 'type' => 'entity_reference_autocomplete',
  46. 'settings' => [
  47. 'match_operator' => 'CONTAINS',
  48. ],
  49. ])
  50. ->save();
  51. // Visit the node add page.
  52. $this->drupalGet('node/add/page');
  53. $page = $this->getSession()->getPage();
  54. $assert_session = $this->assertSession();
  55. $autocomplete_field = $assert_session->waitForElement('css', '[name="' . $field_name . '[0][target_id]"].ui-autocomplete-input');
  56. $autocomplete_field->setValue('Test');
  57. $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), ' ');
  58. $assert_session->waitOnAutocomplete();
  59. $results = $page->findAll('css', '.ui-autocomplete li');
  60. $this->assertCount(2, $results);
  61. $assert_session->pageTextContains('Test page');
  62. $assert_session->pageTextContains('Page test');
  63. // Now switch the autocomplete widget to the 'STARTS_WITH' match operator.
  64. entity_get_form_display('node', 'page', 'default')
  65. ->setComponent($field_name, [
  66. 'type' => 'entity_reference_autocomplete',
  67. 'settings' => [
  68. 'match_operator' => 'STARTS_WITH',
  69. ],
  70. ])
  71. ->save();
  72. $this->drupalGet('node/add/page');
  73. $page = $this->getSession()->getPage();
  74. $autocomplete_field = $assert_session->waitForElement('css', '[name="' . $field_name . '[0][target_id]"].ui-autocomplete-input');
  75. $autocomplete_field->setValue('Test');
  76. $this->getSession()->getDriver()->keyDown($autocomplete_field->getXpath(), ' ');
  77. $assert_session->waitOnAutocomplete();
  78. $results = $page->findAll('css', '.ui-autocomplete li');
  79. $this->assertCount(1, $results);
  80. $assert_session->pageTextContains('Test page');
  81. $assert_session->pageTextNotContains('Page test');
  82. }
  83. }