should_promote_canonical (enrolled+green+cold+latest) + promote_canonical (re-seed canonical at green-verified latest, snapshot+registry, old known-good replaced only on green). +5 unit (70 pass). Live: custom-html canonical advanced 1.10.0+1.28.0 → 1.11.0+1.29.0 via a full green cold run; snapshot refreshed; idle; per-run app torn down. WC6 nightly sweep next. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
"""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
|