packages/sql-fixture/tests/Unit/Fixture/Validation/OverrideValidatorTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Fixture\Validation;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFixture\Fixture\Validation\OverrideValidator as Subject;
10use SqlFixture\Schema\ColumnDefinition;
11use SqlFixture\Schema\TableSchema;
12
13#[CoversClass(Subject::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\InvalidOverrideException::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(ColumnDefinition::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(TableSchema::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Fixture\Exception\UnknownOverrideColumnException::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Fixture\Exception\NullOverrideException::class)]
19#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Fixture\Exception\GeneratedColumnOverrideException::class)]
20final class OverrideValidatorTest extends TestCase
21{
22    public function testAssertOverridesFitSchemaAcceptsNullableAndExplicitKeys(): void
23    {
24        $schema = new TableSchema('a', ['id' => new ColumnDefinition('id', 'INT', autoIncrement: true), 'name' => new ColumnDefinition('name', 'TEXT', nullable: true)], ['id']);
25        (new Subject())->assertOverridesFitSchema($schema, ['id' => 10, 'name' => null]);
26        self::assertSame(['id', 'name'], array_keys($schema->columns));
27    }
28}
29