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