packages/ztd-query-sqlite/tests/Unit/Schema/View/SqliteViewDefinitionParserTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Schema\View;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Platform\Sqlite\Schema\View\SqliteViewDefinitionParser;
11use ZtdQuery\Platform\Sqlite\Sql\Relation\SqliteSelectRelationParser;
12
13#[CoversClass(SqliteViewDefinitionParser::class)]
14#[UsesClass(\ZtdQuery\Platform\Sqlite\Sql\Relation\RelationSourceParser::class)]
15#[UsesClass(\ZtdQuery\Platform\Sqlite\Sql\SqliteLexerProfile::class)]
16#[UsesClass(SqliteSelectRelationParser::class)]
17final class SqliteViewDefinitionParserTest extends TestCase
18{
19 public function testFromQueryParsesAQueryUsingSqliteRelationRules(): void
20 {
21 $definition = (new SqliteViewDefinitionParser())->fromQuery(
22 " SELECT u.id FROM main.[users] u JOIN roles r ON r.id = u.role_id; \n",
23 );
24
25 self::assertSame('SELECT u.id FROM main.[users] u JOIN roles r ON r.id = u.role_id', $definition->query);
26 self::assertSame(['users', 'roles'], $definition->dependencies);
27 }
28
29 public function testFromCreateStatementExtractsTheQueryFromASqliteCreateViewStatement(): void
30 {
31 $definition = (new SqliteViewDefinitionParser())->fromCreateStatement(
32 'CREATE TEMP VIEW [active_users] AS SELECT * FROM [users] WHERE active = 1;',
33 );
34
35 self::assertNotNull($definition);
36 self::assertSame('SELECT * FROM [users] WHERE active = 1', $definition->query);
37 self::assertNull((new SqliteViewDefinitionParser())->fromCreateStatement('CREATE VIEW invalid AS '));
38 }
39}
40