Files
Jyotisha/tests/test_prashna_entry_contract.py
2026-07-20 11:02:41 +08:00

52 lines
2.0 KiB
Python

import json
import subprocess
import sys
from pathlib import Path
import pytest
from scripts.jyotish_api_server import BadRequest, JyotishAPIHandler
ROOT = Path(__file__).resolve().parents[1]
def test_cli_prashna_uses_question_moment_swiss_context_only():
result = subprocess.run([
sys.executable, "scripts/jyotish_engine.py", "prashna",
"--datetime", "2026-07-12T12:00:00+08:00", "--question-text", "Test question",
"--lat", "39.9042", "--lon", "116.4074", "--timezone", "8",
], cwd=ROOT, text=True, capture_output=True, timeout=30, check=True)
payload = json.loads(result.stdout)
assert payload["status"] == "computed"
assert payload["chart_source"] == "swiss_ephemeris_backend"
assert payload["supporting_indicators"]["gulika"]["status"] == "partial"
assert payload["supporting_indicators"]["sphuta"]["status"] == "partial"
assert "Kunda" in payload["blocked_layers"]
def test_cli_prashna_blocks_legacy_approximation_modes():
result = subprocess.run([
sys.executable, "scripts/jyotish_engine.py", "prashna",
"--datetime", "2026-07-12T12:00:00+08:00", "--question-text", "Test question",
"--lat", "39.9042", "--lon", "116.4074", "--timezone", "8", "--mode", "sphutas",
], cwd=ROOT, text=True, capture_output=True, timeout=30, check=True)
payload = json.loads(result.stdout)
assert payload["status"] == "blocked"
assert "sphutas" in payload["reason"]
def test_api_prashna_rejects_client_planets_and_computes_context():
handler = JyotishAPIHandler.__new__(JyotishAPIHandler)
body = {
"question_text": "Test question", "question_timestamp": "2026-07-12T12:00:00+08:00",
"lat": 39.9042, "lon": 116.4074, "timezone": 8,
"ayanamsa": "lahiri", "node_mode": "mean", "location_convention": "wgs84",
}
result = handler._compute_prashna(body)
assert result["prashna_context"]["chart_source"] == "swiss_ephemeris_backend"
with pytest.raises(BadRequest, match="forbidden"):
handler._compute_prashna({**body, "planets": {"Sun": 0}})