Trainer_LLM/llm-api/test_exercise_idempotent.sh

72 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
API="http://localhost:8000"
echo "=== Cleanup collection ==="
curl -s -X DELETE "$API/delete-collection?collection=exercises" | jq -r '.status' || true
echo
echo "=== Create baseline (with external_id) ==="
EXT_ID="mw:pageid:218"
PAYLOAD_1=$(cat <<'JSON'
{
"title": "Affenklatschen",
"summary": "Mobilisierung der Schulter",
"short_description": "Mobilisierung der Schulter",
"keywords": ["Aufwärmen","Dehnen","Mobilisierung","Schulter"],
"link": "https://karatetrainer.net/index.php?title=Affenklatschen",
"discipline": "Allgemein",
"group": "1",
"age_group": "Kinder, Schüler, Teenager, Erwachsene",
"target_group": "Breitensportler",
"min_participants": 1,
"duration_minutes": 1,
"capabilities": {"Flexibilität":1,"Kopplungsfähigkeit":1},
"category": "Übungen",
"purpose": "Mobilisierung der Schulter",
"execution": "Beschreibung A",
"notes": "Hinweise A",
"preparation": "Dynamisches Dehnen",
"method": "",
"equipment": [],
"fullurl": "https://karatetrainer.net/index.php?title=Affenklatschen",
"external_id": "mw:pageid:218",
"source": "MediaWiki",
"source_version": "rev-1",
"fingerprint": "fp-1"
}
JSON
)
curl -s -X POST "$API/exercise" -H "Content-Type: application/json" -d "$PAYLOAD_1" | jq -r '.status // "ok"'
echo
echo "=== Upsert same external_id with changed content (should update, not duplicate) ==="
PAYLOAD_2=$(echo "$PAYLOAD_1" | jq '.summary="NEU: Mobilisierung der Schulter (Update)" | .source_version="rev-2" | .fingerprint="fp-2"')
curl -s -X POST "$API/exercise" -H "Content-Type: application/json" -d "$PAYLOAD_2" | jq -r '.status // "ok"'
echo
echo "=== Check by external_id ==="
curl -s "$API/exercise/by-external-id?external_id=$EXT_ID" | jq
echo
echo "=== Count entries (should be 1) ==="
COUNT=$(curl -s "$API/exercise" | jq '[.[] | select(.title=="Affenklatschen")] | length')
echo "Count=$COUNT"
if [ "$COUNT" != "1" ]; then
echo "❌ Expected 1, got $COUNT"
exit 1
fi
echo
echo "=== Verify updated summary ==="
CUR_SUMMARY=$(curl -s "$API/exercise/by-external-id?external_id=$EXT_ID" | jq -r '.payload.summary')
echo "Summary=$CUR_SUMMARY"
if [[ "$CUR_SUMMARY" != "NEU: Mobilisierung der Schulter (Update)" ]]; then
echo "❌ Update did not apply"
exit 1
fi
echo
echo "✅ Idempotent upsert OK"