All checks were successful
Deploy Development / deploy (push) Successful in 47s
Test Suite / pytest-backend (push) Successful in 49s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 15s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m26s
- Added new fields for goal query, user notes, max steps, and search query in the AiPromptPreviewBody to support planning prompts. - Integrated planning prompt handling in the preview_ai_prompt function, allowing for distinct processing of planning and exercise prompts. - Introduced LLM usage tracking in openrouter_chat_completion and planning_exercise_suggest functions to monitor AI call metrics. - Updated frontend components to accommodate new input fields for planning prompts, enhancing user experience and functionality.
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
|