function EntityReferenceSelectionSortTest::testSort

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()
  3. 11.x 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.');
}

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