normogen/backend/test-solaria-v2.sh
goose b59be78e4a feat: implement health statistics tracking (Phase 2.7 Task 2)
- Add HealthStatistics model with 10 stat types
- Implement HealthStatisticsRepository
- Create 6 health stats API endpoints
- Add trend analysis with summary calculations
- Follow medication repository pattern

Status: 60% complete, needs compilation fixes
2026-03-07 16:24:18 -03:00

241 lines
6.9 KiB
Bash

#!/bin/bash
echo "=========================================="
echo "Phase 2.7 MVP - Comprehensive API Test"
echo "Running on Solaria server"
echo "=========================================="
echo ""
BASE_URL="http://localhost:8001"
MED_ID=""
RANDOM_NUM=0
# Test 1: Health Check
echo "🔍 Test 1: Health Check"
echo "Endpoint: GET /health"
RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" "$BASE_URL/health")
echo "$RESPONSE"
if echo "$RESPONSE" | grep -q "HTTP Status: 200"; then
echo "✅ PASS"
else
echo "❌ FAIL"
fi
echo ""
# Test 2: Register New User
echo "🔍 Test 2: Register New User"
echo "Endpoint: POST /api/auth/register"
RANDOM_NUM=$((10000 + RANDOM % 90000))
REGISTER_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" -X POST \
-H "Content-Type: application/json" \
-d '{
"email": "med-test-'$RANDOM_NUM'@example.com",
"username": "medtest'$RANDOM_NUM'",
"password": "password123",
"recovery_phrase": "recovery phrase"
}' \
"$BASE_URL/api/auth/register")
echo "$REGISTER_RESPONSE"
TOKEN=$(echo "$REGISTER_RESPONSE" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
USER_ID=$(echo "$REGISTER_RESPONSE" | grep -o '"user_id":"[^"]*"' | cut -d'"' -f4)
if echo "$REGISTER_RESPONSE" | grep -q "HTTP Status: 201"; then
echo "✅ PASS"
echo "User ID: $USER_ID"
else
echo "❌ FAIL"
fi
echo ""
# Test 3: Login with same credentials
echo "🔍 Test 3: Login"
echo "Endpoint: POST /api/auth/login"
LOGIN_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" -X POST \
-H "Content-Type: application/json" \
-d '{
"email": "med-test-'$RANDOM_NUM'@example.com",
"password": "password123"
}' \
"$BASE_URL/api/auth/login")
echo "$LOGIN_RESPONSE"
TOKEN=$(echo "$LOGIN_RESPONSE" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
if [ -n "$TOKEN" ]; then
echo "✅ PASS"
echo "Token obtained: ${TOKEN:0:50}..."
else
echo "❌ FAIL"
fi
echo ""
# Test 4: Create Medication
echo "🔍 Test 4: Create Medication"
echo "Endpoint: POST /api/medications"
CREATE_MED_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"profile_id": "'$USER_ID'",
"name": "Aspirin",
"dosage": "81mg",
"frequency": "Once daily",
"instructions": "Take with food",
"start_date": "2024-01-01",
"reminders": [{"time": "08:00", "days": ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]}]
}' \
"$BASE_URL/api/medications")
echo "$CREATE_MED_RESPONSE"
MED_ID=$(echo "$CREATE_MED_RESPONSE" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
if echo "$CREATE_MED_RESPONSE" | grep -q "HTTP Status: 201\|HTTP Status: 200"; then
echo "✅ PASS"
echo "Medication ID: $MED_ID"
else
echo "❌ FAIL"
fi
echo ""
# Test 5: List Medications
echo "🔍 Test 5: List Medications"
echo "Endpoint: GET /api/medications"
LIST_MEDS_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/api/medications")
echo "$LIST_MEDS_RESPONSE"
if echo "$LIST_MEDS_RESPONSE" | grep -q "HTTP Status: 200"; then
echo "✅ PASS"
else
echo "❌ FAIL"
fi
echo ""
# Test 6: Get Specific Medication
if [ -n "$MED_ID" ]; then
echo "🔍 Test 6: Get Specific Medication"
echo "Endpoint: GET /api/medications/$MED_ID"
GET_MED_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/api/medications/$MED_ID")
echo "$GET_MED_RESPONSE"
if echo "$GET_MED_RESPONSE" | grep -q "HTTP Status: 200"; then
echo "✅ PASS"
else
echo "❌ FAIL"
fi
echo ""
fi
# Test 7: Update Medication
if [ -n "$MED_ID" ]; then
echo "🔍 Test 7: Update Medication"
echo "Endpoint: POST /api/medications/$MED_ID"
UPDATE_MED_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"name": "Aspirin Updated",
"dosage": "100mg"
}' \
"$BASE_URL/api/medications/$MED_ID")
echo "$UPDATE_MED_RESPONSE"
if echo "$UPDATE_MED_RESPONSE" | grep -q "HTTP Status: 200"; then
echo "✅ PASS"
else
echo "❌ FAIL"
fi
echo ""
fi
# Test 8: Log Dose
if [ -n "$MED_ID" ]; then
echo "🔍 Test 8: Log Dose"
echo "Endpoint: POST /api/medications/$MED_ID/log"
LOG_DOSE_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"taken": true,
"scheduled_time": "2024-01-01T08:00:00Z",
"notes": "Taken with breakfast"
}' \
"$BASE_URL/api/medications/$MED_ID/log")
echo "$LOG_DOSE_RESPONSE"
if echo "$LOG_DOSE_RESPONSE" | grep -q "HTTP Status: 201\|HTTP Status: 200"; then
echo "✅ PASS"
else
echo "❌ FAIL"
fi
echo ""
fi
# Test 9: Get Adherence
if [ -n "$MED_ID" ]; then
echo "🔍 Test 9: Get Adherence"
echo "Endpoint: GET /api/medications/$MED_ID/adherence"
ADHERENCE_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/api/medications/$MED_ID/adherence")
echo "$ADHERENCE_RESPONSE"
if echo "$ADHERENCE_RESPONSE" | grep -q "HTTP Status: 200"; then
echo "✅ PASS"
else
echo "❌ FAIL"
fi
echo ""
fi
# Test 10: Unauthorized Access (No Token)
echo "🔍 Test 10: Unauthorized Access (No Token)"
echo "Endpoint: GET /api/medications"
UNAUTH_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" \
"$BASE_URL/api/medications")
echo "$UNAUTH_RESPONSE"
if echo "$UNAUTH_RESPONSE" | grep -q "HTTP Status: 401"; then
echo "✅ PASS - Correctly blocked unauthorized access"
else
echo "❌ FAIL - Should return 401"
fi
echo ""
# Test 11: Get User Profile
echo "🔍 Test 11: Get User Profile"
echo "Endpoint: GET /api/users/me"
PROFILE_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/api/users/me")
echo "$PROFILE_RESPONSE"
if echo "$PROFILE_RESPONSE" | grep -q "HTTP Status: 200"; then
echo "✅ PASS"
else
echo "❌ FAIL"
fi
echo ""
# Test 12: List Shares
echo "🔍 Test 12: List Shares"
echo "Endpoint: GET /api/shares"
SHARES_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/api/shares")
echo "$SHARES_RESPONSE"
if echo "$SHARES_RESPONSE" | grep -q "HTTP Status: 200"; then
echo "✅ PASS"
else
echo "❌ FAIL"
fi
echo ""
# Test 13: Get Sessions
echo "🔍 Test 13: Get Sessions"
echo "Endpoint: GET /api/sessions"
SESSIONS_RESPONSE=$(curl -s -w "\nHTTP Status: %{http_code}\n" \
-H "Authorization: Bearer $TOKEN" \
"$BASE_URL/api/sessions")
echo "$SESSIONS_RESPONSE"
if echo "$SESSIONS_RESPONSE" | grep -q "HTTP Status: 200"; then
echo "✅ PASS"
else
echo "❌ FAIL"
fi
echo ""
echo "=========================================="
echo "All Tests Complete!"
echo "=========================================="