90 lines
3.0 KiB
Python
90 lines
3.0 KiB
Python
|
|
"""Admin-Vorschau für Planungs-Prompt-Slugs."""
|
||
|
|
from unittest.mock import MagicMock, patch
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from ai_prompt_planning_preview import (
|
||
|
|
PLANNING_PROMPT_SLUGS,
|
||
|
|
PlanningPromptPreviewInput,
|
||
|
|
is_planning_prompt_slug,
|
||
|
|
resolve_planning_prompt_preview_variables,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def test_is_planning_prompt_slug():
|
||
|
|
assert is_planning_prompt_slug("planning_progression_roadmap")
|
||
|
|
assert is_planning_prompt_slug("PLANNING_EXERCISE_PATH_QA")
|
||
|
|
assert not is_planning_prompt_slug("exercise_summary")
|
||
|
|
assert not is_planning_prompt_slug("")
|
||
|
|
|
||
|
|
|
||
|
|
def test_resolve_roadmap_preview_variables():
|
||
|
|
body = PlanningPromptPreviewInput(goal_query="Mae Geri Basics", max_steps=4)
|
||
|
|
vars_map = resolve_planning_prompt_preview_variables(
|
||
|
|
MagicMock(),
|
||
|
|
"planning_progression_roadmap",
|
||
|
|
body,
|
||
|
|
)
|
||
|
|
assert vars_map["goal_query"] == "Mae Geri Basics"
|
||
|
|
assert vars_map["max_steps"] == "4"
|
||
|
|
assert "goal_analysis_json" in vars_map
|
||
|
|
assert "semantic_brief_json" in vars_map
|
||
|
|
|
||
|
|
|
||
|
|
def test_resolve_stage_spec_includes_intent_context():
|
||
|
|
body = PlanningPromptPreviewInput(user_notes="Breitensport")
|
||
|
|
vars_map = resolve_planning_prompt_preview_variables(
|
||
|
|
MagicMock(),
|
||
|
|
"planning_progression_stage_spec",
|
||
|
|
body,
|
||
|
|
)
|
||
|
|
assert "intent_context_json" in vars_map
|
||
|
|
assert "major_steps_json" in vars_map
|
||
|
|
|
||
|
|
|
||
|
|
@patch("ai_prompt_planning_preview._load_catalog_variables")
|
||
|
|
def test_resolve_search_intent_includes_catalogs(mock_catalog):
|
||
|
|
mock_catalog.return_value = {
|
||
|
|
"skills_catalog_json": "[]",
|
||
|
|
"focus_areas_catalog_json": "[]",
|
||
|
|
"training_types_catalog_json": "[]",
|
||
|
|
"style_directions_catalog_json": "[]",
|
||
|
|
"target_groups_catalog_json": "[]",
|
||
|
|
}
|
||
|
|
body = PlanningPromptPreviewInput(search_query="Mae Geri nächster Schritt")
|
||
|
|
vars_map = resolve_planning_prompt_preview_variables(
|
||
|
|
MagicMock(),
|
||
|
|
"planning_exercise_search_intent",
|
||
|
|
body,
|
||
|
|
)
|
||
|
|
assert vars_map["search_query"] == "Mae Geri nächster Schritt"
|
||
|
|
assert vars_map["skills_catalog_json"] == "[]"
|
||
|
|
|
||
|
|
|
||
|
|
def test_non_planning_slug_raises():
|
||
|
|
with pytest.raises(ValueError, match="Kein Planungs-Prompt-Slug"):
|
||
|
|
resolve_planning_prompt_preview_variables(
|
||
|
|
MagicMock(),
|
||
|
|
"exercise_summary",
|
||
|
|
PlanningPromptPreviewInput(),
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def test_all_registered_slugs_resolve():
|
||
|
|
for slug in PLANNING_PROMPT_SLUGS:
|
||
|
|
with patch("ai_prompt_planning_preview._load_catalog_variables") as mock_catalog:
|
||
|
|
mock_catalog.return_value = {
|
||
|
|
"skills_catalog_json": "[]",
|
||
|
|
"focus_areas_catalog_json": "[]",
|
||
|
|
"training_types_catalog_json": "[]",
|
||
|
|
"style_directions_catalog_json": "[]",
|
||
|
|
"target_groups_catalog_json": "[]",
|
||
|
|
}
|
||
|
|
vars_map = resolve_planning_prompt_preview_variables(
|
||
|
|
MagicMock(),
|
||
|
|
slug,
|
||
|
|
PlanningPromptPreviewInput(),
|
||
|
|
)
|
||
|
|
assert isinstance(vars_map, dict)
|
||
|
|
assert len(vars_map) >= 1
|