packages/sql-faker/tests/Unit/MySql/Generation/Rewrite/ConstraintEnforcementRuleTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\MySql\Generation\Rewrite;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use SqlFaker\Generation\Token\ProductionOccurrence;
11use SqlFaker\Generation\Token\TerminalOccurrence;
12use SqlFaker\Generation\Token\TerminalSequence;
13use SqlFaker\MySql\Generation\Rewrite\ConstraintEnforcementRule;
14
15#[CoversClass(ConstraintEnforcementRule::class)]
16#[UsesClass(ProductionOccurrence::class)]
17#[UsesClass(TerminalOccurrence::class)]
18#[UsesClass(TerminalSequence::class)]
19final class ConstraintEnforcementRuleTest extends TestCase
20{
21 public function testRewriteRemovesOnlyMisplacedColumnEnforcement(): void
22 {
23 $misplaced = new TerminalOccurrence('ENFORCED_SYM', 2, [0, 1], ['column_attribute', 'constraint_enforcement']);
24 $table = new TerminalOccurrence('ENFORCED_SYM', 4, [3], ['constraint_enforcement']);
25 $check = new TerminalOccurrence(')', 6, [5], ['check_constraint']);
26 $valid = new TerminalOccurrence('ENFORCED_SYM', 9, [7, 8], ['column_attribute', 'constraint_enforcement']);
27 $input = new TerminalSequence([$misplaced, $table, $check, $valid], [], [], [
28 new ProductionOccurrence(1, 0, 'constraint_enforcement', 0), new ProductionOccurrence(3, null, 'constraint_enforcement', 0),
29 new ProductionOccurrence(8, 7, 'constraint_enforcement', 0),
30 ]);
31 self::assertSame([$table, $check, $valid], (new ConstraintEnforcementRule())->rewrite($input)->terminals);
32 }
33}
34