Files
rfc-app/backend/tests/test_mark_reviewed.py
T
Ben Stull aee9b582e5 fix(slice4): make all entry write paths sidecar-aware (§22.4a carried from SLICE-1)
graduate, claim, retire/unretire, _read_meta_entry, mark_entry_reviewed,
body extract/wrap (api_branches + api_prs replay) now dual-read and write
metadata to the sidecar via write_entry_files + bot.commit_entry_files/
open_entry_pr — a migrated body-only .md no longer crashes entry.parse or
re-grows frontmatter; legacy entries lazy-migrate on first metadata write.
Existing tests updated to assert the sidecar (INV-2 clean docs).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 18:57:54 -07:00

69 lines
3.2 KiB
Python

"""§22.4c — owner/admin mark-reviewed clears the flag; catalog unreviewed filter."""
from __future__ import annotations
from fastapi.testclient import TestClient
from test_propose_vertical import ( # noqa: F401
app_with_fake_gitea, tmp_env, provision_user_row, sign_in_as,
)
def _seed_unreviewed_active(fake, slug="feat"):
"""Put an active+unreviewed entry on the meta repo main + cache."""
from app import cache, entry as entry_mod
body = entry_mod.serialize(entry_mod.Entry(
slug=slug, title="Feat", state="active", unreviewed=True,
owners=["ben"], proposed_by="ben",
))
fake.files[("wiggleverse", "meta", "main", f"rfcs/{slug}.md")] = {"content": body, "sha": "s1"}
cache._upsert_cached_rfc(entry_mod.parse(body), body_sha="s1")
def test_catalog_unreviewed_filter(app_with_fake_gitea):
app, fake = app_with_fake_gitea
with TestClient(app) as client:
_seed_unreviewed_active(fake, "feat")
from app import cache, entry as entry_mod
ok = entry_mod.serialize(entry_mod.Entry(slug="ok", title="OK", state="active", owners=["ben"]))
fake.files[("wiggleverse", "meta", "main", "rfcs/ok.md")] = {"content": ok, "sha": "s2"}
cache._upsert_cached_rfc(entry_mod.parse(ok), body_sha="s2")
r = client.get("/api/rfcs", params={"unreviewed": "true"})
slugs = {i["slug"] for i in r.json()["items"]}
assert slugs == {"feat"}
def test_mark_reviewed_clears_flag(app_with_fake_gitea):
from app import db
app, fake = app_with_fake_gitea
with TestClient(app) as client:
_seed_unreviewed_active(fake, "feat")
provision_user_row(user_id=1, login="ben", role="owner")
sign_in_as(client, user_id=1, gitea_login="ben", display_name="Ben", role="owner")
r = client.post("/api/projects/default/rfcs/feat/mark-reviewed")
assert r.status_code == 200
row = db.conn().execute(
"SELECT unreviewed, reviewed_at, reviewed_by FROM cached_rfcs WHERE slug='feat'"
).fetchone()
assert row["unreviewed"] == 0
assert row["reviewed_by"] == "ben"
assert row["reviewed_at"] # provenance stamped
# git-side (§22.4a SLICE-4): the cleared flag now lands in the metadata
# sidecar and the `.md` is lazy-migrated to a clean body-only file (INV-2).
import yaml
sidecar = fake.files[("wiggleverse", "meta", "main", "rfcs/feat.meta.yaml")]["content"]
sc = yaml.safe_load(sidecar)
assert not sc.get("unreviewed") # cleared (omitted when False)
assert sc.get("reviewed_by") == "ben"
written = fake.files[("wiggleverse", "meta", "main", "rfcs/feat.md")]["content"]
assert "---" not in written # body-only, no frontmatter
def test_mark_reviewed_forbidden_for_non_superuser(app_with_fake_gitea):
app, fake = app_with_fake_gitea
with TestClient(app) as client:
_seed_unreviewed_active(fake, "feat")
provision_user_row(user_id=2, login="carol", role="contributor")
sign_in_as(client, user_id=2, gitea_login="carol", display_name="Carol", role="contributor")
r = client.post("/api/projects/default/rfcs/feat/mark-reviewed")
assert r.status_code == 403