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