packages/ztd-query-sqlite/tests/Unit/Rewrite/Cte/CteDependenciesTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\Cte;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Platform\Sqlite\Rewrite\Cte\CteDependencies;
11
12#[CoversClass(CteDependencies::class)]
13#[UsesClass(\ZtdQuery\Platform\Sqlite\Rewrite\Cte\CteHeaderParser::class)]
14#[UsesClass(\ZtdQuery\Platform\Sqlite\Rewrite\Cte\CteReferences::class)]
15#[UsesClass(\ZtdQuery\Platform\Sqlite\Sql\SqliteLexerProfile::class)]
16final class CteDependenciesTest extends TestCase
17{
18 public function testRequiredKeepsTransitiveDependenciesInDeclarationOrder(): void
19 {
20 $tables = ['users' => 'users AS (SELECT 1 AS id)', 'view_users' => 'view_users AS (SELECT * FROM users)', 'orders' => 'orders AS (SELECT 2 AS id)'];
21 self::assertSame(['users' => $tables['users'], 'view_users' => $tables['view_users']], (new CteDependencies())->required('SELECT * FROM view_users', $tables));
22 }
23
24 public function testRequiredRespectsUserDeclarationsAndUnusedFixtures(): void
25 {
26 $tables = ['users' => 'users AS (SELECT 1 AS id)'];
27 self::assertSame([], (new CteDependencies())->required('WITH Users AS (SELECT 2 AS id) SELECT * FROM Users', $tables));
28 self::assertSame([], (new CteDependencies())->required('SELECT 1', $tables));
29 }
30
31}
32