"""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"