packages/sql-fixture/tests/Unit/Platform/MySql/Schema/CreateTableQueryTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Platform\MySql\Schema;
6
7use PDO;
8use PHPUnit\Framework\Attributes\CoversClass;
9use PHPUnit\Framework\TestCase;
10use SqlFixture\Platform\MySql\Schema\CreateTableQuery as Subject;
11
12#[CoversClass(Subject::class)]
13#[\PHPUnit\Framework\Attributes\Medium]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\MySql\Schema\IdentifierQuoter::class)]
15final class CreateTableQueryTest extends TestCase
16{
17    public function testFetchCreateTableSqlReadsLiveTemporaryTable(): void
18    {
19        $pdo = new PDO(
20            (string) getenv('SQL_FIXTURE_MYSQL_DSN'),
21            (string) getenv('SQL_FIXTURE_MYSQL_USER'),
22            (string) getenv('SQL_FIXTURE_MYSQL_PASSWORD'),
23            [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false],
24        );
25        $pdo->exec('CREATE TEMPORARY TABLE users (id INT PRIMARY KEY, name VARCHAR(30) NOT NULL)');
26        $sql = (new Subject())->fetchCreateTableSql($pdo, 'users');
27        self::assertStringContainsString('`name` varchar(30) NOT NULL', $sql);
28        self::assertStringContainsString('PRIMARY KEY (`id`)', $sql);
29    }
30}
31