gogcli/scripts/live-tests/classroom.sh
2026-01-17 19:47:46 +00:00

110 lines
6.0 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
run_classroom_tests() {
if skip "classroom"; then
echo "==> classroom (skipped)"
return 0
fi
run_optional "classroom" "classroom profile get" gog classroom profile get --json >/dev/null
run_optional "classroom" "classroom courses list" gog classroom courses list --json --max 1 >/dev/null
if [ -n "${GOG_LIVE_CLASSROOM_COURSE:-}" ]; then
local course_id cw_json cw_id
course_id="$GOG_LIVE_CLASSROOM_COURSE"
run_optional "classroom" "classroom courses get" gog classroom courses get "$course_id" --json >/dev/null
run_optional "classroom" "classroom courses url" gog classroom courses url "$course_id" --json >/dev/null
run_optional "classroom" "classroom roster" gog classroom roster "$course_id" --students --teachers --max 1 --json >/dev/null
run_optional "classroom" "classroom students list" gog classroom students "$course_id" --max 1 --json >/dev/null
run_optional "classroom" "classroom teachers list" gog classroom teachers "$course_id" --max 1 --json >/dev/null
run_optional "classroom" "classroom coursework list" gog classroom coursework "$course_id" --max 1 --json >/dev/null
run_optional "classroom" "classroom materials list" gog classroom materials "$course_id" --max 1 --json >/dev/null
run_optional "classroom" "classroom announcements list" gog classroom announcements "$course_id" --max 1 --json >/dev/null
run_optional "classroom" "classroom topics list" gog classroom topics "$course_id" --max 1 --json >/dev/null
cw_json=$(gog classroom coursework "$course_id" --max 1 --json 2>/dev/null || true)
cw_id=$(extract_id "$cw_json")
if [ -n "$cw_id" ]; then
run_optional "classroom" "classroom submissions list" gog classroom submissions "$course_id" "$cw_id" --max 1 --json >/dev/null
fi
else
if [ "${STRICT:-false}" = true ]; then
echo "Missing GOG_LIVE_CLASSROOM_COURSE for classroom coverage." >&2
return 1
fi
echo "==> classroom (optional; set GOG_LIVE_CLASSROOM_COURSE to expand)"
fi
# Disabled by default: creator account lacks course state permissions.
if [ -n "${GOG_LIVE_CLASSROOM_CREATE:-}" ] && [ -n "${GOG_LIVE_CLASSROOM_ALLOW_STATE:-}" ]; then
local course_json course_id topic_json topic_id announcement_json announcement_id material_json material_id coursework_json coursework_id
echo "==> classroom courses create"
if course_json=$(gog classroom courses create --name "gogcli-smoke-$TS" --section "gogcli" --state ACTIVE --json 2>/dev/null); then
:
elif course_json=$(gog classroom courses create --name "gogcli-smoke-$TS" --section "gogcli" --state PROVISIONED --json 2>/dev/null); then
:
else
course_json=""
fi
course_id=$(extract_id "$course_json")
if [ -z "$course_id" ]; then
echo "Classroom course create failed; skipping create tests."
if [ "${STRICT:-false}" = true ]; then
return 1
fi
return 0
fi
run_optional "classroom" "classroom courses update" gog classroom courses update "$course_id" --name "gogcli-smoke-updated-$TS" --json >/dev/null
run_optional "classroom" "classroom courses archive" gog classroom courses archive "$course_id" --json >/dev/null
run_optional "classroom" "classroom courses unarchive" gog classroom courses unarchive "$course_id" --json >/dev/null
echo "==> classroom topics create"
topic_json=$(gog classroom topics create "$course_id" --name "gogcli topic $TS" --json 2>/dev/null || true)
topic_id=$(extract_id "$topic_json")
echo "==> classroom announcements create"
announcement_json=$(gog classroom announcements create "$course_id" --text "gogcli announcement $TS" --json 2>/dev/null || true)
announcement_id=$(extract_id "$announcement_json")
echo "==> classroom materials create"
material_json=$(gog classroom materials create "$course_id" --title "gogcli material $TS" --json 2>/dev/null || true)
material_id=$(extract_id "$material_json")
echo "==> classroom coursework create"
coursework_json=$(gog classroom coursework create "$course_id" --title "gogcli coursework $TS" --type ASSIGNMENT --max-points 10 --json 2>/dev/null || true)
coursework_id=$(extract_id "$coursework_json")
if [ -n "$announcement_id" ]; then
run_optional "classroom" "classroom announcements update" gog classroom announcements update "$course_id" "$announcement_id" --text "gogcli announcement updated $TS" --json >/dev/null
run_optional "classroom" "classroom announcements delete" gog --force classroom announcements delete "$course_id" "$announcement_id" --json >/dev/null
fi
if [ -n "$material_id" ]; then
run_optional "classroom" "classroom materials update" gog classroom materials update "$course_id" "$material_id" --title "gogcli material updated $TS" --json >/dev/null
run_optional "classroom" "classroom materials delete" gog --force classroom materials delete "$course_id" "$material_id" --json >/dev/null
fi
if [ -n "$coursework_id" ]; then
run_optional "classroom" "classroom coursework update" gog classroom coursework update "$course_id" "$coursework_id" --title "gogcli coursework updated $TS" --json >/dev/null
run_optional "classroom" "classroom coursework delete" gog --force classroom coursework delete "$course_id" "$coursework_id" --json >/dev/null
fi
if [ -n "$topic_id" ]; then
run_optional "classroom" "classroom topics update" gog classroom topics update "$course_id" "$topic_id" --name "gogcli topic updated $TS" --json >/dev/null
run_optional "classroom" "classroom topics delete" gog --force classroom topics delete "$course_id" "$topic_id" --json >/dev/null
fi
if gog --force classroom courses delete "$course_id" --json >/dev/null; then
:
else
echo "Classroom course delete failed; manual cleanup needed: $course_id" >&2
if [ "${STRICT:-false}" = true ]; then
return 1
fi
fi
elif [ -n "${GOG_LIVE_CLASSROOM_CREATE:-}" ]; then
echo "==> classroom create (skipped; no account with course state permissions)"
fi
}