"""라이브 코칭 source pack → RAG 색인 payload 변환 테스트.""" from __future__ import annotations import unittest from .services import live_coach class LiveCoachSourcePackTest(unittest.TestCase): def test_source_packs_build_rag_rows_and_index_payloads(self) -> None: rows = live_coach.build_rag_source_rows() payloads = live_coach.build_rag_index_payloads() row_ids = {row["source_id"] for row in rows} payload_ids = {payload["source_id"] for payload in payloads} self.assertIn("workbook_0615_case_conceptualization", row_ids) self.assertIn("dsm5tr_case_formulation", row_ids) self.assertIn("official_suicide_risk_guidelines", row_ids) self.assertEqual(row_ids, payload_ids) for row in rows: self.assertTrue(row["title"]) self.assertIn(row["license_class"], {"A", "B", "C", "D"}) self.assertTrue(row["external_llm_ok"]) for payload in payloads: self.assertRegex(payload["content_hash"], r"^[0-9a-f]{64}$") self.assertGreater(payload["version"], 0) self.assertTrue(payload["chunks"]) for chunk in payload["chunks"]: self.assertTrue(chunk["chunk_text"]) self.assertEqual(chunk["visible_to"], ["evaluator"]) self.assertNotIn("client", chunk["visible_to"]) self.assertTrue(chunk["meta"]["live_coaching_source"]) self.assertTrue(chunk["meta"]["citation"]) dsm = next(payload for payload in payloads if payload["source_id"] == "dsm5tr_case_formulation") self.assertTrue(all(chunk["sensitivity"] == 2 for chunk in dsm["chunks"])) if __name__ == "__main__": unittest.main()