Files
2026-10-30 13:20:21 +01:00

54 lines
2.6 KiB
Python

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_with_utility_svg_icons_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
assert "theme-icon-sun" in html
assert "theme-icon-moon" in html
assert "refresh-icon" in html
assert html.count("<svg") == 3
for label in ("Overview", "Packages", "Installation", "Repositories", "Debian / Ubuntu", "RHEL / AlmaLinux / Rocky Linux", "SUSE / openSUSE"):
assert label in html or label in js