From b30603e8d4dbf512f9afa23082cc764dcb44ae37 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Thu, 14 Mar 2024 10:13:44 +0100 Subject: [PATCH] fix: Fix searching tickets by contract if using subquery --- .../QueryBuilder/TicketQueryBuilder.php | 22 +++++++++++++++---- .../QueryBuilder/TicketQueryBuilderTest.php | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/SearchEngine/QueryBuilder/TicketQueryBuilder.php b/src/SearchEngine/QueryBuilder/TicketQueryBuilder.php index ea0b3d17..53d7aa68 100644 --- a/src/SearchEngine/QueryBuilder/TicketQueryBuilder.php +++ b/src/SearchEngine/QueryBuilder/TicketQueryBuilder.php @@ -412,10 +412,24 @@ private function registerParameter(mixed $value): string private function mustIncludeContracts(array $queries): bool { foreach ($queries as $query) { - foreach ($query->getConditions() as $condition) { - if ($condition->isQualifierCondition() && $condition->getQualifier() === 'contract') { - return true; - } + if ($this->includesQualifier($query, 'contract')) { + return true; + } + } + + return false; + } + + private function includesQualifier(Query $query, string $qualifier): bool + { + foreach ($query->getConditions() as $condition) { + if ($condition->isQualifierCondition() && $condition->getQualifier() === $qualifier) { + return true; + } elseif ( + $condition->isQueryCondition() && + $this->includesQualifier($condition->getQuery(), $qualifier) + ) { + return true; } } diff --git a/tests/SearchEngine/QueryBuilder/TicketQueryBuilderTest.php b/tests/SearchEngine/QueryBuilder/TicketQueryBuilderTest.php index faecfc53..5fa507a2 100644 --- a/tests/SearchEngine/QueryBuilder/TicketQueryBuilderTest.php +++ b/tests/SearchEngine/QueryBuilder/TicketQueryBuilderTest.php @@ -52,7 +52,7 @@ public function testCreate(): void public function testCreateWithContract(): void { - $query = SearchEngine\Query::fromString('contract:#1'); + $query = SearchEngine\Query::fromString('(contract:#1)'); $queryBuilder = $this->ticketQueryBuilder->create([$query]);