packages/sql-fixture/tests/Unit/Fixture/Exception/UnknownPlanColumnExceptionTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Fixture\Exception;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use SqlFixture\Plan\ColumnRef;
11use SqlFixture\Schema\ColumnDefinition;
12use SqlFixture\Schema\TableSchema;
13
14#[CoversClass(\SqlFixture\Fixture\Exception\UnknownPlanColumnException::class)]
15#[UsesClass(\SqlFixture\Fixture\PlanSchemaException::class)]
16#[UsesClass(ColumnRef::class)]
17#[UsesClass(ColumnDefinition::class)]
18#[UsesClass(TableSchema::class)]
19#[UsesClass(\SqlFixture\Fixture\Exception\GeneratedColumnReferenceException::class)]
20#[UsesClass(\SqlFixture\Fixture\Exception\MissingRelationValueException::class)]
21final class UnknownPlanColumnExceptionTest extends TestCase
22{
23 public function testDescribesUnknownPlanColumn(): void
24 {
25 $schema = new TableSchema('order', [
26 'id' => new ColumnDefinition('id', 'INT'),
27 'status' => new ColumnDefinition('status', 'VARCHAR'),
28 ]);
29 $exception = new \SqlFixture\Fixture\Exception\UnknownPlanColumnException(ColumnRef::of('order', 'idd'), 'idd', $schema);
30
31
32 $message = $exception->getMessage();
33
34 self::assertSame(
35 'The plan links order.idd, but order has no column idd. Its columns are: id, status.',
36 $message
37 );
38 self::assertEquals(ColumnRef::of('order', 'idd'), $exception->reference);
39 self::assertSame('idd', $exception->column);
40 self::assertSame($schema, $exception->schema);
41 }
42}
43