packages/sql-catalog/tests/Unit/Cli/UsageTextTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Cli;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use SqlCatalog\Cli\UsageText;
11use SqlCatalog\Core\Extension\ExtensionRegistry;
12use SqlCatalog\Core\Reporter\ReporterRegistry;
13use SqlCatalog\Extension\Doctrine\DoctrineExtension;
14use SqlCatalog\Extension\Laravel\LaravelExtension;
15use SqlCatalog\Extension\Mysqli\MysqliExtension;
16use SqlCatalog\Extension\Pdo\PdoExtension;
17use SqlCatalog\Reporter\Html\HtmlReporter;
18use SqlCatalog\Reporter\Json\JsonReporter;
19use SqlCatalog\Reporter\Text\TextReporter;
20
21#[CoversClass(UsageText::class)]
22#[UsesClass(DoctrineExtension::class)]
23#[UsesClass(ExtensionRegistry::class)]
24#[UsesClass(LaravelExtension::class)]
25#[UsesClass(MysqliExtension::class)]
26#[UsesClass(PdoExtension::class)]
27#[UsesClass(HtmlReporter::class)]
28#[UsesClass(JsonReporter::class)]
29#[UsesClass(ReporterRegistry::class)]
30#[UsesClass(TextReporter::class)]
31#[UsesClass(\SqlCatalog\Extension\WordPress\WordPressExtension::class)]
32final class UsageTextTest extends TestCase
33{
34 public function testHelpDocumentsEveryOptionTheParserTakes(): void
35 {
36 $help = (new UsageText(\SqlCatalog\Facade\Builtins::extensions(), \SqlCatalog\Facade\Builtins::reporters()))->help();
37 self::assertStringContainsString('--output', $help);
38 self::assertStringContainsString('--reporter', $help);
39 self::assertStringContainsString('--extension', $help);
40 self::assertStringContainsString('--namespace', $help);
41 self::assertStringContainsString('--method', $help);
42 self::assertStringContainsString('--kind', $help);
43 self::assertStringContainsString('--table', $help);
44 self::assertStringContainsString('--sink', $help);
45 self::assertStringContainsString('--severity', $help);
46 self::assertStringContainsString('--fail-on', $help);
47 self::assertStringContainsString('--exclude', $help);
48 self::assertStringContainsString('--root', $help);
49 }
50
51 public function testExtensionsAreListedWithTheirDescriptions(): void
52 {
53 $listed = (new UsageText(\SqlCatalog\Facade\Builtins::extensions(), \SqlCatalog\Facade\Builtins::reporters()))->extensions();
54 self::assertStringContainsString('pdo', $listed);
55 self::assertStringContainsString('laravel', $listed);
56 }
57
58 public function testReportersAreListedWithTheirDescriptions(): void
59 {
60 $listed = (new UsageText(\SqlCatalog\Facade\Builtins::extensions(), \SqlCatalog\Facade\Builtins::reporters()))->reporters();
61 self::assertStringContainsString('json', $listed);
62 self::assertStringContainsString('html', $listed);
63 }
64}
65