packages/sql-fixture/tests/Unit/Platform/PostgreSql/Schema/TableSyntaxTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Platform\PostgreSql\Schema;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFixture\Platform\PostgreSql\Schema\TableSyntax as Subject;
10
11#[CoversClass(Subject::class)]
12final class TableSyntaxTest extends TestCase
13{
14 public function testNormalizeSqlRemovesCommentsAndWhitespace(): void
15 {
16 self::assertSame('CREATE TABLE a (id INT)', (new Subject())->normalizeSql('-- comment
17 CREATE TABLE a /* note */ (id INT)'));
18 }
19
20 public function testExtractTableNameReadsQualifiedNames(): void
21 {
22 self::assertSame('users', (new Subject())->extractTableName('CREATE TABLE IF NOT EXISTS "app"."users" (id INT)'));
23 self::assertNull((new Subject())->extractTableName('SELECT 1'));
24 }
25
26 public function testExtractColumnsBlockPreservesNestedTypeArguments(): void
27 {
28 self::assertSame('amount NUMERIC(8, 2), id INT', (new Subject())->extractColumnsBlock('CREATE TABLE a (amount NUMERIC(8, 2), id INT)'));
29 self::assertNull((new Subject())->extractColumnsBlock('SELECT 1'));
30 }
31
32 public function testExtractTablePrimaryKeysKeepsCompositeOrder(): void
33 {
34 self::assertSame(['tenant', 'id'], (new Subject())->extractTablePrimaryKeys('tenant INT, id INT, PRIMARY KEY ("tenant", "id")'));
35 self::assertSame([], (new Subject())->extractTablePrimaryKeys('id INT'));
36 }
37}
38