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