packages/ztd-query-sqlite/tests/Unit/Rewrite/GeneratedColumn/SqliteGeneratedColumnProjectorTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\GeneratedColumn;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Platform\Sqlite\Rewrite\GeneratedColumn\SqliteGeneratedColumnProjector;
11
12#[CoversClass(SqliteGeneratedColumnProjector::class)]
13#[UsesClass(\ZtdQuery\Platform\Sqlite\Sql\SqliteIdentifierQuoter::class)]
14final class SqliteGeneratedColumnProjectorTest extends TestCase
15{
16 public function testReturnsSourceUnchangedWithoutGeneratedExpressions(): void
17 {
18 self::assertSame(
19 'SELECT 1 AS "id"',
20 (new SqliteGeneratedColumnProjector())->project('SELECT 1 AS "id"', ['id'], []),
21 );
22 }
23
24 public function testProjectsGeneratedExpressionsOverBaseRows(): void
25 {
26 self::assertSame(
27 'SELECT "__ztd_generated_source"."qty" AS "qty", '
28 . '"__ztd_generated_source"."unit_price" AS "unit_price", '
29 . '(qty * unit_price) AS "total" '
30 . 'FROM (SELECT 5 AS "qty", 10 AS "unit_price", NULL AS "total") AS "__ztd_generated_source"',
31 (new SqliteGeneratedColumnProjector())->project(
32 'SELECT 5 AS "qty", 10 AS "unit_price", NULL AS "total"',
33 ['qty', 'unit_price', 'total'],
34 ['total' => '(qty * unit_price)'],
35 ),
36 );
37 }
38}
39