workspace-v1/projects/gamilit/apps/backend/scripts/test-progress-endpoints.sh
Adrian Flores Cortes 967ab360bb Initial commit: Workspace v1 with 3-layer architecture
Structure:
- control-plane/: Registries, SIMCO directives, CI/CD templates
- projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics
- shared/: Libs catalog, knowledge-base

Key features:
- Centralized port, domain, database, and service registries
- 23 SIMCO directives + 6 fundamental principles
- NEXUS agent profiles with delegation rules
- Validation scripts for workspace integrity
- Dockerfiles for all services
- Path aliases for quick reference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:35:19 -06:00

324 lines
9.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
###############################################################################
# Admin Progress Module - Endpoints Testing Script
# Tests all 6 endpoints of the Admin Progress Module (Plan 3)
###############################################################################
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
API_URL="${API_URL:-http://localhost:3006}"
TOKEN="${ADMIN_TOKEN:-}"
# Test results
TESTS_PASSED=0
TESTS_FAILED=0
###############################################################################
# Helper Functions
###############################################################################
print_header() {
echo -e "\n${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
}
print_test() {
echo -e "${YELLOW}Testing:${NC} $1"
}
print_success() {
echo -e "${GREEN}✓ PASSED${NC} - $1"
((TESTS_PASSED++))
}
print_failure() {
echo -e "${RED}✗ FAILED${NC} - $1"
((TESTS_FAILED++))
}
print_info() {
echo -e "${BLUE}${NC} $1"
}
check_prerequisites() {
if [ -z "$TOKEN" ]; then
echo -e "${RED}Error: ADMIN_TOKEN environment variable is not set${NC}"
echo "Please set it with: export ADMIN_TOKEN='your-admin-jwt-token'"
exit 1
fi
if ! command -v jq &> /dev/null; then
echo -e "${YELLOW}Warning: jq is not installed. JSON output will not be formatted.${NC}"
fi
}
make_request() {
local method="$1"
local endpoint="$2"
local description="$3"
print_test "$description"
response=$(curl -s -w "\n%{http_code}" \
-X "$method" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"$API_URL$endpoint")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -eq 200 ] || [ "$http_code" -eq 201 ]; then
print_success "HTTP $http_code"
if command -v jq &> /dev/null; then
echo "$body" | jq '.' 2>/dev/null || echo "$body"
else
echo "$body"
fi
return 0
else
print_failure "HTTP $http_code"
echo "Response: $body"
return 1
fi
}
###############################################################################
# Test Cases
###############################################################################
test_progress_overview() {
print_header "TEST 1: Progress Overview"
make_request "GET" "/admin/progress/overview" "Get system-wide progress overview"
}
test_classroom_progress() {
print_header "TEST 2: Classroom Progress"
# First, get a classroom ID from the system
print_info "Fetching available classrooms..."
classrooms=$(curl -s \
-H "Authorization: Bearer $TOKEN" \
"$API_URL/admin/classrooms" | jq -r '.[0].id' 2>/dev/null)
if [ -n "$classrooms" ] && [ "$classrooms" != "null" ]; then
CLASSROOM_ID="$classrooms"
make_request "GET" "/admin/progress/classrooms/$CLASSROOM_ID" \
"Get progress for classroom $CLASSROOM_ID"
else
print_info "No classrooms found. Using sample UUID for testing..."
CLASSROOM_ID="123e4567-e89b-12d3-a456-426614174000"
make_request "GET" "/admin/progress/classrooms/$CLASSROOM_ID" \
"Get progress for classroom (may return 404 if not exists)"
fi
}
test_student_progress() {
print_header "TEST 3: Student Progress"
# First, get a student ID from the system
print_info "Fetching available students..."
students=$(curl -s \
-H "Authorization: Bearer $TOKEN" \
"$API_URL/admin/users?role=student" | jq -r '.[0].id' 2>/dev/null)
if [ -n "$students" ] && [ "$students" != "null" ]; then
STUDENT_ID="$students"
make_request "GET" "/admin/progress/students/$STUDENT_ID" \
"Get progress for student $STUDENT_ID"
# Test with query parameters
echo ""
if [ -n "$CLASSROOM_ID" ]; then
make_request "GET" "/admin/progress/students/$STUDENT_ID?classroom_id=$CLASSROOM_ID" \
"Get student progress filtered by classroom"
fi
else
print_info "No students found. Using sample UUID for testing..."
STUDENT_ID="123e4567-e89b-12d3-a456-426614174000"
make_request "GET" "/admin/progress/students/$STUDENT_ID" \
"Get progress for student (may return 404 if not exists)"
fi
}
test_module_progress() {
print_header "TEST 4: Module Progress Statistics"
# First, get a module ID from the system
print_info "Fetching available modules..."
modules=$(curl -s \
-H "Authorization: Bearer $TOKEN" \
"$API_URL/modules" | jq -r '.[0].id' 2>/dev/null)
if [ -n "$modules" ] && [ "$modules" != "null" ]; then
MODULE_ID="$modules"
make_request "GET" "/admin/progress/modules/$MODULE_ID" \
"Get statistics for module $MODULE_ID"
# Test with query parameters
echo ""
if [ -n "$CLASSROOM_ID" ]; then
make_request "GET" "/admin/progress/modules/$MODULE_ID?classroom_id=$CLASSROOM_ID" \
"Get module statistics filtered by classroom"
fi
else
print_info "No modules found. Using sample UUID for testing..."
MODULE_ID="123e4567-e89b-12d3-a456-426614174000"
make_request "GET" "/admin/progress/modules/$MODULE_ID" \
"Get statistics for module (may return 404 if not exists)"
fi
}
test_exercise_stats() {
print_header "TEST 5: Exercise Statistics"
# First, get an exercise ID from the system
print_info "Fetching available exercises..."
exercises=$(curl -s \
-H "Authorization: Bearer $TOKEN" \
"$API_URL/exercises" | jq -r '.[0].id' 2>/dev/null)
if [ -n "$exercises" ] && [ "$exercises" != "null" ]; then
EXERCISE_ID="$exercises"
make_request "GET" "/admin/progress/exercises/$EXERCISE_ID" \
"Get statistics for exercise $EXERCISE_ID"
else
print_info "No exercises found. Using sample UUID for testing..."
EXERCISE_ID="123e4567-e89b-12d3-a456-426614174000"
make_request "GET" "/admin/progress/exercises/$EXERCISE_ID" \
"Get statistics for exercise (may return 404 if not exists)"
fi
}
test_export_progress() {
print_header "TEST 6: Export Progress Data"
# Test exporting students
print_test "Export students progress to CSV"
response=$(curl -s -w "\n%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"$API_URL/admin/progress/export?type=students&format=csv")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -eq 200 ]; then
print_success "Students export - HTTP $http_code"
echo "First 5 lines of CSV:"
echo "$body" | head -n 5
else
print_failure "Students export - HTTP $http_code"
echo "Response: $body"
fi
echo ""
# Test exporting classrooms
print_test "Export classrooms progress to CSV"
response=$(curl -s -w "\n%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"$API_URL/admin/progress/export?type=classrooms&format=csv")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -eq 200 ]; then
print_success "Classrooms export - HTTP $http_code"
echo "First 5 lines of CSV:"
echo "$body" | head -n 5
else
print_failure "Classrooms export - HTTP $http_code"
echo "Response: $body"
fi
echo ""
# Test exporting modules
print_test "Export modules progress to CSV"
response=$(curl -s -w "\n%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"$API_URL/admin/progress/export?type=modules&format=csv")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -eq 200 ]; then
print_success "Modules export - HTTP $http_code"
echo "First 5 lines of CSV:"
echo "$body" | head -n 5
else
print_failure "Modules export - HTTP $http_code"
echo "Response: $body"
fi
echo ""
# Test with classroom filter
if [ -n "$CLASSROOM_ID" ]; then
print_test "Export students filtered by classroom"
response=$(curl -s -w "\n%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"$API_URL/admin/progress/export?type=students&classroom_id=$CLASSROOM_ID&format=csv")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -eq 200 ]; then
print_success "Filtered export - HTTP $http_code"
echo "First 5 lines of CSV:"
echo "$body" | head -n 5
else
print_failure "Filtered export - HTTP $http_code"
echo "Response: $body"
fi
fi
}
###############################################################################
# Main Execution
###############################################################################
main() {
echo -e "${GREEN}╔════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ Admin Progress Module - Endpoint Testing Suite ║${NC}"
echo -e "${GREEN}╚════════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo "API URL: $API_URL"
echo ""
check_prerequisites
test_progress_overview
test_classroom_progress
test_student_progress
test_module_progress
test_exercise_stats
test_export_progress
# Summary
print_header "TEST SUMMARY"
TOTAL_TESTS=$((TESTS_PASSED + TESTS_FAILED))
echo -e "Total Tests: $TOTAL_TESTS"
echo -e "${GREEN}Passed: $TESTS_PASSED${NC}"
echo -e "${RED}Failed: $TESTS_FAILED${NC}"
if [ $TESTS_FAILED -eq 0 ]; then
echo -e "\n${GREEN}✓ All tests passed!${NC}"
exit 0
else
echo -e "\n${RED}✗ Some tests failed${NC}"
exit 1
fi
}
# Run main function
main