"""첫 회기 라포·개방질문 체크리스트의 결정론 계약 테스트.""" from __future__ import annotations import unittest from .session_read_model import ReviewTurn, first_session_checklist def _turn(turn_id: str, text: str, *, speaker: str = "learner") -> ReviewTurn: return ReviewTurn( id=turn_id, ts="0:00", speaker=speaker, who="상담자" if speaker == "learner" else "내담자", text=text, ) class FirstSessionChecklistTest(unittest.TestCase): def test_first_session_links_versioned_criteria_to_evidence_turns(self) -> None: checklist = first_session_checklist( session_no=1, turns=[ _turn( "t1", "그동안 혼자 버티느라 많이 힘들게 느껴졌겠어요. 어떤 순간이 가장 어려웠나요?", ), _turn("t2", "그냥 계속 힘들었어요.", speaker="client"), ], ) self.assertEqual(checklist.version, "first-session-rapport-open-question.v1") self.assertTrue(checklist.applicable) self.assertEqual( [criterion.criterionId for criterion in checklist.criteria], [ "first-session.rapport-reflection", "first-session.open-question-one-focus", ], ) self.assertEqual( [criterion.status for criterion in checklist.criteria], ["met", "met"], ) self.assertEqual(checklist.criteria[0].evidenceTurns[0].turnId, "t1") self.assertEqual(checklist.criteria[0].evidenceTurns[0].turnSeq, 1) def test_first_session_keeps_missing_behavior_visible_without_scoring(self) -> None: checklist = first_session_checklist( session_no=1, turns=[_turn("t1", "네, 알겠습니다. 그렇게 하세요.")], ) self.assertEqual( [criterion.status for criterion in checklist.criteria], ["not_observed", "not_observed"], ) self.assertTrue(all(not item.evidenceTurns for item in checklist.criteria)) self.assertIn("임상 평가나 성적 판정이 아닙니다", checklist.note) def test_later_session_is_explicitly_not_applicable(self) -> None: checklist = first_session_checklist( session_no=2, turns=[_turn("t1", "어떤 마음이 들었나요?")], ) self.assertFalse(checklist.applicable) self.assertEqual(checklist.status, "not_applicable") self.assertEqual(checklist.criteria, []) if __name__ == "__main__": unittest.main()