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