74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
"""첫 회기 라포·개방질문 체크리스트의 결정론 계약 테스트."""
|
|
|
|
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()
|