public function FilterTest::testCreateFromQueryParameterNested in Drupal 9
Same name and namespace in other branches
- 8 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 343
Class
- FilterTest
- @coversDefaultClass \Drupal\jsonapi\Query\Filter @group jsonapi @group jsonapi_query
Namespace
Drupal\Tests\jsonapi\Kernel\QueryCode
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());
}