세션 평가와 교수자 분석 보강
This commit is contained in:
parent
5c4ac04e06
commit
fe2796f05a
51 changed files with 4928 additions and 240 deletions
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import unittest
|
||||
from contextlib import contextmanager
|
||||
from typing import Any
|
||||
|
|
@ -181,6 +182,52 @@ class NotificationTriggerTest(unittest.IsolatedAsyncioTestCase):
|
|||
save_evaluation.assert_awaited_once()
|
||||
enqueue_review.assert_awaited_once_with(session_id=sess.session_id)
|
||||
|
||||
async def test_session_evaluation_timeout_records_actionable_error(self) -> None:
|
||||
sess = _ended_session()
|
||||
|
||||
with (
|
||||
patched_settings(session_evaluation_timeout=1.0),
|
||||
patch.object(
|
||||
sessions.evaluator,
|
||||
"evaluate_session",
|
||||
AsyncMock(side_effect=asyncio.TimeoutError()),
|
||||
),
|
||||
patch.object(
|
||||
sessions.session_persistence,
|
||||
"save_session_evaluation",
|
||||
AsyncMock(return_value=True),
|
||||
) as save_evaluation,
|
||||
patch.object(
|
||||
sessions.notifications,
|
||||
"enqueue_session_review_ready",
|
||||
AsyncMock(),
|
||||
),
|
||||
):
|
||||
await sessions._generate_and_save_session_evaluation(sess)
|
||||
|
||||
saved_write = save_evaluation.await_args.args[0]
|
||||
self.assertEqual(saved_write.status, "error")
|
||||
self.assertEqual(saved_write.error, "session evaluation timeout after 1s")
|
||||
|
||||
async def test_scheduled_session_evaluation_task_crash_is_observed(self) -> None:
|
||||
sess = _ended_session()
|
||||
|
||||
async def boom(_sess: InProcSession) -> None:
|
||||
raise RuntimeError("background crash")
|
||||
|
||||
with patch.object(sessions, "_generate_and_save_session_evaluation", boom):
|
||||
with self.assertLogs(sessions.logger, level="ERROR") as logs:
|
||||
task = sessions._schedule_session_evaluation(sess)
|
||||
self.assertIsNotNone(task)
|
||||
assert task is not None
|
||||
with self.assertRaises(RuntimeError):
|
||||
await task
|
||||
|
||||
self.assertTrue(
|
||||
any("session evaluation background task crashed" in line for line in logs.output),
|
||||
logs.output,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue