PMFlow/backend/tests/test_ai_prompt_registry_con...

59 lines
2.0 KiB
Python

from app.config.ai_prompt_registry import (
PROMPT_REGISTRY_MAP,
get_prompt_registry,
get_prompt_registry_entry,
iter_prompt_registry_keys,
)
from app.config.ai_prompts_catalog import __all__ as PROMPT_CATALOG_EXPORTS
def test_prompt_registry_covers_all_catalog_exports() -> None:
catalog_keys = set(PROMPT_CATALOG_EXPORTS)
registry_keys = set(iter_prompt_registry_keys())
assert registry_keys == catalog_keys
assert set(PROMPT_REGISTRY_MAP) == catalog_keys
for key in catalog_keys:
entry = get_prompt_registry_entry(key)
assert entry is not None
assert entry["prompt_key"] == key
def test_prompt_registry_returns_detached_copies() -> None:
registry = get_prompt_registry()
original_key = registry[0]["prompt_key"]
registry[0]["prompt_key"] = "BROKEN_KEY"
assert PROMPT_REGISTRY_MAP[original_key]["prompt_key"] == original_key
def test_high_frequency_registry_entries_have_complete_metadata() -> None:
required_keys = (
"PROMPT_SIGNAL_PLANNER",
"PROMPT_GENERATE_CHARTER",
"PROMPT_DECOMPOSE_TASKS",
"PROMPT_PROJECT_STATUS_QA",
"PROMPT_MEMBER_WORKLOAD_QA",
"PROMPT_AI_PMO_QA",
"PROMPT_EXTERNAL_TREND_QA",
"PROMPT_INDUSTRY_TREND_QA",
)
for prompt_key in required_keys:
entry = get_prompt_registry_entry(prompt_key)
assert entry is not None
assert entry["module"]
assert entry["business_scenario"]
assert entry["input_contract"]
assert entry["output_contract"]
assert isinstance(entry["call_sites"], tuple)
assert entry["call_sites"], prompt_key
signal_planner_entry = get_prompt_registry_entry("PROMPT_SIGNAL_PLANNER")
assert signal_planner_entry is not None
assert "charter_json" in signal_planner_entry["input_contract"]
assert any("mixin_prompt.py" in site for site in signal_planner_entry["call_sites"])
assert any("mixin_analyze.py" in site for site in signal_planner_entry["call_sites"])