"""Unit tests for the WC5 promote-on-green-cold gate (run_recipe_ci.should_promote_canonical). Pure predicate. The live promote (deploy canonical at latest → snapshot → registry) is proven on custom-html (W3). is_enrolled is monkeypatched so the test doesn't depend on which recipes are enrolled on disk. """ from __future__ import annotations import os import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..")) sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "runner")) import run_recipe_ci as rr # noqa: E402 from harness import canonical # noqa: E402 def _enrolled(monkeypatch, val): monkeypatch.setattr(canonical, "is_enrolled", lambda r: val) def test_promote_when_enrolled_green_cold_latest(monkeypatch): _enrolled(monkeypatch, True) # green (overall 0), cold (quick False), latest (ref None) → promote assert rr.should_promote_canonical("custom-html", None, 0, quick=False) is True assert rr.should_promote_canonical("custom-html", "", 0, quick=False) is True def test_no_promote_when_not_enrolled(monkeypatch): _enrolled(monkeypatch, False) assert rr.should_promote_canonical("hedgedoc", None, 0, quick=False) is False def test_no_promote_when_red(monkeypatch): _enrolled(monkeypatch, True) assert rr.should_promote_canonical("custom-html", None, 1, quick=False) is False def test_no_promote_when_quick(monkeypatch): # --quick never promotes (the canonical advances ONLY via cold) _enrolled(monkeypatch, True) assert rr.should_promote_canonical("custom-html", None, 0, quick=True) is False def test_no_promote_on_pr_head(monkeypatch): # a PR `!testme` carries REF=PR-head → must NOT advance the canonical to a PR's code _enrolled(monkeypatch, True) assert rr.should_promote_canonical("custom-html", "abc123def", 0, quick=False) is False