packages/sql-catalog/tests/Unit/Facade/AnalysisOptionsTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Facade;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use SqlCatalog\Core\Analysis\EvaluationBudget;
11use SqlCatalog\Facade\AnalysisOptions;
12
13#[CoversClass(AnalysisOptions::class)]
14#[UsesClass(EvaluationBudget::class)]
15final class AnalysisOptionsTest extends TestCase
16{
17 public function testTheDefaultsRecogniseTheDriverExtensions(): void
18 {
19 self::assertSame(['pdo', 'mysqli'], (new AnalysisOptions())->extensions);
20 }
21
22 public function testWithExtensionsKeepsTheBudget(): void
23 {
24 $budget = new EvaluationBudget(10);
25 $options = (new AnalysisOptions(['pdo'], $budget))->withExtensions(['laravel']);
26 self::assertSame(['laravel'], $options->extensions);
27 self::assertSame($budget, $options->budget);
28 }
29
30 public function testBudgetFallsBackToTheDefault(): void
31 {
32 self::assertSame(20000, (new AnalysisOptions())->budget()->maxSteps);
33 }
34
35 public function testBudgetIsTheOneThatWasGiven(): void
36 {
37 $budget = new EvaluationBudget(10);
38 self::assertSame($budget, (new AnalysisOptions(['pdo'], $budget))->budget());
39 }
40
41 public function testWithExtensionsPreservesTheConfiguredDialect(): void
42 {
43 self::assertSame('pgsql', (new AnalysisOptions(dialect: 'pgsql'))->withExtensions(['laravel'])->dialect);
44 }
45
46
47}
48