packages/ztd-query-postgres/tests/Unit/Schema/View/PgSqlViewDefinitionParserTest.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\Postgres\Schema\View\PgSqlViewDefinitionParser;
11use ZtdQuery\Platform\Postgres\Sql\Relation\PgSqlSelectRelationParser;
12
13#[CoversClass(PgSqlViewDefinitionParser::class)]
14#[UsesClass(PgSqlSelectRelationParser::class)]
15#[UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
16#[UsesClass(\ZtdQuery\Platform\Postgres\Sql\Relation\FromClause::class)]
17#[UsesClass(\ZtdQuery\Platform\Postgres\Sql\Relation\RelationReference::class)]
18final class PgSqlViewDefinitionParserTest extends TestCase
19{
20 public function testFromQueryParsesAQueryUsingPostgreSqlRelationRules(): void
21 {
22 $definition = (new PgSqlViewDefinitionParser())->fromQuery(
23 " SELECT u.id FROM public.\"users\" u JOIN roles r ON r.id = u.role_id; \n",
24 );
25
26 self::assertSame('SELECT u.id FROM public."users" u JOIN roles r ON r.id = u.role_id', $definition->query);
27 self::assertSame(['users', 'roles'], $definition->dependencies);
28 }
29
30 public function testFromCreateStatementExtractsTheQueryFromAPostgreSqlCreateViewStatement(): void
31 {
32 $definition = (new PgSqlViewDefinitionParser())->fromCreateStatement(
33 'CREATE OR REPLACE VIEW "active_users" AS SELECT * FROM "users" WHERE active = TRUE;',
34 );
35
36 self::assertNotNull($definition);
37 self::assertSame('SELECT * FROM "users" WHERE active = TRUE', $definition->query);
38 self::assertNull((new PgSqlViewDefinitionParser())->fromCreateStatement('CREATE VIEW invalid AS '));
39 }
40}
41