packages/ztd-query-postgres/tests/Unit/Rewrite/Cte/PrefixMergeTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\Cte;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9
10#[CoversClass(\ZtdQuery\Platform\Postgres\Rewrite\Cte\PrefixMerge::class)]
11#[\PHPUnit\Framework\Attributes\UsesClass(\ZtdQuery\Platform\Postgres\Sql\PgSqlLexerProfile::class)]
12final class PrefixMergeTest extends TestCase
13{
14    public function testPrependRewrittenRetainsRecursiveAndLeadingCommentSyntax(): void
15    {
16        $original = '/* lead */ WITH RECURSIVE chain AS (SELECT 1) SELECT * FROM chain';
17        $offset = strpos($original, 'SELECT *');
18        self::assertNotFalse($offset);
19        $merged = (new \ZtdQuery\Platform\Postgres\Rewrite\Cte\PrefixMerge())->prependRewritten($original, $offset, 'shadow AS (SELECT 2)', 'SELECT * FROM shadow');
20        self::assertSame("/* lead */ WITH RECURSIVE shadow AS (SELECT 2),\nchain AS (SELECT 1)\nSELECT * FROM shadow", $merged);
21    }
22}
23