156 lines
4.4 KiB
Bash
Executable File
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! ??"
|