Trainer_LLM/llm-api/test_exercise_plan.sh

156 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
BASE_URL="http://127.0.0.1:8000"
EX_COL="exercises"
PL_COL="training_plans"
# Utility: assert status code
function assert_status {
local code=$1; local expect=$2; local body=$3
if [[ "$code" -ne "$expect" ]]; then
echo "? Unerwarteter HTTP-Status: $code, erwartet $expect"
echo "Response Body: $body"
exit 1
fi
}
# Utility: die Antwort per jq extrahieren
function jqf { echo "$1" | jq -r "$2"; }
echo "=== 1) Clean up Collections ==="
curl -s -X DELETE "$BASE_URL/delete-collection?collection=$EX_COL" || true
curl -s -X DELETE "$BASE_URL/delete-collection?collection=$PL_COL" || true
echo "? Alle Collections gelöscht"
echo
echo "=== 2) POST /exercise (Create Exercise) ==="
EX_PAYLOAD=$(jq -n '{
title: "Kniebeuge",
summary: "Partnerübung für Stabilität",
short_description: "Partner drückt von vorne",
keywords: ["Kraft","Partner"],
link: "http://wiki/uebung/kniebeuge",
discipline: "Karate",
group: "Mittelstufe",
age_group: "Erwachsene",
target_group: "Breitensport",
min_participants: 2,
duration_minutes: 5,
capabilities: {"strength":3,"balance":2},
category: "Grundübung",
purpose: "Stärkung Beine",
execution: "Langsam herabsenken",
notes: "Rücken gerade halten",
preparation: "Partnerposition",
method: "Partnerwiderstand",
equipment: ["Partner"]
}')
R=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/exercise" -H "Content-Type: application/json" -d "$EX_PAYLOAD")
BODY=$(echo "$R" | sed '$d')
CODE=$(echo "$R" | tail -n1)
assert_status $CODE 200 "$BODY"
EX_ID=$(jqf "$BODY" '.id')
echo "? Exercise erstellt mit id=$EX_ID"
echo
echo "=== 3) GET /exercise (List & Filter) ==="
# 3a) ohne Filter
FULL=$(curl -s -X GET "$BASE_URL/exercise")
COUNT=$(echo "$FULL" | jq 'length')
if [[ "$COUNT" -ne 1 ]]; then
echo "? /exercise returned $COUNT entries, expected 1"
exit 1
fi
echo "? /exercise list returns $COUNT Eintrag"
# 3b) filter discipline
F=$(curl -s -G "$BASE_URL/exercise" --data-urlencode "discipline=Karate")
if [[ "$(echo "$F" | jq '.[0].id')" != "\"$EX_ID\"" ]]; then
echo "? discipline filter fehlgeschlagen"
exit 1
fi
echo "? Filter discipline funktioniert"
# 3c) filter tags
F2=$(curl -s -G "$BASE_URL/exercise" --data-urlencode "tags=Partner")
if [[ "$(echo "$F2" | jq '.[0].id')" != "\"$EX_ID\"" ]]; then
echo "? tags filter fehlgeschlagen"
exit 1
fi
echo "? Filter tags funktioniert"
echo
echo "=== 4) POST /plan (Create TrainingPlan) ==="
PLAN_PAYLOAD=$(jq -n --arg exid "$EX_ID" '{
title: "Bein-Training",
short_description: "Stabilität und Kraft",
collection: "training_plans",
discipline: "Karate",
group: "Mittelstufe",
dojo: "Dojo A",
date: "2025-08-10",
plan_duration_weeks: 4,
focus_areas: ["Kraft","Technik"],
predecessor_plan_id: null,
age_group: "Erwachsene",
phases: [
{
name: "Aufwärmen",
duration_minutes: 10,
method: "Laufen",
method_notes: "locker",
exercises: [
{
exercise_id: $exid,
cond_load: {"reps":5},
coord_load: {"balance":2},
instructions: "Langsam ausführen"
}
]
}
]
}')
R2=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/plan" -H "Content-Type: application/json" -d "$PLAN_PAYLOAD")
BODY2=$(echo "$R2" | sed '$d')
CODE2=$(echo "$R2" | tail -n1)
assert_status $CODE2 200 "$BODY2"
PL_ID=$(jqf "$BODY2" '.id')
echo "? Plan erstellt mit id=$PL_ID"
echo
echo "=== 5) GET /plan (List & Filter) ==="
# 5a) ohne Filter
L=$(curl -s -G "$BASE_URL/plan")
if [[ "$(echo "$L" | jq 'length')" -ne 1 ]]; then
echo "? /plan returned $(echo $L | jq 'length') entries, expected 1"
exit 1
fi
echo "? /plan list returns 1 Eintrag"
# 5b) filter discipline
LF=$(curl -s -G "$BASE_URL/plan" --data-urlencode "discipline=Karate")
if [[ "$(echo "$LF" | jq '.[0].id')" != "\"$PL_ID\"" ]]; then
echo "? discipline filter for /plan failed"
exit 1
fi
echo "? /plan discipline filter funktioniert"
# 5c) filter group
LG=$(curl -s -G "$BASE_URL/plan" --data-urlencode "group=Mittelstufe")
if [[ "$(echo "$LG" | jq '.[0].id')" != "\"$PL_ID\"" ]]; then
echo "? group filter for /plan failed"
exit 1
fi
echo "? /plan group filter funktioniert"
# Cleanup
echo
echo "=== Cleanup Collections ==="
curl -s -X DELETE "$BASE_URL/delete-collection?collection=$EX_COL" || true
curl -s -X DELETE "$BASE_URL/delete-collection?collection=$PL_COL" || true
echo "? Cleanup done"
echo
echo "?? Alle Tests für Exercises & Plans erfolgreich! ??"