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