- 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
241 lines
6.9 KiB
Bash
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 "=========================================="
|