packages/sql-fixture/tests/Unit/Platform/PostgreSql/Schema/CatalogDdlTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Platform\PostgreSql\Schema;
6
7use PDO;
8use PHPUnit\Framework\Attributes\CoversClass;
9use PHPUnit\Framework\TestCase;
10use SqlFixture\Platform\PostgreSql\Schema\CatalogDdl as Subject;
11
12#[CoversClass(Subject::class)]
13#[\PHPUnit\Framework\Attributes\Medium]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\PostgreSql\Schema\CatalogColumn::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\PostgreSql\Schema\CatalogQuery::class)]
16final class CatalogDdlTest extends TestCase
17{
18 public function testReconstructCreateTableIncludesDatabaseConstraints(): void
19 {
20 $pdo = new PDO(
21 (string) getenv('SQL_FIXTURE_PGSQL_DSN'),
22 (string) getenv('SQL_FIXTURE_PGSQL_USER'),
23 (string) getenv('SQL_FIXTURE_PGSQL_PASSWORD'),
24 [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false],
25 );
26 $pdo->exec('CREATE TEMPORARY TABLE users (id INTEGER PRIMARY KEY, name VARCHAR(30) NOT NULL DEFAULT \'ready\')');
27 $statement = $pdo->query('SELECT pg_my_temp_schema()::regnamespace::text');
28 self::assertNotFalse($statement);
29 $namespace = $statement->fetchColumn();
30 self::assertIsString($namespace);
31 $sql = (new Subject())->reconstructCreateTable($pdo, $namespace . '.users');
32 self::assertNotNull($sql);
33 self::assertStringContainsString('"name" VARCHAR(30) NOT NULL', $sql);
34 self::assertStringContainsString("DEFAULT 'ready'::character varying", $sql);
35 self::assertStringContainsString('PRIMARY KEY ("id")', $sql);
36 }
37}
38