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