105 lines
4.1 KiB
Python
105 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Regression tests for functional benefic/malefic strict evidence integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
|
|
from mcp_server import _collect_strict_evidence
|
|
from scripts.functional_benefics import derive_functional_benefic_malefic
|
|
|
|
|
|
def _base_relationship_result() -> dict:
|
|
return {
|
|
"modules": {
|
|
"chart": {
|
|
"ascendant": {"sign": "Leo"},
|
|
"planets": {
|
|
"Sun": {"sign": "Aquarius", "house": 7},
|
|
"Moon": {"sign": "Taurus", "house": 10},
|
|
"Mars": {"sign": "Gemini", "house": 11},
|
|
"Mercury": {"sign": "Capricorn", "house": 6},
|
|
"Jupiter": {"sign": "Sagittarius", "house": 5},
|
|
"Venus": {"sign": "Pisces", "house": 8},
|
|
"Saturn": {"sign": "Libra", "house": 3},
|
|
},
|
|
},
|
|
"varga_full": {"D9_Navamsa": {"summary": "ok"}},
|
|
"special_lagnas": {"Upapada_Lagna": {"sign": "Libra", "lord": "Venus"}},
|
|
"jaimini": {"darakaraka": {"planet": "Venus", "house": 7}},
|
|
"vivah_saham": {"sign": "Taurus", "house": 7},
|
|
"dasha": {"current_dasha": {"mahadasha": "Venus", "antardasha": "Moon"}},
|
|
"narayana_dasha": {"current_dasha": {"sign": "Libra", "lord": "Venus"}},
|
|
"dasa_convergence": {
|
|
"domain_activations": {
|
|
"marriage_partnership": {"convergence_level": "L3", "probability": "50-65%"}
|
|
}
|
|
},
|
|
}
|
|
}
|
|
|
|
|
|
def test_relationship_strict_workflow_exposes_functional_benefic_malefic_layer() -> None:
|
|
strict = _collect_strict_evidence("relationship", _base_relationship_result())
|
|
|
|
functional = strict["present_evidence"]["functional_benefic_malefic"]
|
|
assert functional["status"] == "used"
|
|
assert functional["ascendant"] == "Leo"
|
|
assert isinstance(functional["functional_benefics"], list)
|
|
assert isinstance(functional["functional_malefics"], list)
|
|
assert "Sun" in functional["functional_benefics"]
|
|
assert "Venus" in functional["functional_malefics"]
|
|
assert "functional_benefic_malefic_used" in strict["event_judgement"]["secondary_context"]
|
|
|
|
|
|
def test_functional_benefic_module_calculates_lagna_roles_without_planets() -> None:
|
|
functional = derive_functional_benefic_malefic("Leo")
|
|
|
|
assert functional["status"] == "used"
|
|
assert functional["ascendant"] == "Leo"
|
|
assert functional["owned_houses"]["Sun"] == [1]
|
|
assert functional["owned_houses"]["Venus"] == [3, 10]
|
|
assert "Sun" in functional["functional_benefics"]
|
|
assert "Venus" in functional["functional_malefics"]
|
|
assert functional["source"] == "strict_functional_benefic_malefic_v1"
|
|
|
|
|
|
def test_relationship_functional_layer_uses_ascendant_even_when_planets_missing() -> None:
|
|
result = _base_relationship_result()
|
|
result["modules"]["chart"] = {"ascendant": {"sign": "Leo"}}
|
|
|
|
strict = _collect_strict_evidence("relationship", result)
|
|
|
|
functional = strict["present_evidence"]["functional_benefic_malefic"]
|
|
assert functional["status"] == "used"
|
|
assert functional["ascendant"] == "Leo"
|
|
assert "Sun" in functional["functional_benefics"]
|
|
assert "Venus" in functional["functional_malefics"]
|
|
assert "functional_benefic_malefic_used" in strict["event_judgement"]["secondary_context"]
|
|
|
|
|
|
def test_oracle_functional_benefics_cli_exposes_json_contract() -> None:
|
|
completed = subprocess.run(
|
|
[
|
|
sys.executable,
|
|
"scripts/oracle_functional_benefics.py",
|
|
"--ascendant",
|
|
"Leo",
|
|
"--format",
|
|
"json",
|
|
],
|
|
check=True,
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
report = json.loads(completed.stdout)
|
|
|
|
assert report["status"] == "used"
|
|
assert report["ascendant"] == "Leo"
|
|
assert "Sun" in report["functional_benefics"]
|
|
assert "Venus" in report["functional_malefics"]
|
|
assert "Mars" in report["yogakarakas"]
|
|
assert report["source"] == "strict_functional_benefic_malefic_v1"
|