packages/sql-catalog/tests/Unit/Core/Catalog/FindingRuleTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Core\Catalog;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\DataProvider;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlCatalog\Core\Catalog\FindingRule;
12use SqlCatalog\Core\Catalog\Severity;
13
14#[CoversClass(FindingRule::class)]
15#[UsesClass(Severity::class)]
16final class FindingRuleTest extends TestCase
17{
18 #[DataProvider('providerSeverity')]
19 public function testSeverity(FindingRule $rule, Severity $expected): void
20 {
21 self::assertSame($expected, $rule->severity());
22 }
23
24 /**
25 * @return list<array{FindingRule, Severity}>
26 */
27 public static function providerSeverity(): array
28 {
29 return [
30 [FindingRule::ExternalInput, Severity::High],
31 [FindingRule::DynamicSql, Severity::Medium],
32 [FindingRule::PlaceholderCountMismatch, Severity::Medium],
33 [FindingRule::UnresolvedSql, Severity::Low],
34 ];
35 }
36
37 public function testDescribeExplainsEveryRule(): void
38 {
39 $descriptions = array_map(
40 static fn (FindingRule $rule): string => $rule->describe(),
41 FindingRule::cases(),
42 );
43 self::assertCount(count(FindingRule::cases()), array_unique($descriptions));
44 self::assertStringContainsString('external input', FindingRule::ExternalInput->describe());
45 }
46}
47