import importlib.util import os import tempfile from pathlib import Path ROOT = Path(__file__).resolve().parents[1] os.environ.setdefault("REPOSITORY_URL", "https://repo.example.test") spec = importlib.util.spec_from_file_location("dashboard_app", ROOT / "dashboard/app.py") app = importlib.util.module_from_spec(spec) spec.loader.exec_module(app) def test_package_filename_parsing(): assert app.parse_package(Path("rustbox_0.0.5-1_amd64.deb"), "deb") == ("rustbox", "0.0.5-1", "amd64") assert app.parse_package(Path("rustbox-0.0.5-1.x86_64.rpm"), "rpm") == ("rustbox", "0.0.5-1", "x86_64") def test_catalog_uses_three_linux_distribution_families(): with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) rel = root / "releases/one" (rel / "apt/pool/main/r/rustbox").mkdir(parents=True) (rel / "rpm/x86_64").mkdir(parents=True) (rel / "suse/x86_64").mkdir(parents=True) common = "app_version=0.0.5\npackage_release=1\nbuilt_at=2026-10-30T12:00:00Z\nsource_commit=abc\npackaging_revision=1\n" (rel / "DEBIAN-BUILD-INFO.txt").write_text(common + "package_family=debian\n") (rel / "RHEL-BUILD-INFO.txt").write_text(common + "package_family=rhel\n") (rel / "SUSE-BUILD-INFO.txt").write_text(common + "package_family=suse\n") (rel / "apt/pool/main/r/rustbox/rustbox_0.0.5-1_amd64.deb").write_bytes(b"deb") (rel / "rpm/x86_64/rustbox-0.0.5-1.x86_64.rpm").write_bytes(b"rpm") (rel / "suse/x86_64/rustbox-0.0.5-1.x86_64.rpm").write_bytes(b"rpm") (root / "current").symlink_to("releases/one") catalog = app.generate_catalog(root) assert catalog["ready"] is True assert set(catalog["builds"]) == {"debian", "rhel", "suse"} assert catalog["builds"]["debian"]["app_version"] == "0.0.5" assert {pkg["channel"] for pkg in catalog["packages"]} == {"debian", "rhel", "suse"} assert len(catalog["packages"]) == 3 def test_dashboard_is_english_text_only(): html = (ROOT / "dashboard/web/index.html").read_text() js = (ROOT / "dashboard/web/app.js").read_text() assert 'lang="en"' in html assert "brand-icon" not in html assert "favicon" not in html assert "status-dot" not in html for label in ("Overview", "Packages", "Installation", "Repositories", "Debian / Ubuntu", "RHEL / AlmaLinux / Rocky Linux", "SUSE / openSUSE"): assert label in html or label in js