packages/sql-fixture/tests/Unit/Platform/Sqlite/Schema/TableSyntaxTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Platform\Sqlite\Schema;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFixture\Platform\Sqlite\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