You are here

public function FilterTest::testCreateFromQueryParameterNested in Drupal 9

Same name and namespace in other branches
  1. 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\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());
}