Files
nextcraft/apps/ai-service/tests/agents/test_coach.py
T
CIAgent 88a1dab810 docs(milestone): complete v0.2-ai-tutor-architecture
---ci---
phase: 7
milestone: v0.2
status: complete
requirements:
  covered: [REQ-2-001, REQ-2-002, REQ-2-003, REQ-2-004, REQ-2-005, REQ-2-006, REQ-2-007, REQ-2-008, REQ-2-009, REQ-2-010, REQ-2-011, REQ-2-012]
  partial: []
---/ci---

Milestone v0.2 (ai-tutor-architecture) merged to main.

Escalation record (audit remediation, durable): P1 executor
delegation failed twice (empty subagent results, zero files
created); auto-resolved at full autonomy to inline execution with
identical plan fidelity (commit 3271373, reflog-only after phase
branch squash-delete).
2026-09-11 17:34:50 +00:00

51 lines
1.7 KiB
Python

"""Coach agent tests — persona, message assembly, streaming (REQ-2-005)."""
from ai_service.agents.coach import CoachAgent
from ai_service.config import Settings
from ai_service.corpus.learner_context import get_learner_context
from ai_service.llm.mock import MockProvider
from ai_service.llm.types import Message
def make_coach() -> CoachAgent:
return CoachAgent(MockProvider(), Settings(provider="mock"))
def test_system_prompt_includes_learner_context():
coach = make_coach()
prompt = coach.system_prompt(get_learner_context())
assert "Alex Rivera" in prompt
assert "AI Orchestration Engineer (62%)" in prompt
assert "retrieval practice" in prompt.lower()
assert "one clear next action" in prompt.lower()
def test_system_prompt_marks_current_focus():
coach = make_coach()
prompt = coach.system_prompt(get_learner_context())
assert "Multi-agent communication patterns" in prompt
def test_build_messages_system_history_user():
coach = make_coach()
history = [
Message(role="user", content="earlier"),
Message(role="assistant", content="reply"),
]
messages = coach.build_messages(history, "what next?", get_learner_context())
assert messages[0].role == "system"
assert "Coach" in messages[0].content
assert [m.content for m in messages[1:]] == ["earlier", "reply", "what next?"]
async def test_stream_reply_yields_deltas():
coach = make_coach()
ctx = get_learner_context()
tokens = [t async for t in coach.stream_reply(user_input="hello", learner_context=ctx)]
assert tokens
assert all(isinstance(t, str) for t in tokens)
def test_agent_name():
assert make_coach().name == "coach"