"""리뷰 요약 문장의 한국어 조사(와/과) 선택 회귀 테스트. 2026-07-27 전수 순회에서 발견: 받침 있는 내담자 이름(하늘) 뒤에도 "와의"가 붙어 "하늘와의 회기는"으로 표기됐다. 마지막 글자 받침 유무에 따라 와/과를 골라야 한다. """ from __future__ import annotations import unittest from .session_read_model import ReviewTurn, _review_summary def _turns() -> list[ReviewTurn]: return [ ReviewTurn(id="t1", ts="0:00", speaker="learner", who="나", text="안녕하세요."), ReviewTurn(id="t2", ts="0:01", speaker="client", who="하늘", text="...네."), ] class ReviewPersonaLabelTest(unittest.TestCase): def test_difficulty_is_localized_to_korean(self) -> None: from .session_read_model import _persona_label self.assertEqual(_persona_label("P4", "easy"), "P4 · 기초") self.assertEqual(_persona_label("P2", "moderate"), "P2 · 중간") self.assertEqual(_persona_label("P1", "hard"), "P1 · 고난도") # 알 수 없는 값은 원문 유지(빈 라벨로 숨기지 않는다) self.assertEqual(_persona_label("P9", "custom"), "P9 · custom") class ReviewSummaryJosaTest(unittest.TestCase): def test_name_with_final_consonant_uses_gwa(self) -> None: summary = _review_summary(client_name="하늘", reached_phase="라포", turns=_turns()) self.assertIn("하늘과의 회기는", summary) self.assertNotIn("하늘와의", summary) def test_name_without_final_consonant_uses_wa(self) -> None: summary = _review_summary(client_name="지우", reached_phase="라포", turns=_turns()) self.assertIn("지우와의 회기는", summary) self.assertNotIn("지우과의", summary) def test_non_hangul_tail_falls_back_to_gwa_slash_wa(self) -> None: summary = _review_summary(client_name="P4", reached_phase="라포", turns=_turns()) self.assertIn("P4와(과)의 회기는", summary) if __name__ == "__main__": unittest.main()