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