packages/sql-fixture/tests/Unit/Schema/ColumnDefinitionTest.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\TestCase;
10use SqlFixture\Schema\ColumnDefinition;
11
12#[CoversClass(ColumnDefinition::class)]
13final class ColumnDefinitionTest extends TestCase
14{
15 #[Test]
16 public function testStoresDefaults(): void
17 {
18 $column = new ColumnDefinition('id', 'INT');
19 self::assertSame('id', $column->name);
20 self::assertSame('INT', $column->type);
21 self::assertNull($column->length);
22 self::assertNull($column->precision);
23 self::assertNull($column->scale);
24 self::assertTrue($column->nullable);
25 self::assertFalse($column->unsigned);
26 self::assertNull($column->default);
27 self::assertFalse($column->autoIncrement);
28 self::assertFalse($column->generated);
29 self::assertNull($column->enumValues);
30 }
31
32 #[Test]
33 public function testStoresAllParameters(): void
34 {
35 $column = new ColumnDefinition(
36 name: 'price',
37 type: 'DECIMAL',
38 length: null,
39 precision: 10,
40 scale: 2,
41 nullable: false,
42 unsigned: true,
43 default: '0.00',
44 autoIncrement: false,
45 generated: false,
46 enumValues: null,
47 );
48 self::assertSame('price', $column->name);
49 self::assertSame('DECIMAL', $column->type);
50 self::assertSame(10, $column->precision);
51 self::assertSame(2, $column->scale);
52 self::assertFalse($column->nullable);
53 self::assertTrue($column->unsigned);
54 self::assertSame('0.00', $column->default);
55 }
56
57 #[Test]
58 public function testStoresEnumValues(): void
59 {
60 $column = new ColumnDefinition(
61 name: 'status',
62 type: 'ENUM',
63 enumValues: ['active', 'inactive', 'pending'],
64 );
65 self::assertSame(['active', 'inactive', 'pending'], $column->enumValues);
66 }
67
68 #[Test]
69 public function testStoresAutoIncrement(): void
70 {
71 $column = new ColumnDefinition(
72 name: 'id',
73 type: 'INT',
74 autoIncrement: true,
75 );
76 self::assertTrue($column->autoIncrement);
77 }
78
79 #[Test]
80 public function testStoresGenerated(): void
81 {
82 $column = new ColumnDefinition(
83 name: 'full_name',
84 type: 'VARCHAR',
85 generated: true,
86 );
87 self::assertTrue($column->generated);
88 }
89}
90