from __future__ import annotations import pytest from app.gateway.wiki_generation_config import compile_wiki_instructions def test_compile_wiki_instructions_keeps_raw_text_and_adds_optional_guidance() -> None: compiled = compile_wiki_instructions( content_instructions="保持正式表达", extraction_instructions="提取时间和主体", focus_instructions="重点关注适用对象与截止日期", directory_paths=[ ["政策法规"], ["政策法规", "国内政策"], ["政策法规", "国内政策", "申报流程"], ], ) assert compiled.content_instructions.startswith("保持正式表达") assert "【用户重点要求】\n重点关注适用对象与截止日期" in compiled.content_instructions assert "【参考目录层级】" in compiled.content_instructions assert " - 申报流程" in compiled.content_instructions assert "不是必须逐项套用的目录模板" in compiled.content_instructions assert "自行合并、拆分、改名或补充目录" in compiled.content_instructions assert "唯一允许使用的目录白名单" not in compiled.content_instructions assert compiled.extraction_instructions.startswith("提取时间和主体") assert "重点关注适用对象与截止日期" in compiled.extraction_instructions assert compiled.directory_prompt_coverage == "full" assert compiled.directory_prompt_covered_nodes == 3 assert compiled.directory_prompt_total_nodes == 3 def test_compile_wiki_instructions_reports_partial_directory_coverage() -> None: compiled = compile_wiki_instructions( content_instructions="", extraction_instructions="", focus_instructions="", directory_paths=[["甲"], ["乙"], ["丙"]], max_length=70, ) assert compiled.directory_prompt_coverage in {"none", "partial"} assert compiled.directory_prompt_covered_nodes < 3 assert compiled.directory_prompt_total_nodes == 3 def test_compile_wiki_instructions_rejects_untruncated_user_guidance() -> None: with pytest.raises(ValueError, match="合并后不能超过"): compile_wiki_instructions( content_instructions="甲" * 3995, extraction_instructions="", focus_instructions="必须突出期限", directory_paths=[], )