packages/sql-catalog/tests/Unit/Reporter/Html/TableNameTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Reporter\Html;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\DataProvider;
9use PHPUnit\Framework\TestCase;
10use SqlCatalog\Reporter\Html\TableName;
11
12#[CoversClass(TableName::class)]
13final class TableNameTest extends TestCase
14{
15 /**
16 * @return list<array{string, string|null}>
17 */
18 public static function providerSchema(): array
19 {
20 return [['app.users', 'app'], ['users', null], ['{$}.users', null], ['.users', null]];
21 }
22
23 #[DataProvider('providerSchema')]
24 public function testSchemaIsTheQualifierWhenOneIsKnown(string $name, ?string $expected): void
25 {
26 self::assertSame($expected, (new TableName($name))->schema());
27 }
28
29 public function testLocalDropsTheSchema(): void
30 {
31 self::assertSame('users', (new TableName('app.users'))->local());
32 self::assertSame('users', (new TableName('users'))->local());
33 }
34
35 public function testHasGapSaysWhetherPartOfTheNameIsUnknown(): void
36 {
37 self::assertTrue((new TableName('{$}posts'))->hasGap());
38 self::assertFalse((new TableName('posts'))->hasGap());
39 }
40
41 public function testIsUnknownOnlyWhenNothingOfTheNameIsKnown(): void
42 {
43 self::assertTrue((new TableName('{$}'))->isUnknown());
44 self::assertFalse((new TableName('{$}posts'))->isUnknown());
45 }
46
47 public function testLabelExplainsAWhollyUnknownName(): void
48 {
49 self::assertSame('table not pinned down', (new TableName('{$}'))->label());
50 self::assertSame('{$}posts', (new TableName('{$}posts'))->label());
51 }
52}
53