workspace/projects/gamilit/apps/backend/scripts/test-progress-endpoints.sh
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 10:44:23 -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