#!/usr/bin/env bash # Authenticated REST smoke test (Odoo :8069). Login: admin@admin.com / admin set -euo pipefail BASE="${1:-http://127.0.0.1:8069}" LOGIN_JSON='{"login":"admin@admin.com","password":"admin"}' fail() { echo "FAIL: $*" >&2; exit 1; } TOKEN=$(curl -s -X POST "$BASE/api/login" -H "Content-Type: application/json" -d "$LOGIN_JSON" | python3 -c "import sys,json; print(json.load(sys.stdin).get('token',''))" 2>/dev/null || true) [[ -n "$TOKEN" ]] || fail "No JWT — check $BASE/api/login" AUTH=(-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json") get() { curl -s -o /dev/null -w "%{http_code}" "${AUTH[@]}" "$BASE$1" } post() { curl -s -o /dev/null -w "%{http_code}" -X POST "${AUTH[@]}" "$BASE$1" -d "${2:-{}}" } errs=0 expect2xx() { local method="$1" path="$2" code="$3" if [[ "$code" =~ ^2[0-9][0-9]$ ]]; then echo "OK $method $path ($code)" else echo "BAD $method $path -> $code" >&2 errs=$((errs + 1)) fi } c=$(get /api/user) && expect2xx GET /api/user "$c" c=$(get "/api/students?size=5") && expect2xx GET /api/students "$c" c=$(get "/api/teachers?size=5") && expect2xx GET /api/teachers "$c" c=$(get "/api/courses?size=5") && expect2xx GET /api/courses "$c" c=$(get "/api/batches?size=5") && expect2xx GET /api/batches "$c" c=$(get "/api/entities?size=5") && expect2xx GET /api/entities "$c" c=$(get "/api/users/list?size=5") && expect2xx GET /api/users/list "$c" c=$(get "/api/assignments?size=5") && expect2xx GET /api/assignments "$c" c=$(get "/api/tickets?size=5") && expect2xx GET /api/tickets "$c" c=$(get "/api/groups?size=5") && expect2xx GET /api/groups "$c" c=$(get /api/training/tips) && expect2xx GET /api/training/tips "$c" c=$(get /api/ai/alerts) && expect2xx GET /api/ai/alerts "$c" c=$(get /api/analytics/student) && expect2xx GET /api/analytics/student "$c" c=$(get /api/analytics/class) && expect2xx GET /api/analytics/class "$c" c=$(get /api/analytics/subject) && expect2xx GET /api/analytics/subject "$c" c=$(get /api/analytics/content-gaps) && expect2xx GET /api/analytics/content-gaps "$c" c=$(get "/api/academic-years?size=5") && expect2xx GET /api/academic-years "$c" c=$(get "/api/departments?size=5") && expect2xx GET /api/departments "$c" c=$(get "/api/admissions?size=5") && expect2xx GET /api/admissions "$c" c=$(get "/api/admission-registers?size=5") && expect2xx GET /api/admission-registers "$c" c=$(get "/api/packages?size=5") && expect2xx GET /api/packages "$c" c=$(get "/api/resources?size=5") && expect2xx GET /api/resources "$c" c=$(get "/api/subject-registrations?size=5") && expect2xx GET /api/subject-registrations "$c" c=$(get "/api/inst-exam-sessions?size=5") && expect2xx GET /api/inst-exam-sessions "$c" c=$(get "/api/marksheets?size=5") && expect2xx GET /api/marksheets "$c" c=$(get "/api/course-assignments?size=5") && expect2xx GET /api/course-assignments "$c" c=$(post /api/ai/insights '{}') && expect2xx POST /api/ai/insights "$c" [[ "$errs" -eq 0 ]] || exit 1 echo "All smoke checks passed ($BASE)."