SelectionTest.php
Same filename in this branch
Same filename in other branches
- 9 core/modules/field/tests/src/Kernel/EntityReference/Views/SelectionTest.php
- 9 core/modules/field/tests/src/Functional/EntityReference/Views/SelectionTest.php
- 8.9.x core/modules/field/tests/src/Kernel/EntityReference/Views/SelectionTest.php
- 8.9.x core/modules/field/tests/src/Functional/EntityReference/Views/SelectionTest.php
- 11.x core/modules/field/tests/src/Kernel/EntityReference/Views/SelectionTest.php
- 11.x core/modules/field/tests/src/Functional/EntityReference/Views/SelectionTest.php
Namespace
Drupal\Tests\field\Functional\EntityReference\ViewsFile
-
core/
modules/ field/ tests/ src/ Functional/ EntityReference/ Views/ SelectionTest.php
View source
<?php
declare (strict_types=1);
namespace Drupal\Tests\field\Functional\EntityReference\Views;
use Drupal\Component\Serialization\Json;
use Drupal\Component\Utility\Crypt;
use Drupal\Component\Utility\Html;
use Drupal\Core\Site\Settings;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\field\Traits\EntityReferenceFieldCreationTrait;
use Drupal\views\Views;
/**
* Tests entity reference selection handler.
*
* @group entity_reference
*/
class SelectionTest extends BrowserTestBase {
use EntityReferenceFieldCreationTrait;
/**
* {@inheritdoc}
*/
protected static $modules = [
'node',
'views',
'entity_reference_test',
'entity_test',
];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* An array of node titles, keyed by content type and node ID.
*
* @var \Drupal\node\NodeInterface[]
*/
protected $nodes = [];
/**
* The handler settings for the entity reference field.
*
* @var array
*/
protected $handlerSettings;
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
// Create content types and nodes.
$type1 = $this->drupalCreateContentType()
->id();
$type2 = $this->drupalCreateContentType()
->id();
// Add some characters that should be escaped but not double escaped.
$node1 = $this->drupalCreateNode([
'type' => $type1,
'title' => 'Test first node &<>',
]);
$node2 = $this->drupalCreateNode([
'type' => $type1,
'title' => 'Test second node &&&',
]);
$node3 = $this->drupalCreateNode([
'type' => $type2,
'title' => 'Test third node <span />',
]);
foreach ([
$node1,
$node2,
$node3,
] as $node) {
$this->nodes[$node->id()] = $node;
}
// Ensure the bundle to which the field is attached actually exists, or we
// will get config validation errors.
entity_test_create_bundle('test_bundle');
// Create an entity reference field.
$handler_settings = [
'view' => [
'view_name' => 'test_entity_reference',
'display_name' => 'entity_reference_1',
],
];
$this->handlerSettings = $handler_settings;
$this->createEntityReferenceField('entity_test', 'test_bundle', 'test_field', $this->randomString(), 'node', 'views', $handler_settings);
}
/**
* Tests that the Views selection handles the views output properly.
*/
public function testAutocompleteOutput() : void {
// Reset any internal static caching.
\Drupal::service('entity_type.manager')->getStorage('node')
->resetCache();
$view = Views::getView('test_entity_reference');
$view->setDisplay();
// Enable the display of the 'type' field so we can test that the output
// does not contain only the entity label.
$fields = $view->displayHandlers
->get('entity_reference_1')
->getOption('fields');
$fields['type']['exclude'] = FALSE;
$view->displayHandlers
->get('entity_reference_1')
->setOption('fields', $fields);
$view->save();
// Prepare the selection settings key needed by the entity reference
// autocomplete route.
$target_type = 'node';
$selection_handler = 'views';
$selection_settings = $this->handlerSettings;
$selection_settings_key = Crypt::hmacBase64(serialize($selection_settings) . $target_type . $selection_handler, Settings::getHashSalt());
\Drupal::keyValue('entity_autocomplete')->set($selection_settings_key, $selection_settings);
$result = Json::decode($this->drupalGet('entity_reference_autocomplete/' . $target_type . '/' . $selection_handler . '/' . $selection_settings_key, [
'query' => [
'q' => 't',
],
]));
$expected = [
0 => [
'value' => $this->nodes[1]
->bundle() . ': ' . $this->nodes[1]
->label() . ' (' . $this->nodes[1]
->id() . ')',
'label' => '<span class="views-field views-field-type"><span class="field-content">' . $this->nodes[1]
->bundle() . '</span></span>: <span class="views-field views-field-title"><span class="field-content">' . Html::escape($this->nodes[1]
->label()) . '</span></span>',
],
1 => [
'value' => $this->nodes[2]
->bundle() . ': ' . $this->nodes[2]
->label() . ' (' . $this->nodes[2]
->id() . ')',
'label' => '<span class="views-field views-field-type"><span class="field-content">' . $this->nodes[2]
->bundle() . '</span></span>: <span class="views-field views-field-title"><span class="field-content">' . Html::escape($this->nodes[2]
->label()) . '</span></span>',
],
2 => [
'value' => $this->nodes[3]
->bundle() . ': ' . $this->nodes[3]
->label() . ' (' . $this->nodes[3]
->id() . ')',
'label' => '<span class="views-field views-field-type"><span class="field-content">' . $this->nodes[3]
->bundle() . '</span></span>: <span class="views-field views-field-title"><span class="field-content">' . Html::escape($this->nodes[3]
->label()) . '</span></span>',
],
];
$this->assertEquals($expected, $result, 'The autocomplete result of the Views entity reference selection handler contains the proper output.');
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
SelectionTest | Tests entity reference selection handler. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.