public function FieldApiDataTest::testEntityFieldFilter in Drupal 9
Same name and namespace in other branches
- 8 core/modules/views/tests/src/Kernel/FieldApiDataTest.php \Drupal\Tests\views\Kernel\FieldApiDataTest::testEntityFieldFilter()
Tests filtering entries with different translatability.
File
- core/
modules/ views/ tests/ src/ Kernel/ FieldApiDataTest.php, line 203
Class
- FieldApiDataTest
- Tests the Field Views data.
Namespace
Drupal\Tests\views\KernelCode
public function testEntityFieldFilter() {
NodeType::create([
'type' => 'bundle1',
])
->save();
NodeType::create([
'type' => 'bundle2',
])
->save();
// Create some example content.
ConfigurableLanguage::create([
'id' => 'es',
])
->save();
ConfigurableLanguage::create([
'id' => 'fr',
])
->save();
ContentLanguageSettings::loadByEntityTypeBundle('node', 'bundle1')
->setDefaultLangcode('es')
->setLanguageAlterable(TRUE)
->save();
ContentLanguageSettings::loadByEntityTypeBundle('node', 'bundle2')
->setDefaultLangcode('es')
->setLanguageAlterable(TRUE)
->save();
$field_translation_map = [
1 => [
'bundle1' => TRUE,
'bundle2' => TRUE,
],
2 => [
'bundle1' => FALSE,
'bundle2' => FALSE,
],
3 => [
'bundle1' => TRUE,
'bundle2' => FALSE,
],
];
for ($i = 1; $i < 4; $i++) {
$field_name = "field_name_{$i}";
FieldStorageConfig::create([
'field_name' => $field_name,
'entity_type' => 'node',
'type' => 'string',
])
->save();
foreach ([
'bundle1',
'bundle2',
] as $bundle) {
FieldConfig::create([
'field_name' => $field_name,
'entity_type' => 'node',
'bundle' => $bundle,
'translatable' => $field_translation_map[$i][$bundle],
])
->save();
}
}
$node1 = Node::create([
'title' => 'Test title bundle1',
'type' => 'bundle1',
'langcode' => 'es',
'field_name_1' => 'field name 1: es',
'field_name_2' => 'field name 2: es',
'field_name_3' => 'field name 3: es',
]);
$node1
->save();
/** @var \Drupal\node\NodeInterface $translation */
$node1
->addTranslation('fr', [
'title' => $node1->title->value,
'field_name_1' => 'field name 1: fr',
'field_name_3' => 'field name 3: fr',
])
->save();
$node2 = Node::create([
'title' => 'Test title bundle2',
'type' => 'bundle2',
'langcode' => 'es',
'field_name_1' => 'field name 1: es',
'field_name_2' => 'field name 2: es',
'field_name_3' => 'field name 3: es',
]);
$node2
->save();
$node2
->addTranslation('fr', [
'title' => $node2->title->value,
'field_name_1' => 'field name 1: fr',
])
->save();
$map = [
'nid' => 'nid',
'langcode' => 'langcode',
];
$view = Views::getView('test_field_config_translation_filter');
// Filter by 'field name 1: es'.
$view
->setDisplay('embed_1');
$this
->executeView($view);
$expected = [
[
'nid' => $node1
->id(),
'langcode' => 'es',
],
[
'nid' => $node2
->id(),
'langcode' => 'es',
],
];
$this
->assertIdenticalResultset($view, $expected, $map);
$view
->destroy();
// Filter by 'field name 1: fr'.
$view
->setDisplay('embed_2');
$this
->executeView($view);
$expected = [
[
'nid' => $node1
->id(),
'langcode' => 'fr',
],
[
'nid' => $node2
->id(),
'langcode' => 'fr',
],
];
$this
->assertIdenticalResultset($view, $expected, $map);
$view
->destroy();
// Filter by 'field name 2: es'.
$view
->setDisplay('embed_3');
$this
->executeView($view);
$expected = [
[
'nid' => $node1
->id(),
'langcode' => 'es',
],
[
'nid' => $node1
->id(),
'langcode' => 'fr',
],
[
'nid' => $node2
->id(),
'langcode' => 'es',
],
[
'nid' => $node2
->id(),
'langcode' => 'fr',
],
];
$this
->assertIdenticalResultset($view, $expected, $map);
$view
->destroy();
// Filter by 'field name 2: fr', which doesn't exist.
$view
->setDisplay('embed_4');
$this
->executeView($view);
$expected = [];
$this
->assertIdenticalResultset($view, $expected, $map);
$view
->destroy();
// Filter by 'field name 3: es'.
$view
->setDisplay('embed_5');
$this
->executeView($view);
$expected = [
[
'nid' => $node1
->id(),
'langcode' => 'es',
],
[
'nid' => $node2
->id(),
'langcode' => 'es',
],
// Why is this one returned?
[
'nid' => $node2
->id(),
'langcode' => 'fr',
],
];
$this
->assertIdenticalResultset($view, $expected, $map);
$view
->destroy();
// Filter by 'field name 3: fr'.
$view
->setDisplay('embed_6');
$this
->executeView($view);
$expected = [
[
'nid' => $node1
->id(),
'langcode' => 'fr',
],
];
$this
->assertIdenticalResultset($view, $expected, $map);
$view
->destroy();
}