FilterEntityReferenceWebTest.php
Namespace
Drupal\Tests\views_ui\FunctionalFile
-
core/
modules/ views_ui/ tests/ src/ Functional/ FilterEntityReferenceWebTest.php
View source
<?php
declare (strict_types=1);
namespace Drupal\Tests\views_ui\Functional;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Tests\views_ui\Traits\FilterEntityReferenceTrait;
/**
* Tests the entity reference filter UI.
*
* @group views_ui
* @see \Drupal\views\Plugin\views\filter\EntityReference
*/
class FilterEntityReferenceWebTest extends UITestBase {
use FilterEntityReferenceTrait;
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
public static $testViews = [
'test_filter_entity_reference',
];
/**
* {@inheritdoc}
*/
protected static $modules = [
'node',
'views_ui',
'block',
'taxonomy',
'views_test_entity_reference',
];
/**
* {@inheritdoc}
*/
protected function setUp($import_test_views = TRUE, $modules = []) : void {
parent::setUp($import_test_views);
$this->setUpEntityTypes();
}
/**
* Tests the filter UI.
*/
public function testFilterUi() : void {
$this->drupalGet('admin/structure/views/nojs/handler/test_filter_entity_reference/default/filter/field_test_target_id');
$options = $this->getUiOptions();
// Should be sorted by title ASC.
uasort($this->targetEntities, function (EntityInterface $a, EntityInterface $b) {
return strnatcasecmp($a->getTitle(), $b->getTitle());
});
$i = 0;
foreach ($this->targetEntities as $id => $entity) {
$message = (string) new FormattableMarkup('Expected target entity label found for option :option', [
':option' => $i,
]);
$this->assertEquals($options[$i]['label'], $entity->label(), $message);
$i++;
}
// Change the sort field and direction.
$this->drupalGet('admin/structure/views/nojs/handler-extra/test_filter_entity_reference/default/filter/field_test_target_id');
$edit = [
'options[reference_default:node][sort][field]' => 'nid',
'options[reference_default:node][sort][direction]' => 'DESC',
];
$this->submitForm($edit, 'Apply');
$this->drupalGet('admin/structure/views/nojs/handler/test_filter_entity_reference/default/filter/field_test_target_id');
// Items should now be in reverse id order.
krsort($this->targetEntities);
$options = $this->getUiOptions();
$i = 0;
foreach ($this->targetEntities as $entity) {
$message = (string) new FormattableMarkup('Expected target entity label found for option :option', [
':option' => $i,
]);
$this->assertEquals($options[$i]['label'], $entity->label(), $message);
$i++;
}
// Change bundle types.
$this->drupalGet('admin/structure/views/nojs/handler-extra/test_filter_entity_reference/default/filter/field_test_target_id');
$edit = [
"options[reference_default:node][target_bundles][{$this->hostBundle->id()}]" => TRUE,
"options[reference_default:node][target_bundles][{$this->targetBundle->id()}]" => TRUE,
];
$this->submitForm($edit, 'Apply');
$this->drupalGet('admin/structure/views/nojs/handler/test_filter_entity_reference/default/filter/field_test_target_id');
$options = $this->getUiOptions();
$i = 0;
foreach ($this->hostEntities + $this->targetEntities as $entity) {
$message = (string) new FormattableMarkup('Expected target entity label found for option :option', [
':option' => $i,
]);
$this->assertEquals($options[$i]['label'], $entity->label(), $message);
$i++;
}
}
/**
* Tests the filter UI for config reference.
*/
public function testFilterConfigUi() : void {
$this->drupalGet('admin/structure/views/nojs/handler/test_filter_entity_reference/default/filter/field_test_config_target_id');
$options = $this->getUiOptions();
// We should expect the content types defined as options.
$this->assertEquals([
'article',
'page',
], array_column($options, 'label'));
}
/**
* Helper method to parse options from the UI.
*
* @return array
* Array of keyed arrays containing the id and label of each option.
*/
protected function getUiOptions() : array {
/** @var \Behat\Mink\Element\TraversableElement[] $result */
$result = $this->xpath('//select[@name="options[value][]"]/option');
$this->assertNotEmpty($result, 'Options found');
$options = [];
foreach ($result as $option) {
$options[] = [
'id' => (int) $option->getValue(),
'label' => $option->getText(),
];
}
return $options;
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
FilterEntityReferenceWebTest | Tests the entity reference filter UI. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.