packages/ztd-query-mysql/tests/Unit/Rewrite/GeneratedColumn/MySqlGeneratedColumnProjectorTest.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\MySql\Rewrite\GeneratedColumn\MySqlGeneratedColumnProjector;
11
12#[CoversClass(MySqlGeneratedColumnProjector::class)]
13#[UsesClass(\ZtdQuery\Platform\MySql\Sql\MySqlIdentifierQuoter::class)]
14final class MySqlGeneratedColumnProjectorTest extends TestCase
15{
16 public function testReturnsSourceUnchangedWithoutGeneratedExpressions(): void
17 {
18 self::assertSame(
19 'SELECT 1 AS `id`',
20 (new MySqlGeneratedColumnProjector())->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 MySqlGeneratedColumnProjector())->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