You are here

public function EntityReferenceSelectionSortTest::testSort in Drupal 8

Same name and namespace in other branches
  1. 9 core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionSortTest.php \Drupal\KernelTests\Core\Entity\EntityReferenceSelection\EntityReferenceSelectionSortTest::testSort()
  2. 10 core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionSortTest.php \Drupal\KernelTests\Core\Entity\EntityReferenceSelection\EntityReferenceSelectionSortTest::testSort()

Assert sorting by field and property.

File

core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionSortTest.php, line 43

Class

EntityReferenceSelectionSortTest
Tests sorting referenced items.

Namespace

Drupal\KernelTests\Core\Entity\EntityReferenceSelection

Code

public function testSort() {

  // Add text field to entity, to sort by.
  FieldStorageConfig::create([
    'field_name' => 'field_text',
    'entity_type' => 'node',
    'type' => 'text',
    'entity_types' => [
      'node',
    ],
  ])
    ->save();
  FieldConfig::create([
    'label' => 'Text Field',
    'field_name' => 'field_text',
    'entity_type' => 'node',
    'bundle' => 'article',
    'settings' => [],
    'required' => FALSE,
  ])
    ->save();

  // Build a set of test data.
  $node_values = [
    'published1' => [
      'type' => 'article',
      'status' => 1,
      'title' => 'Node published1 (<&>)',
      'uid' => 1,
      'field_text' => [
        [
          'value' => 1,
        ],
      ],
    ],
    'published2' => [
      'type' => 'article',
      'status' => 1,
      'title' => 'Node published2 (<&>)',
      'uid' => 1,
      'field_text' => [
        [
          'value' => 2,
        ],
      ],
    ],
  ];
  $nodes = [];
  $node_labels = [];
  foreach ($node_values as $key => $values) {
    $node = Node::create($values);
    $node
      ->save();
    $nodes[$key] = $node;
    $node_labels[$key] = Html::escape($node
      ->label());
  }
  $selection_options = [
    'target_type' => 'node',
    'handler' => 'default',
    'target_bundles' => NULL,
    // Add sorting.
    'sort' => [
      'field' => 'field_text.value',
      'direction' => 'DESC',
    ],
  ];
  $handler = $this->container
    ->get('plugin.manager.entity_reference_selection')
    ->getInstance($selection_options);

  // Not only assert the result, but make sure the keys are sorted as
  // expected.
  $result = $handler
    ->getReferenceableEntities();
  $expected_result = [
    $nodes['published2']
      ->id() => $node_labels['published2'],
    $nodes['published1']
      ->id() => $node_labels['published1'],
  ];
  $this
    ->assertIdentical($result['article'], $expected_result, 'Query sorted by field returned expected values.');

  // Assert sort by base field.
  $selection_options['sort'] = [
    'field' => 'nid',
    'direction' => 'ASC',
  ];
  $handler = $this->container
    ->get('plugin.manager.entity_reference_selection')
    ->getInstance($selection_options);
  $result = $handler
    ->getReferenceableEntities();
  $expected_result = [
    $nodes['published1']
      ->id() => $node_labels['published1'],
    $nodes['published2']
      ->id() => $node_labels['published2'],
  ];
  $this
    ->assertIdentical($result['article'], $expected_result, 'Query sorted by property returned expected values.');
}