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
This commit is contained in:
parent
d673415bc6
commit
b59be78e4a
18 changed files with 2420 additions and 7 deletions
241
backend/test-solaria-v2.sh
Normal file
241
backend/test-solaria-v2.sh
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
#!/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 "=========================================="
|
||||
Loading…
Add table
Add a link
Reference in a new issue