packages/sql-fixture/tests/Unit/Schema/TableSchemaTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Schema;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\Test;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlFixture\Schema\ColumnDefinition;
12use SqlFixture\Schema\TableSchema;
13
14#[CoversClass(TableSchema::class)]
15#[UsesClass(ColumnDefinition::class)]
16final class TableSchemaTest extends TestCase
17{
18 #[Test]
19 public function testGetColumn(): void
20 {
21 $schema = new TableSchema('users', ['id' => new ColumnDefinition('id', 'INT'), 'name' => new ColumnDefinition('name', 'VARCHAR', length: 255), 'email' => new ColumnDefinition('email', 'VARCHAR', length: 255)], ['id']);
22 $column = $schema->getColumn('id');
23 self::assertNotNull($column);
24 self::assertSame('id', $column->name);
25 self::assertSame('INT', $column->type);
26 }
27
28 #[Test]
29 public function testGetColumnReturnsNullForNonExistent(): void
30 {
31 self::assertNull((new TableSchema('users', ['id' => new ColumnDefinition('id', 'INT'), 'name' => new ColumnDefinition('name', 'VARCHAR', length: 255), 'email' => new ColumnDefinition('email', 'VARCHAR', length: 255)], ['id']))->getColumn('nonexistent'));
32 }
33
34 #[Test]
35 public function testHasColumn(): void
36 {
37 $schema = new TableSchema('users', ['id' => new ColumnDefinition('id', 'INT'), 'name' => new ColumnDefinition('name', 'VARCHAR', length: 255), 'email' => new ColumnDefinition('email', 'VARCHAR', length: 255)], ['id']);
38 self::assertTrue($schema->hasColumn('id'));
39 self::assertTrue($schema->hasColumn('name'));
40 self::assertFalse($schema->hasColumn('nonexistent'));
41 }
42
43 #[Test]
44 public function testGetColumnNames(): void
45 {
46 $names = (new TableSchema('users', ['id' => new ColumnDefinition('id', 'INT'), 'name' => new ColumnDefinition('name', 'VARCHAR', length: 255), 'email' => new ColumnDefinition('email', 'VARCHAR', length: 255)], ['id']))->getColumnNames();
47 self::assertSame(['id', 'name', 'email'], $names);
48 }
49
50 #[Test]
51 public function testProperties(): void
52 {
53 $schema = new TableSchema('users', ['id' => new ColumnDefinition('id', 'INT'), 'name' => new ColumnDefinition('name', 'VARCHAR', length: 255), 'email' => new ColumnDefinition('email', 'VARCHAR', length: 255)], ['id']);
54 self::assertSame('users', $schema->tableName);
55 self::assertCount(3, $schema->columns);
56 self::assertSame(['id'], $schema->primaryKeys);
57 }
58}
59