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