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