shinkan-jinkendo/backend/tests/test_planning_exercise_path_builder.py
Lars 98b279fa89
All checks were successful
Deploy Development / deploy (push) Successful in 45s
Test Suite / pytest-backend (push) Successful in 44s
Test Suite / lint-backend (push) Successful in 1s
Test Suite / build-frontend (push) Successful in 14s
Test Suite / k6 /health Baseline (push) Successful in 33s
Test Suite / playwright-tests (push) Successful in 1m18s
Update version to 0.8.216 and enhance Exercise Progression Path Builder
- Incremented application version to 0.8.216 to reflect recent changes.
- Added skill expectations handling in the Exercise Progression Path Builder, improving the integration of expected skills into the roadmap steps.
- Enhanced the mapping of major steps to include load profiles, success criteria, anti-patterns, and exercise types, enriching the user experience and functionality.
2026-06-10 07:14:18 +02:00

63 lines
2.3 KiB
Python

"""Tests Planungs-KI Phase C3/E/F — Pfad-Vorschläge."""
from planning_exercise_path_builder import (
_annotate_roadmap_step,
_hit_to_path_step,
_pick_best_path_hit,
)
from planning_progression_roadmap import MajorStep, StageSpecArtifact
def test_pick_next_path_hit_skips_used():
hits = [{"id": 1, "title": "A", "semantic_score": 0.2}, {"id": 2, "title": "B", "semantic_score": 0.2}, {"id": 3, "title": "C", "semantic_score": 0.2}]
assert _pick_best_path_hit(hits, {1})["id"] == 2
assert _pick_best_path_hit(hits, {1, 2, 3}) is None
def test_hit_to_path_step_maps_variant():
step = _hit_to_path_step(
{
"id": 10,
"title": "Test",
"score": 0.8,
"reasons": ["Graph"],
"suggested_variant_id": 7,
"suggested_variant_name": "Leicht",
"variants": [{"id": 7, "variant_name": "Leicht"}],
}
)
assert step["exercise_id"] == 10
assert step["variant_id"] == 7
assert step["suggested_variant_name"] == "Leicht"
def test_annotate_roadmap_step_adds_metadata():
spec = StageSpecArtifact(major_step_index=1, learning_goal="Grundstellung Mae Geri")
major = MajorStep(index=1, phase="grundlage", learning_goal=spec.learning_goal, consolidates=["m1"])
step = _annotate_roadmap_step(
{"exercise_id": 5, "title": "Test", "reasons": ["Bibliothek"]},
stage_spec=spec,
major_step=major,
)
assert step["roadmap_major_step_index"] == 1
assert step["roadmap_phase"] == "grundlage"
assert step["roadmap_match_source"] == "stage_spec"
assert any("Roadmap:" in r for r in step["reasons"])
def test_annotate_roadmap_step_adds_skill_expectations():
spec = StageSpecArtifact(major_step_index=0, learning_goal="Timing und Distanz")
step = _annotate_roadmap_step(
{"exercise_id": 5, "title": "Test", "reasons": []},
stage_spec=spec,
major_step=None,
skill_expectations={
"scope": "progression_stage",
"expected_skills": [
{"skill_id": 2, "skill_name": "Timing", "weight": 0.9},
{"skill_id": 3, "skill_name": "Distanz", "weight": 0.8},
],
},
)
assert step["skill_expectations"]["expected_skills"][0]["skill_name"] == "Timing"
assert any("Fähigkeiten:" in r for r in step["reasons"])