You are here

public function EntityReferenceRelationshipTest::testGroupByWithEmptyRelationships in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/field/tests/src/Kernel/EntityReference/Views/EntityReferenceRelationshipTest.php \Drupal\Tests\field\Kernel\EntityReference\Views\EntityReferenceRelationshipTest::testGroupByWithEmptyRelationships()

Tests group by with optional and empty relationship.

File

core/modules/field/tests/src/Kernel/EntityReference/Views/EntityReferenceRelationshipTest.php, line 294

Class

EntityReferenceRelationshipTest
Tests entity reference relationship data.

Namespace

Drupal\Tests\field\Kernel\EntityReference\Views

Code

public function testGroupByWithEmptyRelationships() {
  $entities = [];

  // Create 4 entities with name1 and 3 entities with name2.
  for ($i = 1; $i <= 4; $i++) {
    $entity = [
      'name' => 'name' . $i,
    ];
    $entity = EntityTest::create($entity);
    $entities[] = $entity;
    $entity
      ->save();
  }
  $entity = EntityTestMul::create([
    'name' => 'name1',
  ]);
  $entity->field_data_test_unlimited = [
    [
      'target_id' => $entities[0]
        ->id(),
    ],
    [
      'target_id' => $entities[1]
        ->id(),
    ],
    [
      'target_id' => $entities[2]
        ->id(),
    ],
  ];
  $entity
    ->save();
  $entity = EntityTestMul::create([
    'name' => 'name2',
  ]);
  $entity->field_data_test_unlimited = [
    [
      'target_id' => $entities[0]
        ->id(),
    ],
    [
      'target_id' => $entities[1]
        ->id(),
    ],
  ];
  $entity
    ->save();
  $entity = EntityTestMul::create([
    'name' => 'name3',
  ]);
  $entity->field_data_test_unlimited->target_id = $entities[0]
    ->id();
  $entity
    ->save();
  $view = Views::getView('test_entity_reference_group_by_empty_relationships');
  $this
    ->executeView($view);
  $this
    ->assertCount(4, $view->result);

  // First three results should contain a reference from EntityTestMul.
  $this
    ->assertNotEmpty($view
    ->getStyle()
    ->getField(0, 'name_2'));
  $this
    ->assertNotEmpty($view
    ->getStyle()
    ->getField(1, 'name_2'));
  $this
    ->assertNotEmpty($view
    ->getStyle()
    ->getField(2, 'name_2'));

  // Fourth result has no reference from EntityTestMul hence the output for
  // should be empty.
  $this
    ->assertEquals('', $view
    ->getStyle()
    ->getField(3, 'name_2'));
  $fields = $view->field;

  // Check getValue for reference with a value. The first 3 rows reference
  // EntityTestMul, so have value 'name1'.
  $this
    ->assertEquals('name1', $fields['name_2']
    ->getValue($view->result[0]));
  $this
    ->assertEquals('name1', $fields['name_2']
    ->getValue($view->result[1]));
  $this
    ->assertEquals('name1', $fields['name_2']
    ->getValue($view->result[2]));

  // Ensure getValue works on empty references.
  $this
    ->assertNull($fields['name_2']
    ->getValue($view->result[3]));
}