From a338c2852568cc889348344532aac00b37cd21dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Bia=C5=82czak?= Date: Wed, 16 Sep 2026 14:42:49 +0200 Subject: [PATCH] IBX-6773: Adapted IdSortClauseQueryBuilderTest to DBAL 4 --- .../Bookmark/IdSortClauseQueryBuilderTest.php | 95 +++++-------------- 1 file changed, 26 insertions(+), 69 deletions(-) diff --git a/tests/lib/Persistence/Legacy/Filter/SortClauseQueryBuilder/Location/Bookmark/IdSortClauseQueryBuilderTest.php b/tests/lib/Persistence/Legacy/Filter/SortClauseQueryBuilder/Location/Bookmark/IdSortClauseQueryBuilderTest.php index f31817a6d2..2d5a8f5589 100644 --- a/tests/lib/Persistence/Legacy/Filter/SortClauseQueryBuilder/Location/Bookmark/IdSortClauseQueryBuilderTest.php +++ b/tests/lib/Persistence/Legacy/Filter/SortClauseQueryBuilder/Location/Bookmark/IdSortClauseQueryBuilderTest.php @@ -8,6 +8,7 @@ namespace Ibexa\Tests\Core\Persistence\Legacy\Filter\SortClauseQueryBuilder\Location\Bookmark; +use Doctrine\DBAL\Connection; use Doctrine\DBAL\DriverManager; use Ibexa\Contracts\Core\Persistence\Filter\Doctrine\FilteringQueryBuilder; use Ibexa\Contracts\Core\Repository\PermissionResolver; @@ -45,33 +46,22 @@ public function testBuildQueryInLocationFilteringContext(): void $builder->buildQuery($queryBuilder, $sortClause); - self::assertContains( - sprintf('%s.id AS %s', self::BOOKMARK_ALIAS, self::SORT_ALIAS), - $queryBuilder->getQueryPart('select') - ); - - $joins = $queryBuilder->getQueryPart('join'); - self::assertArrayHasKey('location', $joins); - - $bookmarkJoin = $this->findJoinByAlias($joins['location'], self::BOOKMARK_ALIAS); - self::assertNotNull($bookmarkJoin, 'Bookmarks table was not joined against "location"'); - self::assertSame(DoctrineDatabase::TABLE_BOOKMARKS, $bookmarkJoin['joinTable']); self::assertSame( sprintf( - '(location.node_id = %1$s.node_id) AND (%1$s.user_id = :dcValue1)', - self::BOOKMARK_ALIAS + 'SELECT location.node_id, %1$s.id AS %2$s' + . ' FROM %3$s location' + . ' INNER JOIN %4$s content ON content.id = location.contentobject_id' + . ' LEFT JOIN %5$s %1$s ON (location.node_id = %1$s.node_id) AND (%1$s.user_id = :dcValue1)' + . ' ORDER BY %2$s DESC', + self::BOOKMARK_ALIAS, + self::SORT_ALIAS, + LocationGateway::CONTENT_TREE_TABLE, + self::CONTENT_ITEM_TABLE, + DoctrineDatabase::TABLE_BOOKMARKS ), - (string)$bookmarkJoin['joinCondition'] + $queryBuilder->getSQL() ); self::assertSame(['dcValue1' => self::CURRENT_USER_ID], $queryBuilder->getParameters()); - - self::assertSame( - [self::SORT_ALIAS . ' DESC'], - $queryBuilder->getQueryPart('orderBy') - ); - - // the whole join graph has to resolve - self::assertStringContainsString(self::BOOKMARK_ALIAS, $queryBuilder->getSQL()); } /** @@ -84,40 +74,23 @@ public function testBuildQueryInContentFilteringContext(): void $this->createBuilder()->buildQuery($queryBuilder, new Id(Query::SORT_DESC)); - $joins = $queryBuilder->getQueryPart('join'); - - // main Location joined off the "content" FROM table... - self::assertArrayHasKey('content', $joins); - self::assertSame(LocationGateway::CONTENT_TREE_TABLE, $joins['content'][0]['joinTable']); - self::assertSame(self::CONTENT_LOCATION_ALIAS, $joins['content'][0]['joinAlias']); - - // ...and bookmarks joined off that alias, not off a hardcoded "location" - self::assertArrayHasKey(self::CONTENT_LOCATION_ALIAS, $joins); - self::assertSame( - DoctrineDatabase::TABLE_BOOKMARKS, - $joins[self::CONTENT_LOCATION_ALIAS][0]['joinTable'] - ); - self::assertSame( - self::BOOKMARK_ALIAS, - $joins[self::CONTENT_LOCATION_ALIAS][0]['joinAlias'] - ); self::assertSame( sprintf( - '(%1$s.node_id = %2$s.node_id) AND (%2$s.user_id = :dcValue1)', + 'SELECT content.id, %1$s.id AS %2$s' + . ' FROM %3$s content' + . ' INNER JOIN %4$s %5$s ON (content.id = %5$s.contentobject_id) AND (%5$s.node_id = %5$s.main_node_id)' + . ' LEFT JOIN %6$s %1$s ON (%5$s.node_id = %1$s.node_id) AND (%1$s.user_id = :dcValue1)' + . ' ORDER BY %2$s DESC', + self::BOOKMARK_ALIAS, + self::SORT_ALIAS, + self::CONTENT_ITEM_TABLE, + LocationGateway::CONTENT_TREE_TABLE, self::CONTENT_LOCATION_ALIAS, - self::BOOKMARK_ALIAS + DoctrineDatabase::TABLE_BOOKMARKS ), - (string)$joins[self::CONTENT_LOCATION_ALIAS][0]['joinCondition'] + $queryBuilder->getSQL() ); - - self::assertArrayNotHasKey('location', $joins); - - self::assertSame( - [self::SORT_ALIAS . ' DESC'], - $queryBuilder->getQueryPart('orderBy') - ); - - self::assertStringContainsString(self::BOOKMARK_ALIAS, $queryBuilder->getSQL()); + self::assertSame(['dcValue1' => self::CURRENT_USER_ID], $queryBuilder->getParameters()); } /** @@ -145,22 +118,6 @@ public function testBuildQueryStandaloneProducesResolvableSql( self::assertStringContainsString('ORDER BY ' . self::SORT_ALIAS . ' ASC', $sql); } - /** - * @param array> $joins - * - * @return array|null - */ - private function findJoinByAlias(array $joins, string $joinAlias): ?array - { - foreach ($joins as $join) { - if ($join['joinAlias'] === $joinAlias) { - return $join; - } - } - - return null; - } - private function createBuilder(): IdSortClauseQueryBuilder { $userReference = $this->createMock(UserReference::class); @@ -208,8 +165,8 @@ private function createContentFilteringQueryBuilder(): FilteringQueryBuilder return $queryBuilder; } - private function createInMemoryConnection(): \Doctrine\DBAL\Connection + private function createInMemoryConnection(): Connection { - return DriverManager::getConnection(['url' => 'sqlite:///:memory:']); + return DriverManager::getConnection(['driver' => 'pdo_sqlite', 'memory' => true]); } }