From 41f10e4b69c5cde74f53fb0774e5ac60a4ac1190 Mon Sep 17 00:00:00 2001 From: DualFroz Date: Fri, 28 Aug 2026 20:35:41 +0200 Subject: [PATCH] chore: add smoke test script --- scripts/smoke.sh | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100755 scripts/smoke.sh diff --git a/scripts/smoke.sh b/scripts/smoke.sh new file mode 100755 index 0000000..67fc7cf --- /dev/null +++ b/scripts/smoke.sh @@ -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 =="