function FilterTest::testCreateFromQueryParameterNested

Same name and namespace in other branches
  1. 8.9.x core/modules/jsonapi/tests/src/Kernel/Query/FilterTest.php \Drupal\Tests\jsonapi\Kernel\Query\FilterTest::testCreateFromQueryParameterNested()
  2. 10 core/modules/jsonapi/tests/src/Kernel/Query/FilterTest.php \Drupal\Tests\jsonapi\Kernel\Query\FilterTest::testCreateFromQueryParameterNested()
  3. 11.x core/modules/jsonapi/tests/src/Kernel/Query/FilterTest.php \Drupal\Tests\jsonapi\Kernel\Query\FilterTest::testCreateFromQueryParameterNested()

@covers ::createFromQueryParameter

File

core/modules/jsonapi/tests/src/Kernel/Query/FilterTest.php, line 348

Class

FilterTest
@coversDefaultClass <a href="/api/drupal/core%21modules%21jsonapi%21src%21Query%21Filter.php/class/Filter/9" title="Gathers information about the filter parameter." class="local">\Drupal\jsonapi\Query\Filter</a> @group jsonapi @group jsonapi_query

Namespace

Drupal\Tests\jsonapi\Kernel\Query

Code

public function testCreateFromQueryParameterNested() {
    $parameter = [
        'or-group' => [
            'group' => [
                'conjunction' => 'OR',
            ],
        ],
        'nested-or-group' => [
            'group' => [
                'conjunction' => 'OR',
                'memberOf' => 'or-group',
            ],
        ],
        'nested-and-group' => [
            'group' => [
                'conjunction' => 'AND',
                'memberOf' => 'or-group',
            ],
        ],
        'condition-0' => [
            'condition' => [
                'path' => 'field0',
                'value' => 'value0',
                'memberOf' => 'nested-or-group',
            ],
        ],
        'condition-1' => [
            'condition' => [
                'path' => 'field1',
                'value' => 'value1',
                'memberOf' => 'nested-or-group',
            ],
        ],
        'condition-2' => [
            'condition' => [
                'path' => 'field2',
                'value' => 'value2',
                'memberOf' => 'nested-and-group',
            ],
        ],
        'condition-3' => [
            'condition' => [
                'path' => 'field3',
                'value' => 'value3',
                'memberOf' => 'nested-and-group',
            ],
        ],
    ];
    $resource_type = new ResourceType('foo', 'bar', NULL);
    $filter = Filter::createFromQueryParameter($parameter, $resource_type, $this->getFieldResolverMock($resource_type));
    $root = $filter->root();
    // Make sure the implicit root group was added.
    $this->assertEquals('AND', $root->conjunction());
    // Ensure the or-group and the and-group were added correctly.
    $members = $root->members();
    // Ensure the OR group was added.
    $or_group = $members[0];
    $this->assertEquals('OR', $or_group->conjunction());
    $or_group_members = $or_group->members();
    // Make sure the nested OR group was added with the right conditions.
    $nested_or_group = $or_group_members[0];
    $this->assertEquals('OR', $nested_or_group->conjunction());
    $nested_or_group_members = $nested_or_group->members();
    $this->assertEquals('field0', $nested_or_group_members[0]->field());
    $this->assertEquals('field1', $nested_or_group_members[1]->field());
    // Make sure the nested AND group was added with the right conditions.
    $nested_and_group = $or_group_members[1];
    $this->assertEquals('AND', $nested_and_group->conjunction());
    $nested_and_group_members = $nested_and_group->members();
    $this->assertEquals('field2', $nested_and_group_members[0]->field());
    $this->assertEquals('field3', $nested_and_group_members[1]->field());
}

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