Files
web-page-backend/saju-lab/tests/test_schema.py

90 lines
2.6 KiB
Python

from app.interpret.schema import validate_saju_interpretation, validate_compat_interpretation
def _valid_saju_item(key="기질"):
return {
"key": key, "title": "타고난 기질",
"content": "본문 3~5문장",
"evidence": {"saju_element": "갑목 일주", "reasoning": "..."}
}
SAJU_ITEM_KEYS = [
"기질", "오행밸런스", "지지상호작용", "신살영향",
"재물운", "직업적성", "애정운", "건강운",
"현재대운", "올해세운", "인생황금기", "종합조언",
]
def _valid_saju_payload():
return {
"items": [_valid_saju_item(k) for k in SAJU_ITEM_KEYS],
"summary": "...",
"advice": "...",
"warning": None,
"confidence": "medium",
}
def test_valid_saju():
ok, _ = validate_saju_interpretation(_valid_saju_payload())
assert ok is True
def test_saju_missing_items():
p = _valid_saju_payload(); del p["items"]
ok, err = validate_saju_interpretation(p)
assert not ok and "items" in err
def test_saju_wrong_item_count():
p = _valid_saju_payload(); p["items"] = p["items"][:5]
ok, err = validate_saju_interpretation(p)
assert not ok and ("12" in err or "items" in err)
def test_saju_missing_evidence():
p = _valid_saju_payload(); del p["items"][0]["evidence"]
ok, err = validate_saju_interpretation(p)
assert not ok and "evidence" in err
def test_saju_invalid_confidence():
p = _valid_saju_payload(); p["confidence"] = "extreme"
ok, err = validate_saju_interpretation(p)
assert not ok and "confidence" in err
def _valid_compat_payload():
return {
"summary": "두 사주 궁합 핵심",
"strengths": [
{"title": "오행 상생", "explanation": "...", "evidence": "甲木 → 丁火"},
{"title": "일지 합", "explanation": "...", "evidence": "申/巳 합"},
],
"challenges": [
{"title": "...", "explanation": "...", "evidence": "..."},
{"title": "...", "explanation": "...", "evidence": "..."},
],
"advice": "...",
"warning": None,
"confidence": "high",
}
def test_valid_compat():
ok, _ = validate_compat_interpretation(_valid_compat_payload())
assert ok is True
def test_compat_missing_strengths():
p = _valid_compat_payload(); del p["strengths"]
ok, err = validate_compat_interpretation(p)
assert not ok and "strengths" in err
def test_compat_invalid_confidence():
p = _valid_compat_payload(); p["confidence"] = "absolute"
ok, err = validate_compat_interpretation(p)
assert not ok and "confidence" in err