From 99dc8a225b7e9ea568f5f5eec1a480232a35a222 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Mon, 24 Mar 2025 17:29:47 +0000 Subject: [PATCH 1/5] Fix operator code --- src/Plugin/GraphQL/EntityQueryBase.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Plugin/GraphQL/EntityQueryBase.php b/src/Plugin/GraphQL/EntityQueryBase.php index 549853b..5edfa94 100644 --- a/src/Plugin/GraphQL/EntityQueryBase.php +++ b/src/Plugin/GraphQL/EntityQueryBase.php @@ -228,6 +228,9 @@ class EntityQueryBase extends DataProducerPluginBase implements ContainerFactory $operator = !empty($condition['operator']) ? $condition['operator'] : NULL; $language = !empty($condition['language']) ? $condition['language'] : NULL; + // Map GraphQL operator to proper ConditionInterface operator. + $operator = static::OPERATOR_MAPPING[$operator] ?? NULL; + // We need at least a value or an operator. if (empty($operator) && empty($value)) { throw new UserError(sprintf("Missing value and operator in filter for '%s'.", $field)); @@ -261,11 +264,6 @@ class EntityQueryBase extends DataProducerPluginBase implements ContainerFactory $operator = is_array($value) ? 'IN' : '='; } - // Map GraphQL operator to proper ConditionInterface operator. - if (isset(static::OPERATOR_MAPPING[$operator])) { - $operator = static::OPERATOR_MAPPING[$operator]; - } - // Add the condition for the current field. $group->condition($field, $value, $operator, $language); } -- GitLab From aff8eed3e153780e09439cd43741718c220ce789 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Mon, 24 Mar 2025 19:47:20 +0000 Subject: [PATCH 2/5] Add test coverage --- .../EntityQueryExtensionTest.php | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/src/Kernel/SchemaExtension/EntityQueryExtensionTest.php b/tests/src/Kernel/SchemaExtension/EntityQueryExtensionTest.php index 86aec23..5cfe10c 100644 --- a/tests/src/Kernel/SchemaExtension/EntityQueryExtensionTest.php +++ b/tests/src/Kernel/SchemaExtension/EntityQueryExtensionTest.php @@ -194,6 +194,55 @@ class EntityQueryExtensionTest extends CoreComposableKernelTestBase { $this->assertEquals($node->label(), $data['label']); } + /** + * Resolves an entity by type with EQUAL operator. + */ + public function testEntityByType(): void { + NodeType::create(['type' => 'article'])->save(); + + $user = $this->setUpCurrentUser(); + $role = $this->createRole(['bypass node access', 'administer taxonomy']); + $user->addRole($role); + $this->setCurrentUser($user); + + $node = Node::create([ + 'type' => 'article', + 'title' => 'Test', + ]); + $node->save(); + + $server = $this->getCoreComposableServerBuilder() + ->enableEntityType('node', [], ['article']) + ->enableExtension('entity_query') + ->enableBaseEntityField('label') + ->enableValueFields() + ->createServer(); + + $query = <<<GQL + query entityQuery { + entityQuery( + entityType: NODE + filter: {conditions: [{field: "type", value: "article", operator: EQUAL}], groups: [], conjunction: AND} + limit: 3 + offset: 0 + ) { + items { + label + } + total + } + } + GQL; + + $result = $server->executeOperation(OperationParams::create([ + 'query' => $query, + 'variables' => [ + ], + ])); + $data = $result->data['entityQuery']; + $this->assertEquals($node->label(), $data['items'][0]['label']); + } + /** * Performs access checks. */ -- GitLab From 22ff6bc536217e904e165c1f581d84a7f568b377 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Tue, 25 Mar 2025 09:10:53 +0000 Subject: [PATCH 3/5] Fix PHPCS --- .../src/Kernel/SchemaExtension/EntityQueryExtensionTest.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/src/Kernel/SchemaExtension/EntityQueryExtensionTest.php b/tests/src/Kernel/SchemaExtension/EntityQueryExtensionTest.php index 5cfe10c..047917a 100644 --- a/tests/src/Kernel/SchemaExtension/EntityQueryExtensionTest.php +++ b/tests/src/Kernel/SchemaExtension/EntityQueryExtensionTest.php @@ -234,11 +234,7 @@ class EntityQueryExtensionTest extends CoreComposableKernelTestBase { } GQL; - $result = $server->executeOperation(OperationParams::create([ - 'query' => $query, - 'variables' => [ - ], - ])); + $result = $server->executeOperation(OperationParams::create(['query' => $query])); $data = $result->data['entityQuery']; $this->assertEquals($node->label(), $data['items'][0]['label']); } -- GitLab From f0bb077b7a4db05ecf4ae33b1c7fed7999128cdd Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Thu, 27 Mar 2025 13:16:39 +0000 Subject: [PATCH 4/5] Retest -- GitLab From 820f7a8e943df64892c378d5bdc873292205ab33 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Fri, 28 Mar 2025 08:58:21 +0000 Subject: [PATCH 5/5] Retest -- GitLab