mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
test(content): mypy-clean structured-model construction + lint fixes
This commit is contained in:
@@ -34,11 +34,11 @@ import pytest
|
|||||||
import pytest_asyncio
|
import pytest_asyncio
|
||||||
from roboco.db.tables import AgentTable, ProjectTable, WorkSessionTable
|
from roboco.db.tables import AgentTable, ProjectTable, WorkSessionTable
|
||||||
from roboco.enforcement import TaskLifecycleError
|
from roboco.enforcement import TaskLifecycleError
|
||||||
|
from roboco.foundation.policy.content import markers
|
||||||
from roboco.models import AgentRole, AgentStatus, Team
|
from roboco.models import AgentRole, AgentStatus, Team
|
||||||
from roboco.models.base import Complexity, TaskNature, TaskStatus, TaskType
|
from roboco.models.base import Complexity, TaskNature, TaskStatus, TaskType
|
||||||
from roboco.models.permissions import AgentContext
|
from roboco.models.permissions import AgentContext
|
||||||
from roboco.models.task import TaskCreateRequest
|
from roboco.models.task import TaskCreateRequest
|
||||||
from roboco.foundation.policy.content import markers
|
|
||||||
from roboco.models.work_session import WorkSessionStatus
|
from roboco.models.work_session import WorkSessionStatus
|
||||||
from roboco.services.base import ValidationError
|
from roboco.services.base import ValidationError
|
||||||
from roboco.services.task import (
|
from roboco.services.task import (
|
||||||
@@ -159,7 +159,9 @@ def test_extract_original_developer_no_match() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_extract_original_developer_empty() -> None:
|
def test_extract_original_developer_empty() -> None:
|
||||||
assert extract_original_developer(SimpleNamespace(orchestration_markers=None)) is None
|
assert (
|
||||||
|
extract_original_developer(SimpleNamespace(orchestration_markers=None)) is None
|
||||||
|
)
|
||||||
assert extract_original_developer(SimpleNamespace(orchestration_markers={})) is None
|
assert extract_original_developer(SimpleNamespace(orchestration_markers={})) is None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,9 +22,10 @@ from roboco.foundation.policy.content.enums import Severity, Verdict
|
|||||||
|
|
||||||
|
|
||||||
def test_pr_review_valid() -> None:
|
def test_pr_review_valid() -> None:
|
||||||
c = PrReviewContent(
|
c = PrReviewContent.model_validate(
|
||||||
summary="The change is correct and covered by tests.",
|
{
|
||||||
findings=[
|
"summary": "The change is correct and covered by tests.",
|
||||||
|
"findings": [
|
||||||
{
|
{
|
||||||
"file": "roboco/services/git.py",
|
"file": "roboco/services/git.py",
|
||||||
"line": 42,
|
"line": 42,
|
||||||
@@ -33,35 +34,44 @@ def test_pr_review_valid() -> None:
|
|||||||
"actual": "swallows the error",
|
"actual": "swallows the error",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
verdict="changes_requested",
|
"verdict": "changes_requested",
|
||||||
|
}
|
||||||
)
|
)
|
||||||
assert c.findings[0].severity is Severity.MAJOR
|
assert c.findings[0].severity is Severity.MAJOR
|
||||||
assert c.verdict is Verdict.CHANGES_REQUESTED
|
assert c.verdict is Verdict.CHANGES_REQUESTED
|
||||||
|
|
||||||
|
|
||||||
def test_qa_valid() -> None:
|
def test_qa_valid() -> None:
|
||||||
c = QaNote(
|
c = QaNote.model_validate(
|
||||||
summary="Reviewed all acceptance criteria against the diff.",
|
{
|
||||||
ac_verdicts=[
|
"summary": "Reviewed all acceptance criteria against the diff.",
|
||||||
{"criterion": "AC1 returns 400", "status": "verified", "how": "test passes"}
|
"ac_verdicts": [
|
||||||
|
{
|
||||||
|
"criterion": "AC1 returns 400",
|
||||||
|
"status": "verified",
|
||||||
|
"how": "test passes",
|
||||||
|
}
|
||||||
],
|
],
|
||||||
verdict="passed",
|
"verdict": "passed",
|
||||||
|
}
|
||||||
)
|
)
|
||||||
assert c.ac_verdicts[0].status == "verified"
|
assert c.ac_verdicts[0].status == "verified"
|
||||||
|
|
||||||
|
|
||||||
def test_task_description_valid() -> None:
|
def test_task_description_valid() -> None:
|
||||||
c = TaskDescription(
|
c = TaskDescription.model_validate(
|
||||||
objective="Add a structured PR-review comment format.",
|
{
|
||||||
what_this_builds=["a reviewer schema"],
|
"objective": "Add a structured PR-review comment format.",
|
||||||
the_work=[
|
"what_this_builds": ["a reviewer schema"],
|
||||||
|
"the_work": [
|
||||||
{
|
{
|
||||||
"team": "backend",
|
"team": "backend",
|
||||||
"summary": "schema + gateway",
|
"summary": "schema + gateway",
|
||||||
"items": ["model", "verb"],
|
"items": ["model", "verb"],
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
acceptance_criteria=["reviewer notes land in their own slot"],
|
"acceptance_criteria": ["reviewer notes land in their own slot"],
|
||||||
|
}
|
||||||
)
|
)
|
||||||
assert c.the_work[0].team.value == "backend"
|
assert c.the_work[0].team.value == "backend"
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,10 @@ from roboco.foundation.policy.content import (
|
|||||||
|
|
||||||
|
|
||||||
def test_pr_review_renders_sections_and_findings_table() -> None:
|
def test_pr_review_renders_sections_and_findings_table() -> None:
|
||||||
md = PrReviewContent(
|
md = PrReviewContent.model_validate(
|
||||||
summary="The guard is missing on the 422 path.",
|
{
|
||||||
findings=[
|
"summary": "The guard is missing on the 422 path.",
|
||||||
|
"findings": [
|
||||||
{
|
{
|
||||||
"file": "roboco/services/git.py",
|
"file": "roboco/services/git.py",
|
||||||
"line": 42,
|
"line": 42,
|
||||||
@@ -26,7 +27,8 @@ def test_pr_review_renders_sections_and_findings_table() -> None:
|
|||||||
"actual": "raises",
|
"actual": "raises",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
verdict="changes_requested",
|
"verdict": "changes_requested",
|
||||||
|
}
|
||||||
).render_markdown()
|
).render_markdown()
|
||||||
assert "## Summary" in md
|
assert "## Summary" in md
|
||||||
assert "## Findings" in md
|
assert "## Findings" in md
|
||||||
@@ -38,9 +40,10 @@ def test_pr_review_renders_sections_and_findings_table() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_qa_renders_checklist() -> None:
|
def test_qa_renders_checklist() -> None:
|
||||||
md = QaNote(
|
md = QaNote.model_validate(
|
||||||
summary="Verified every acceptance criterion against the diff.",
|
{
|
||||||
ac_verdicts=[
|
"summary": "Verified every acceptance criterion against the diff.",
|
||||||
|
"ac_verdicts": [
|
||||||
{
|
{
|
||||||
"criterion": "AC1 returns 400",
|
"criterion": "AC1 returns 400",
|
||||||
"status": "verified",
|
"status": "verified",
|
||||||
@@ -48,7 +51,8 @@ def test_qa_renders_checklist() -> None:
|
|||||||
},
|
},
|
||||||
{"criterion": "AC2 logs", "status": "failed", "how": "no log emitted"},
|
{"criterion": "AC2 logs", "status": "failed", "how": "no log emitted"},
|
||||||
],
|
],
|
||||||
verdict="failed",
|
"verdict": "failed",
|
||||||
|
}
|
||||||
).render_markdown()
|
).render_markdown()
|
||||||
assert "## Acceptance Criteria" in md
|
assert "## Acceptance Criteria" in md
|
||||||
assert "✅" in md and "❌" in md
|
assert "✅" in md and "❌" in md
|
||||||
@@ -75,14 +79,20 @@ def test_resumption_renders_done_next_where() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_task_description_renders_all_sections() -> None:
|
def test_task_description_renders_all_sections() -> None:
|
||||||
md = TaskDescription(
|
md = TaskDescription.model_validate(
|
||||||
objective="Add the structured content standard.",
|
{
|
||||||
what_this_builds=["a schema layer", "a gateway gate"],
|
"objective": "Add the structured content standard.",
|
||||||
the_work=[
|
"what_this_builds": ["a schema layer", "a gateway gate"],
|
||||||
{"team": "backend", "summary": "models + verbs", "items": ["model", "verb"]}
|
"the_work": [
|
||||||
|
{
|
||||||
|
"team": "backend",
|
||||||
|
"summary": "models + verbs",
|
||||||
|
"items": ["model", "verb"],
|
||||||
|
}
|
||||||
],
|
],
|
||||||
notes=["reuse the Team enum"],
|
"notes": ["reuse the Team enum"],
|
||||||
acceptance_criteria=["reviewer notes are isolated"],
|
"acceptance_criteria": ["reviewer notes are isolated"],
|
||||||
|
}
|
||||||
).render_markdown()
|
).render_markdown()
|
||||||
assert "## Objective" in md
|
assert "## Objective" in md
|
||||||
assert "## What This Builds" in md
|
assert "## What This Builds" in md
|
||||||
|
|||||||
Reference in New Issue
Block a user