Files
Jyotisha/tests/test_reader_appendix_language.py
T
jesse-uxandClaude Code f968cb2166
Independent Staging Quality Gate / validate (push) Failing after 17m57s
Independent Staging Quality Gate / publish (push) Skipped
feat(report): add dense personal report appendix
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 10:42:17 +08:00

71 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Copy-only tests: these strings are vocabulary cases, not engine fixtures."""
import pytest
from scripts.reader_appendix_language import clean_reader_appendix_markdown
@pytest.mark.parametrize("raw,label", [
("parameter_sensitive", "参数敏感"),
("pyjhora_behavior_only", "仅单一外部参照,未做多引擎核对"),
("not_multiengine_parity", "仅单一外部参照,未做多引擎核对"),
("unresolved_external_tuple_boundary", "外部边界未对齐"),
("partial_verified", "部分核验"),
("raw_appendix_only", "仅原始附录可见"),
("missing_in_local", "本地暂无"),
])
def test_status_copy_preserves_rows(raw, label):
source = f"| sign_cn | degree_in_sign | nakshatra_lord |\n| 白羊座 | 12.5 | {raw} |\n"
result = clean_reader_appendix_markdown(source)
assert result == source.replace(raw, label)
assert result.count("\n") == source.count("\n")
@pytest.mark.parametrize("raw", ["PyJHora", "JHora", "pyjhora"])
def test_external_engine_names(raw):
assert clean_reader_appendix_markdown(raw) == "外部参照引擎"
@pytest.mark.parametrize("raw", ["PL9", "PL9 第 83-88 页", "PL9 第 40 / 48 页", "PL9 page 99-100", "PL9.pdf", "PL9 第 43–44 页"])
def test_external_product_pages(raw):
assert clean_reader_appendix_markdown(raw) == "外部参照资料"
@pytest.mark.parametrize("raw", ["cmd_full_reading", "jyotish_engine.cmd_full_reading", "render_pl9_markdown", "build_professional_report_reference_packet"])
def test_internal_functions(raw):
assert clean_reader_appendix_markdown(raw) == "本地计算"
@pytest.mark.parametrize("raw,label", [("blocked", "暂不可用"), ("executed", "已执行"), ("available", "可用"), ("computed", "已计算")])
def test_ambiguous_words_only_in_whole_cells(raw, label):
prose = f"The {raw} result is not a claim.\n| {raw} result | `{raw}` | {raw} |\n"
assert clean_reader_appendix_markdown(prose) == f"The {raw} result is not a claim.\n| {raw} result | `{label}` | {label} |\n"
assert clean_reader_appendix_markdown(raw) == raw
def test_chart_fence_unchanged_and_copy_idempotent():
fence = '```jyotish-chart\n{"title":"parameter_sensitive","id":"D1"}\n```\n'
source = "参数敏感\n" + fence + "| parameter_sensitive |\n"
result = clean_reader_appendix_markdown(source)
assert fence in result
assert clean_reader_appendix_markdown(result) == result
def test_public_boundary_only_leaves_internal_renderer_and_json_unchanged():
from scripts.professional_report_reference import build_professional_report_reference
from types import SimpleNamespace
packet = {"status": "parameter_sensitive"}
engine = SimpleNamespace(
build_professional_report_reference_packet=lambda *args: packet,
render_pl9_markdown=lambda value: "| parameter_sensitive | cmd_full_reading |",
)
handler = SimpleNamespace(
_high_rigor_birth_payload=lambda body: {"year": 2000, "hour": 0, "minute": 0, "today": "2026-01-01"},
_compute_full_reading_for_thematic=lambda birth: {},
)
assert build_professional_report_reference(handler, {"format": "json"}, engine=engine)["report"] is packet
assert build_professional_report_reference(handler, {"format": "markdown"}, engine=engine)["markdown"] == "| parameter_sensitive | cmd_full_reading |"
assert engine.render_pl9_markdown(packet) == "| parameter_sensitive | cmd_full_reading |"
assert packet == {"status": "parameter_sensitive"}