packages/sql-fixture/tests/Unit/Plan/Exception/UnsupportedManyToManyExceptionTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Plan\Exception;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10
11#[CoversClass(\SqlFixture\Plan\Exception\UnsupportedManyToManyException::class)]
12#[UsesClass(\SqlFixture\Plan\PlanSyntaxException::class)]
13#[UsesClass(\SqlFixture\Plan\Exception\EmptyPlanException::class)]
14#[UsesClass(\SqlFixture\Plan\Exception\EmptyTableNameException::class)]
15#[UsesClass(\SqlFixture\Plan\Exception\MissingEndpointColumnsException::class)]
16#[UsesClass(\SqlFixture\Plan\Exception\InvalidTableNameException::class)]
17#[UsesClass(\SqlFixture\Plan\Exception\UnbalancedBracketsException::class)]
18#[UsesClass(\SqlFixture\Plan\Exception\UnexpectedPlanTokenException::class)]
19#[UsesClass(\SqlFixture\Plan\Exception\CompositeArityMismatchException::class)]
20final class UnsupportedManyToManyExceptionTest extends TestCase
21{
22 public function testDescribesUnsupportedManyToMany(): void
23 {
24 $exception = new \SqlFixture\Plan\Exception\UnsupportedManyToManyException('order.id <> product.id');
25 $message = $exception->getMessage();
26
27 self::assertSame(
28 'The <> operator is not supported, because a fixture has to put rows in the '
29 . 'junction table and so must name it. Write the two halves instead, for example '
30 . '"order.id < order_detail.order_id, order_detail.product_id > product.id". '
31 . 'Plan: order.id <> product.id',
32 $message
33 );
34 self::assertSame('order.id <> product.id', $exception->plan);
35 }
36}
37