Bridge functional benefic malefic layer

This commit is contained in:
732642856
2026-06-28 18:18:33 +08:00
parent 7dc36ce558
commit 09817b96fd
8 changed files with 317 additions and 105 deletions
+25
View File
@@ -8,6 +8,7 @@ import json
import os
import sys
from io import BytesIO
from pathlib import Path
import pytest
@@ -433,6 +434,30 @@ def test_report_artifact_generates_html_fallback_artifact() -> None:
assert result['delivery']['next_action']
def test_report_artifact_can_render_functional_benefic_malefic_summary() -> None:
handler = _handler()
result = handler._compute_report_artifact({
'format': 'html',
'name': 'functional-role-report',
'html': '<!doctype html><html><body><h1>Jyotish</h1></body></html>',
'functional_benefic_malefic': {
'status': 'used',
'ascendant': 'Leo',
'functional_benefics': ['Sun', 'Mars', 'Jupiter'],
'functional_malefics': ['Venus', 'Saturn'],
'effect_on_confidence': '高严谨模式下必须叠加功能性吉凶星。',
},
})
assert result['success'] is True
html = Path(result['html_path']).read_text(encoding='utf-8')
assert 'Functional Benefic/Malefic' in html
assert 'Leo' in html
assert 'Sun, Mars, Jupiter' in html
assert 'Venus, Saturn' in html
assert '高严谨模式下必须叠加功能性吉凶星。' in html
def test_report_artifact_pdf_fallback_exposes_user_visible_delivery(monkeypatch) -> None:
class BrokenReportBuilder:
@staticmethod
@@ -4,6 +4,7 @@
from __future__ import annotations
from mcp_server import _collect_strict_evidence
from scripts.functional_benefics import derive_functional_benefic_malefic
def _base_relationship_result() -> dict:
@@ -48,3 +49,28 @@ def test_relationship_strict_workflow_exposes_functional_benefic_malefic_layer()
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"]