Files
Jyotisha/tests/test_health_narrative.py
T
2026-09-03 23:57:27 +08:00

52 lines
2.4 KiB
Python

#!/usr/bin/env python3
from scripts.jyotish_api_server import JyotishAPIHandler
from scripts.jyotish_engine import _build_ai_prompt_pack, _build_health_narrative_payload
def _varga(asc, placements):
return {
"ascendant": {"sign": asc, "sign_index": 0},
"planets": {planet: {"sign": sign} for planet, sign in placements.items()},
}
def _report():
modules = {
"chart": {"ascendant": {"sign": "Leo", "sign_idx": 4}, "planets": {}, "birth_info": {}},
"varga_full": {
"D6_Shashthamsa": _varga("Aries", {"Saturn": "Taurus", "Jupiter": "Gemini"}),
"D8_Ashtamsa": _varga("Taurus", {"Saturn": "Cancer", "Jupiter": "Leo"}),
"D30_Trimsamsa": _varga("Gemini", {"Saturn": "Virgo", "Jupiter": "Libra"}),
},
"dasha": {"current_dasha": {"mahadasha": "Saturn", "antardasha": "Jupiter"}},
"shadbala": {"planets": {
"Saturn": {"total_rupas": 6.2, "min_required": 5.0, "strength_level": "strong"},
"Jupiter": {"total_rupas": 4.1, "min_required": 5.0, "strength_level": "weak"},
"Venus": {"total_rupas": 9.9, "min_required": 5.0, "strength_level": "strong"},
}},
}
return {"chart": modules["chart"], "modules": modules, "birth_info": {}}
def test_health_narrative_uses_only_health_vargas_lords_dasha_and_related_shadbala():
report = _report()
payload = _build_health_narrative_payload(report["modules"], report["chart"])
assert set(payload) == {"headline", "strengths", "risks", "boundaries"}
joined = " ".join([payload["headline"], *payload["strengths"], *payload["risks"]])
for layer in ("D6", "D8", "D30", "Saturn", "Jupiter"):
assert layer in joined
assert "Venus" not in joined
assert "非医疗" in " ".join(payload["boundaries"])
prompt = _build_ai_prompt_pack(report)
assert prompt["evidence_snapshot"]["health_narrative"]["headline"] == payload["headline"]
def test_api_prompt_pack_keeps_compact_health_narrative():
report = _report()
chart = {**report["chart"], "modules": report["modules"], "birth": {}, "dasha": {}}
prompt = JyotishAPIHandler.__new__(JyotishAPIHandler)._build_chart_prompt_pack(chart)
seed = prompt["evidence_snapshot"]["health_narrative"]
assert seed["status"] == "parameter_sensitive"
assert "D6/D8/D30" in seed["headline"]
assert "非医疗" in " ".join(seed["boundaries"])