from pathlib import Path def test_timeline_has_intermediate_groups_not_too_coarse(): js = Path("web/static/progress.js").read_text(encoding="utf-8") groups = js.split("const COMPACT_TIMELINE_GROUPS=[", 1)[1].split("];", 1)[0] for label in [ "Setup", "Auth", "Model analysis", "Workspace", "Pi setup", "Pi generation", "Sanitize", "Space creation", "Upload/runtime", "Validation", "Report", ]: assert label in groups assert groups.count("id:") == 11 def test_grouped_timeline_computes_substep_progress(): js = Path("web/static/progress.js").read_text(encoding="utf-8") assert "done_count:doneCount" in js assert "total_count:group.steps.length" in js assert "percent:" in js assert "active_substep:activeSubstep" in js assert "--step-progress:${percent}%" in js assert "x.done_count||0" in js def test_timeline_dots_use_conic_gradient_ring(): css = Path("web/static/app.css").read_text(encoding="utf-8") assert "v74: grouped timeline dots" in css assert "conic-gradient(var(--blue)" in css assert "var(--step-progress,0%)" in css assert "repeat(11,minmax(92px,1fr))" in css def test_app_version_v74(): assert '"version": "v74-grouped-timeline-rings"' in Path("app.py").read_text(encoding="utf-8")