k-skill/scripts/test_mfds_drug_safety.py
Jeffrey (Dongkyu) Kim 2550d19974 Route MFDS drug-safety and food-safety lookups through k-skill-proxy
Move direct API calls out of the skill Python scripts and into shared
proxy routes so end-users no longer need their own DATA_GO_KR_API_KEY
for MFDS surfaces. Adds mfds.js helper, proxy tests, and updates all
docs and setup guidance to reflect the hosted proxy workflow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 00:07:18 +09:00

94 lines
4.3 KiB
Python

import unittest
from scripts.mfds_drug_safety import (
build_drug_interview,
lookup_drugs,
normalize_easy_drug_item,
normalize_safe_stad_item,
resolve_proxy_base_url,
)
class DrugInterviewTest(unittest.TestCase):
def test_build_drug_interview_requires_followup_questions_and_red_flags(self):
interview = build_drug_interview(
question="타이레놀이랑 판콜 같이 먹어도 되나요?",
symptoms="두드러기와 어지러움",
)
self.assertEqual(interview["domain"], "drug")
self.assertIn("누가 복용하려는지", interview["must_ask"][0])
self.assertTrue(any("얼마나" in item for item in interview["must_ask"]))
self.assertTrue(any("복용 중인 약" in item for item in interview["must_ask"]))
self.assertTrue(any("알레르기" in item for item in interview["must_ask"]))
self.assertTrue(any("호흡곤란" in item for item in interview["red_flags"]))
self.assertTrue(any("의식" in item for item in interview["red_flags"]))
self.assertIn("즉시 119", interview["urgent_action"])
class DrugNormalizationTest(unittest.TestCase):
def test_normalize_easy_drug_item_extracts_public_safety_summary(self):
item = normalize_easy_drug_item(
{
"item_name": "타이레놀정160밀리그램",
"company_name": "한국얀센",
"efficacy": "감기로 인한 발열 및 동통에 사용합니다.",
"how_to_use": "만 12세 이상은 필요시 복용합니다.",
"warnings": "매일 세 잔 이상 술을 마시는 사람은 전문가와 상의하십시오.",
"cautions": "간질환 환자는 주의하십시오.",
"interactions": "다른 해열진통제와 함께 복용하지 마십시오.",
"side_effects": "발진, 구역이 나타날 수 있습니다.",
"storage": "실온 보관하십시오.",
}
)
self.assertEqual(item["source"], "drug_easy_info")
self.assertEqual(item["item_name"], "타이레놀정160밀리그램")
self.assertEqual(item["company_name"], "한국얀센")
self.assertIn("발열", item["efficacy"])
self.assertIn("해열진통제", item["interactions"])
self.assertIn("실온", item["storage"])
def test_normalize_safe_stad_item_extracts_store_medicine_fields(self):
item = normalize_safe_stad_item(
{
"item_name": "어린이타이레놀현탁액",
"company_name": "한국존슨앤드존슨판매(유)",
"efficacy": "해열 및 진통",
"how_to_use": "용법에 따라 복용",
"warnings": "과량복용 주의",
"interactions": "다른 아세트아미노펜 제제와 병용 주의",
"side_effects": "드물게 발진",
}
)
self.assertEqual(item["source"], "safe_standby_medicine")
self.assertEqual(item["item_name"], "어린이타이레놀현탁액")
self.assertIn("아세트아미노펜", item["interactions"])
class ProxyResolutionTest(unittest.TestCase):
def test_resolve_proxy_base_url_defaults_to_hosted_proxy(self):
self.assertEqual(resolve_proxy_base_url(None, env={}), "https://k-skill-proxy.nomadamas.org")
self.assertEqual(resolve_proxy_base_url(None, env={"KSKILL_PROXY_BASE_URL": "https://proxy.example.com/"}), "https://proxy.example.com")
with self.assertRaisesRegex(ValueError, "KSKILL_PROXY_BASE_URL"):
resolve_proxy_base_url(None, env={"KSKILL_PROXY_BASE_URL": "off"})
def test_lookup_drugs_uses_proxy_route(self):
captured = {}
def fake_request_json(request):
captured["url"] = request.full_url
return {"items": []}
payload = lookup_drugs(["타이레놀", "판콜"], limit=3, base_url="https://proxy.example.com", request_json=fake_request_json)
self.assertEqual(payload, {"items": []})
self.assertIn("https://proxy.example.com/v1/mfds/drug-safety/lookup", captured["url"])
self.assertIn("itemName=%ED%83%80%EC%9D%B4%EB%A0%88%EB%86%80", captured["url"])
self.assertIn("itemName=%ED%8C%90%EC%BD%9C", captured["url"])
self.assertIn("limit=3", captured["url"])
if __name__ == "__main__":
unittest.main()