packages/ztd-query-postgres/tests/Unit/Sql/Returning/ProjectionItemTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Sql\Returning;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Sql\Returning\ProjectionItem::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
12final class ProjectionItemTest extends TestCase
13{
14    public function testParseItem(): void
15    {
16        self::assertSame(['source' => 'id', 'output' => 'user_id'], (new \ZtdQuery\Platform\Postgres\Sql\Returning\ProjectionItem())->parseItem('users.id AS user_id'));
17    }
18
19    public function testAsIndex(): void
20    {
21        $sql = 'id AS user_id';
22        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
23        $tokens = $stream->significantTokens();
24
25        self::assertSame(1, (new \ZtdQuery\Platform\Postgres\Sql\Returning\ProjectionItem())->asIndex($tokens));
26    }
27
28    public function testIsIdentifierPath(): void
29    {
30        $sql = 'users.id';
31        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
32        $tokens = $stream->significantTokens();
33
34        self::assertSame(true, (new \ZtdQuery\Platform\Postgres\Sql\Returning\ProjectionItem())->isIdentifierPath($tokens));
35    }
36
37    public function testIdentifierName(): void
38    {
39        $sql = '"UserId"';
40        $stream = \ZtdQuery\Sql\SqlTokenStream::tokenize($sql, \ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::create());
41        $tokens = $stream->significantTokens();
42
43        self::assertSame('UserId', (new \ZtdQuery\Platform\Postgres\Sql\Returning\ProjectionItem())->identifierName($tokens[0]));
44    }
45}
46