packages/sql-catalog/tests/Unit/Reporter/Html/ReportAssetsTest.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\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlCatalog\Reporter\Html\PageShell;
12use SqlCatalog\Reporter\Html\ReportAssets;
13
14#[CoversClass(ReportAssets::class)]
15#[UsesClass(PageShell::class)]
16final class ReportAssetsTest extends TestCase
17{
18    public function testAllCarriesTheDesignItsNoticeAndTheReportsOwnFiles(): void
19    {
20        self::assertSame(
21            ['assets/document-design-v1.0.0.css', 'assets/document-design-v1.0.0.js', 'assets/document-design-LICENSE.txt', 'assets/report.js'],
22            array_keys((new ReportAssets())->all()),
23        );
24    }
25
26    /**
27     * @return list<array{string}>
28     */
29    public static function providerAsset(): array
30    {
31        return [['assets/document-design-v1.0.0.css'], ['assets/document-design-v1.0.0.js'], ['assets/document-design-LICENSE.txt'], ['assets/report.js']];
32    }
33
34    #[DataProvider('providerAsset')]
35    public function testAllReadsEveryFileItNames(string $name): void
36    {
37        self::assertNotSame('', (new ReportAssets())->all()[$name]);
38    }
39
40    public function testTheDesignIsTheReleaseTheNoticeNamesAndNothingElse(): void
41    {
42        $notice = (new ReportAssets())->read('document-design-LICENSE.txt');
43
44        self::assertStringContainsString('doc-ui v1.0.0', $notice);
45        self::assertStringContainsString('SHA-256: ' . hash('sha256', (new ReportAssets())->read('document-design-v1.0.0.css')), $notice);
46        self::assertStringContainsString('SHA-256: ' . hash('sha256', (new ReportAssets())->read('document-design-v1.0.0.js')), $notice);
47        self::assertStringContainsString('MIT License', $notice);
48    }
49
50    public function testReadCarriesThePackagesOwnResource(): void
51    {
52        self::assertStringContainsString('window.ddSearch', (new ReportAssets())->read('report.js'));
53    }
54
55    public function testReadIsEmptyForSomethingThePackageDoesNotCarry(): void
56    {
57        self::assertSame('', (new ReportAssets())->read('nothing-here.css'));
58    }
59}
60