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