sel-chat-coach / scripts /verify-backend.sh
tblaisaacliao's picture
refactor: Remove studentName/coachName from database, derive from templates
7162b02
#!/bin/bash
# Backend API verification script
set -e
BASE_URL=${BASE_URL:-http://localhost:3000}
PASSWORD=${BASIC_AUTH_PASSWORD:-cz-2025}
TEST_USER="backend_verify_$(date +%s)"
echo "๐Ÿ” Verifying backend APIs..."
echo "Base URL: $BASE_URL"
echo ""
# 1. Health check
echo "โœ… Testing /api/health"
HEALTH=$(curl -s "$BASE_URL/api/health")
echo "$HEALTH" | jq .
if echo "$HEALTH" | jq -e '.status == "healthy"' > /dev/null; then
echo "โœ… Health check passed"
else
echo "โŒ Health check failed"
exit 1
fi
echo ""
# 2. Register user
echo "โœ… Testing /api/auth/register"
REGISTER=$(curl -s -X POST "$BASE_URL/api/auth/register" \
-H "Content-Type: application/json" \
-d "{\"username\":\"$TEST_USER\"}")
echo "$REGISTER" | jq .
USER_ID=$(echo "$REGISTER" | jq -r '.user.id')
if [ -n "$USER_ID" ] && [ "$USER_ID" != "null" ]; then
echo "โœ… User registered: $TEST_USER (ID: $USER_ID)"
else
echo "โŒ User registration failed"
exit 1
fi
echo ""
# 3. Get personalities
echo "โœ… Testing /api/personalities"
PERSONALITIES=$(curl -s "$BASE_URL/api/personalities")
echo "$PERSONALITIES" | jq .
PERSONALITY_COUNT=$(echo "$PERSONALITIES" | jq '.personalities | length')
if [ "$PERSONALITY_COUNT" -ge 3 ]; then
echo "โœ… Personalities loaded: $PERSONALITY_COUNT types"
else
echo "โŒ Personalities endpoint failed"
exit 1
fi
echo ""
# 4. Get coach types
echo "โœ… Testing /api/coach/types"
COACHES=$(curl -s "$BASE_URL/api/coach/types")
echo "$COACHES" | jq .
COACH_COUNT=$(echo "$COACHES" | jq '.coaches | length')
if [ "$COACH_COUNT" -eq 3 ]; then
echo "โœ… Coach types loaded: $COACH_COUNT coaches"
else
echo "โŒ Coach types endpoint failed"
exit 1
fi
echo ""
# 5. Get conversations (with auth)
echo "โœ… Testing /api/conversations (with auth)"
AUTH_HEADER=$(echo -n "$TEST_USER:$PASSWORD" | base64)
CONVERSATIONS=$(curl -s "$BASE_URL/api/conversations" \
-H "Authorization: Basic $AUTH_HEADER")
echo "$CONVERSATIONS" | jq .
CONV_COUNT=$(echo "$CONVERSATIONS" | jq '.conversations | length')
if [ "$CONV_COUNT" -ge 0 ]; then
echo "โœ… Conversations endpoint: $CONV_COUNT conversations"
else
echo "โŒ Conversations endpoint failed"
exit 1
fi
echo ""
# 6. Create conversation
echo "โœ… Testing /api/conversations/create"
CREATE_CONV=$(curl -s -X POST "$BASE_URL/api/conversations/create" \
-H "Content-Type: application/json" \
-H "Authorization: Basic $AUTH_HEADER" \
-d '{"studentPromptId":"grade_3","coachPromptId":"balanced","include3ConversationSummary":false}')
echo "$CREATE_CONV" | jq .
CONV_ID=$(echo "$CREATE_CONV" | jq -r '.conversation.id')
if [ -n "$CONV_ID" ] && [ "$CONV_ID" != "null" ]; then
echo "โœ… Conversation created: $CONV_ID"
else
echo "โŒ Conversation creation failed"
exit 1
fi
echo ""
# 7. Get conversation messages
echo "โœ… Testing /api/conversations/$CONV_ID/messages"
MESSAGES=$(curl -s "$BASE_URL/api/conversations/$CONV_ID/messages" \
-H "Authorization: Basic $AUTH_HEADER")
echo "$MESSAGES" | jq .
MSG_COUNT=$(echo "$MESSAGES" | jq '.messages | length')
if [ "$MSG_COUNT" -ge 0 ]; then
echo "โœ… Messages endpoint: $MSG_COUNT messages"
else
echo "โŒ Messages endpoint failed"
exit 1
fi
echo ""
# 8. Create coach-direct conversation (for persistence test)
echo "โœ… Testing coach-direct conversation creation"
CREATE_COACH=$(curl -s -X POST "$BASE_URL/api/conversations/create" \
-H "Content-Type: application/json" \
-H "Authorization: Basic $AUTH_HEADER" \
-d '{"studentPromptId":"coach_direct","coachPromptId":"balanced","include3ConversationSummary":false,"title":"่ซฎ่ฉขๆ•™็ทด"}')
echo "$CREATE_COACH" | jq .
COACH_CONV_ID=$(echo "$CREATE_COACH" | jq -r '.conversation.id')
if [ -n "$COACH_CONV_ID" ] && [ "$COACH_CONV_ID" != "null" ]; then
echo "โœ… Coach-direct conversation created: $COACH_CONV_ID"
else
echo "โŒ Coach-direct conversation creation failed"
exit 1
fi
echo ""
# 9. Verify coach conversation in list
echo "โœ… Verifying coach conversation filtering"
ALL_CONVS=$(curl -s "$BASE_URL/api/conversations" \
-H "Authorization: Basic $AUTH_HEADER")
TOTAL_CONVS=$(echo "$ALL_CONVS" | jq '.conversations | length')
COACH_DIRECT_COUNT=$(echo "$ALL_CONVS" | jq '[.conversations[] | select(.studentPromptId == "coach_direct")] | length')
echo "Total conversations: $TOTAL_CONVS"
echo "Coach-direct conversations: $COACH_DIRECT_COUNT"
if [ "$COACH_DIRECT_COUNT" -ge 1 ]; then
echo "โœ… Coach-direct conversation exists in list"
else
echo "โŒ Coach-direct conversation not found"
exit 1
fi
echo ""
echo "โœ…โœ…โœ… All backend tests passed! โœ…โœ…โœ…"
echo ""
echo "Test user: $TEST_USER"
echo "Test conversation: $CONV_ID"
echo "Coach conversation: $COACH_CONV_ID"