"""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