Files
roboco/tests/unit/foundation/policy/content/test_content_renderers.py
T

93 lines
2.9 KiB
Python
Raw Normal View History

"""Markdown rendering tests for the structured content models.
Assert structure (labeled sections + the content appears) rather than exact
bytes, so the renderers stay refactorable.
"""
from __future__ import annotations
from roboco.foundation.policy.content import (
PrReviewContent,
QaNote,
ResumptionNote,
TaskDescription,
)
def test_pr_review_renders_sections_and_findings_table() -> None:
md = PrReviewContent(
summary="The guard is missing on the 422 path.",
findings=[
{
"file": "roboco/services/git.py",
"line": 42,
"severity": "blocker",
"expected": "retry as COMMENT",
"actual": "raises",
}
],
verdict="changes_requested",
).render_markdown()
assert "## Summary" in md
assert "## Findings" in md
assert "| File | Line | Severity | Expected → Actual |" in md
assert "`roboco/services/git.py`" in md
assert "blocker" in md
assert "## Verdict" in md
assert "changes requested" in md
def test_qa_renders_checklist() -> None:
md = QaNote(
summary="Verified every acceptance criterion against the diff.",
ac_verdicts=[
{
"criterion": "AC1 returns 400",
"status": "verified",
"how": "test passes",
},
{"criterion": "AC2 logs", "status": "failed", "how": "no log emitted"},
],
verdict="failed",
).render_markdown()
assert "## Acceptance Criteria" in md
assert "✅" in md and "❌" in md
assert "AC1 returns 400" in md
assert "## Verdict" in md
def test_resumption_renders_done_next_where() -> None:
md = ResumptionNote(
done="schema module landed",
next="wire the gateway chokepoint",
where_to_look=[
"foundation/policy/content/models.py",
"services/content_notes.py",
],
).render_markdown()
assert "## Done" in md
assert "## Next" in md
assert "## Where to look" in md
assert "content_notes.py" in md
# No machine markers ever leak into the human resumption note.
assert "original_developer" not in md
assert "documenter:" not in md
def test_task_description_renders_all_sections() -> None:
md = TaskDescription(
objective="Add the structured content standard.",
what_this_builds=["a schema layer", "a gateway gate"],
the_work=[
{"team": "backend", "summary": "models + verbs", "items": ["model", "verb"]}
],
notes=["reuse the Team enum"],
acceptance_criteria=["reviewer notes are isolated"],
).render_markdown()
assert "## Objective" in md
assert "## What This Builds" in md
assert "## The Work" in md
assert "**Backend**" in md
assert "## Notes" in md
assert "## Acceptance Criteria" in md