function FieldApiDataTest::testEntityFieldFilter

Same name and namespace in other branches
  1. 9 core/modules/views/tests/src/Kernel/FieldApiDataTest.php \Drupal\Tests\views\Kernel\FieldApiDataTest::testEntityFieldFilter()
  2. 8.9.x core/modules/views/tests/src/Kernel/FieldApiDataTest.php \Drupal\Tests\views\Kernel\FieldApiDataTest::testEntityFieldFilter()
  3. 10 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 215

Class

FieldApiDataTest
Tests the Field Views data.

Namespace

Drupal\Tests\views\Kernel

Code

public function testEntityFieldFilter() : void {
  NodeType::create([
    'type' => 'bundle1',
    'name' => 'Bundle One',
  ])->save();
  NodeType::create([
    'type' => 'bundle2',
    'name' => 'Bundle Two',
  ])->save();
  // Create some example content.
  ConfigurableLanguage::createFromLangcode('es')->save();
  ConfigurableLanguage::createFromLangcode('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();
  $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();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.