Files
full_encoach_platform/new_project/smoke_api.sh
Yamen Ahmad 3e83d8d7d5 feat: add complete EnCoach backend — Odoo 19 + all addons
Includes:
- Odoo 19 framework (odoo/)
- 27 custom EnCoach addons (new_project/custom_addons/)
  - encoach_core, encoach_api, encoach_lms_api, encoach_adaptive_api
  - encoach_exam, encoach_taxonomy, encoach_adaptive, encoach_assignment
  - encoach_ai, encoach_ai_grading, encoach_ai_generation, encoach_ai_media
  - encoach_courseware, encoach_communication, encoach_subscription
  - encoach_notification, encoach_approval, encoach_branding
  - encoach_classroom, encoach_registration, encoach_stats
  - encoach_faq, encoach_ticket, encoach_training, encoach_resources
  - encoach_adaptive_ai, encoach_sis
- 21 OpenEduCat Enterprise modules (new_project/enterprise-19/)
- 14 OpenEduCat Community modules (new_project/openeducat_erp-19.0/)
- Configuration: odoo.conf, requirements.txt, scripts
- 200+ REST API endpoints with JWT authentication
- SRS and test documentation

Made-with: Cursor
2026-04-01 17:10:04 +04:00

63 lines
3.0 KiB
Bash
Executable File

#!/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)."