chore: add smoke test script
This commit is contained in:
1 parent
0f57ac7266
commit
41f10e4b69
1 file changed
+68
Executable
+68
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
BASE="${BASE_URL:-http://localhost:8080}"
|
||||
ADMIN_USER="${SLOTLINE_ADMIN_USERNAME:-admin}"
|
||||
ADMIN_PASS="${SLOTLINE_ADMIN_PASSWORD:-admin12345}"
|
||||
|
||||
jsonField() {
|
||||
python3 -c "import sys, json; print(json.load(sys.stdin)['$1'])"
|
||||
}
|
||||
|
||||
echo "== slotline smoke test against ${BASE} =="
|
||||
|
||||
echo "-- 1. admin login"
|
||||
adminToken=$(curl -sS -X POST "${BASE}/api/auth/login" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "{\"username\":\"${ADMIN_USER}\",\"password\":\"${ADMIN_PASS}\"}" | jsonField token)
|
||||
echo " admin token acquired"
|
||||
|
||||
echo "-- 2. create resource (ADMIN)"
|
||||
resourceId=$(curl -sS -X POST "${BASE}/api/resources" \
|
||||
-H "Authorization: Bearer ${adminToken}" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"name":"Court 1","description":"Outdoor tennis court"}' | jsonField id)
|
||||
echo " resource id=${resourceId}"
|
||||
|
||||
echo "-- 3. register user 'alice' (ignore if already exists)"
|
||||
curl -sS -o /dev/null -w " HTTP %{http_code}\n" -X POST "${BASE}/api/auth/register" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"username":"alice","password":"password123"}' || true
|
||||
|
||||
echo "-- 4. user login"
|
||||
userToken=$(curl -sS -X POST "${BASE}/api/auth/login" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"username":"alice","password":"password123"}' | jsonField token)
|
||||
echo " user token acquired"
|
||||
|
||||
slot='{"resourceId":'"${resourceId}"',"startTime":"2026-09-01T10:00:00Z","endTime":"2026-09-01T11:00:00Z"}'
|
||||
|
||||
echo "-- 5. book slot (expect 201)"
|
||||
reservationId=$(curl -sS -X POST "${BASE}/api/reservations" \
|
||||
-H "Authorization: Bearer ${userToken}" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "${slot}" | jsonField id)
|
||||
echo " reservation id=${reservationId}"
|
||||
|
||||
echo "-- 6. book the same slot again (expect 409)"
|
||||
conflictCode=$(curl -sS -o /dev/null -w '%{http_code}' -X POST "${BASE}/api/reservations" \
|
||||
-H "Authorization: Bearer ${userToken}" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "${slot}")
|
||||
echo " HTTP ${conflictCode}"
|
||||
if [ "${conflictCode}" != "409" ]; then
|
||||
echo " FAIL: expected 409 conflict" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "-- 7. cancel reservation (expect 200)"
|
||||
curl -sS -o /dev/null -w " HTTP %{http_code}\n" -X POST \
|
||||
"${BASE}/api/reservations/${reservationId}/cancel" \
|
||||
-H "Authorization: Bearer ${userToken}"
|
||||
|
||||
echo "-- 8. list active reservations for resource"
|
||||
curl -sS "${BASE}/api/resources/${resourceId}/reservations" \
|
||||
-H "Authorization: Bearer ${userToken}"
|
||||
echo
|
||||
|
||||
echo "== smoke test passed =="
|
||||
Reference in new issue
Block a user