packages/sql-fixture/tests/Unit/Provider/DdlDirectoryTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Provider;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFixture\Provider\DdlDirectory as Subject;
10
11#[CoversClass(Subject::class)]
12#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\Sqlite\SqliteSchemaParser::class)]
13#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Provider\DdlFile::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\ColumnDefinition::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\SchemaParseException::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\SchemaParserInterface::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\TableSchema::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\Sqlite\Schema\ColumnParser::class)]
19#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\Sqlite\Schema\DefaultExpression::class)]
20#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\Sqlite\Schema\DefinitionList::class)]
21#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\Sqlite\Schema\TableSyntax::class)]
22#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\Sqlite\Schema\TypeDeclaration::class)]
23#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\DefinitionSegments::class)]
24#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\TypeShape::class)]
25#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\Exception\InvalidSqlException::class)]
26#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\Exception\ExpectedCreateTableException::class)]
27#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\Exception\MissingColumnDefinitionsException::class)]
28final class DdlDirectoryTest extends TestCase
29{
30 public function testLoadSchemasUsesOnlySqlFiles(): void
31 {
32 $file = tempnam(sys_get_temp_dir(), 'sql-fixture-ddl-');
33 self::assertNotFalse($file);
34 unlink($file);
35 mkdir($file);
36 try {
37 file_put_contents($file . '/users.sql', 'CREATE TABLE users (id INT, PRIMARY KEY (id))');
38 file_put_contents($file . '/ignored.txt', 'CREATE TABLE ignored (id INT)');
39 $schemas = (new Subject())->loadSchemas($file, new \SqlFixture\Platform\Sqlite\SqliteSchemaParser());
40 self::assertSame(['users'], array_keys($schemas));
41 self::assertSame(['id'], $schemas['users']->primaryKeys);
42 } finally {
43 unlink($file . '/users.sql');
44 unlink($file . '/ignored.txt');
45 rmdir($file);
46 }
47 }
48}
49