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