Artifex/tests/test_control_plane_models.py

57 lines
2.2 KiB
Python
Raw Permalink Normal View History

2026-08-15 13:50:24 +07:00
from __future__ import annotations
from control_plane.agents.models import Agent, AgentRole, AgentVersion, PromotionStatus
from control_plane.events.bus import EventBus
from control_plane.events.models import Event, EventType
from control_plane.projects.models import Milestone, Project, ProjectPlan, Task, TaskStatus
def test_project_hierarchy_and_events_persist() -> None:
project = Project.objects.create(name="Builder V1", goal="Bootstrap Artifex V1")
plan = ProjectPlan.objects.create(project=project, version=1, goal=project.goal)
milestone = Milestone.objects.create(
project=project,
plan=plan,
key="M1",
title="Control Plane",
goal="Persist deterministic control-plane state",
)
task = Task.objects.create(
project=project,
milestone=milestone,
task_type="implementation",
status=TaskStatus.READY,
goal="Create persisted Event Bus",
acceptance_criteria=["events are stored in PostgreSQL"],
)
event = EventBus().publish(EventType.TASK_CREATED, project=project, task=task, actor="test")
assert Project.objects.count() == 1
assert project.milestones.count() == 1
assert project.tasks.filter(status=TaskStatus.READY).count() == 1
assert Event.objects.get(id=event.id).event_type == EventType.TASK_CREATED
def test_agent_registry_supports_independent_reviewer_and_judge() -> None:
reviewer = Agent.objects.create(name="Reviewer", role=AgentRole.REVIEWER)
judge = Agent.objects.create(name="Project Judge", role=AgentRole.PROJECT_JUDGE)
reviewer_version = AgentVersion.objects.create(
agent=reviewer,
version=1,
model="qwen",
system_contract="Review implementation quality.",
promotion_status=PromotionStatus.CHAMPION,
)
judge_version = AgentVersion.objects.create(
agent=judge,
version=1,
model="qwen",
system_contract="Decide whether acceptance contracts pass.",
promotion_status=PromotionStatus.CHAMPION,
)
assert reviewer_version.agent.role == AgentRole.REVIEWER
assert judge_version.agent.role == AgentRole.PROJECT_JUDGE
assert reviewer_version.id != judge_version.id