50 lines
2.4 KiB
Python
50 lines
2.4 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_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
|