originalPublicPath = public_path(); $this->temporaryPublicPath = null; }); afterEach(function (): void { app()->usePublicPath($this->originalPublicPath); if (is_string($this->temporaryPublicPath) && File::isDirectory($this->temporaryPublicPath)) { File::deleteDirectory($this->temporaryPublicPath); } }); function useTemporaryPublicPath(): string { $path = sys_get_temp_dir().'/panel-theme-asset-'.bin2hex(random_bytes(8)); File::ensureDirectoryExists($path); app()->usePublicPath($path); test()->temporaryPublicPath = $path; return $path; } it('returns null when no build manifest or hot file exists', function (): void { useTemporaryPublicPath(); expect(PanelThemeAsset::resolve('resources/css/filament/admin/theme.css'))->toBeNull(); }); it('resolves compiled theme assets from the build manifest', function (): void { $publicPath = useTemporaryPublicPath(); File::ensureDirectoryExists($publicPath.'/build'); File::put( $publicPath.'/build/manifest.json', json_encode([ 'resources/css/filament/admin/theme.css' => [ 'file' => 'assets/theme-test.css', ], ], JSON_THROW_ON_ERROR), ); expect(PanelThemeAsset::resolve('resources/css/filament/admin/theme.css')) ->toEndWith('/build/assets/theme-test.css'); });