- 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
219 lines
7 KiB
Bash
Executable file
219 lines
7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
API_URL="http://solaria.solivarez.com.ar:8001"
|
|
USER_EMAIL="med-test-${RANDOM}@example.com"
|
|
USER_NAME="medtest${RANDOM}"
|
|
|
|
echo "=========================================="
|
|
echo "Phase 2.7 MVP - Comprehensive API Test"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Test 1: Health Check
|
|
echo "🔍 Test 1: Health Check"
|
|
echo "Endpoint: GET /health"
|
|
HEALTH=$(curl -s -w "\nHTTP_CODE:%{http_code}" ${API_URL}/health)
|
|
HTTP_CODE=$(echo "$HEALTH" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$HEALTH" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✅ PASS"
|
|
else
|
|
echo "❌ FAIL"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 2: Register User
|
|
echo "🔍 Test 2: Register New User"
|
|
echo "Endpoint: POST /api/auth/register"
|
|
REGISTER=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST ${API_URL}/api/auth/register \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"email":"'${USER_EMAIL}'","username":"'${USER_NAME}'","password":"SecurePass123!","first_name":"Test","last_name":"User"}')
|
|
HTTP_CODE=$(echo "$REGISTER" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$REGISTER" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "201" ]; then
|
|
echo "✅ PASS"
|
|
# Extract user ID
|
|
USER_ID=$(echo "$BODY" | grep -o '"id":"[^"]*' | cut -d'"' -f4)
|
|
echo "User ID: $USER_ID"
|
|
else
|
|
echo "❌ FAIL"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 3: Login
|
|
echo "🔍 Test 3: Login"
|
|
echo "Endpoint: POST /api/auth/login"
|
|
LOGIN=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST ${API_URL}/api/auth/login \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"email":"'${USER_EMAIL}'","password":"SecurePass123!"}')
|
|
HTTP_CODE=$(echo "$LOGIN" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$LOGIN" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✅ PASS"
|
|
# Extract token
|
|
TOKEN=$(echo "$BODY" | grep -o '"access_token":"[^"]*' | cut -d'"' -f4)
|
|
echo "Token obtained: ${TOKEN:0:20}..."
|
|
else
|
|
echo "❌ FAIL"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Test 4: Create Medication
|
|
echo "🔍 Test 4: Create Medication"
|
|
echo "Endpoint: POST /api/medications"
|
|
CREATE_MED=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST ${API_URL}/api/medications \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $TOKEN" \
|
|
-d '{"profile_id":null,"name":"Lisinopril","dosage":"10mg","frequency":"once_daily","instructions":"Take with breakfast","start_date":"2026-03-01"}')
|
|
HTTP_CODE=$(echo "$CREATE_MED" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$CREATE_MED" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "201" ]; then
|
|
echo "✅ PASS"
|
|
MED_ID=$(echo "$BODY" | grep -o '"id":"[^"]*' | head -1 | cut -d'"' -f4)
|
|
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=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/medications \
|
|
-H "Authorization: Bearer $TOKEN")
|
|
HTTP_CODE=$(echo "$LIST_MEDS" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$LIST_MEDS" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✅ PASS"
|
|
else
|
|
echo "❌ FAIL"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 6: Get Specific Medication
|
|
echo "🔍 Test 6: Get Specific Medication"
|
|
echo "Endpoint: GET /api/medications/$MED_ID"
|
|
GET_MED=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/medications/$MED_ID \
|
|
-H "Authorization: Bearer $TOKEN")
|
|
HTTP_CODE=$(echo "$GET_MED" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$GET_MED" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✅ PASS"
|
|
else
|
|
echo "❌ FAIL"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 7: Update Medication
|
|
echo "🔍 Test 7: Update Medication"
|
|
echo "Endpoint: PUT /api/medications/$MED_ID"
|
|
UPDATE_MED=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X PUT ${API_URL}/api/medications/$MED_ID \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $TOKEN" \
|
|
-d '{"dosage":"20mg","instructions":"Take with breakfast and dinner"}')
|
|
HTTP_CODE=$(echo "$UPDATE_MED" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$UPDATE_MED" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✅ PASS"
|
|
else
|
|
echo "❌ FAIL"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 8: Log Dose
|
|
echo "🔍 Test 8: Log Dose"
|
|
echo "Endpoint: POST /api/medications/$MED_ID/log"
|
|
LOG_DOSE=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST ${API_URL}/api/medications/$MED_ID/log \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $TOKEN" \
|
|
-d '{"taken":true,"scheduled_time":"2026-03-07T08:00:00Z","notes":"Taken with breakfast"}')
|
|
HTTP_CODE=$(echo "$LOG_DOSE" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$LOG_DOSE" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "201" ]; then
|
|
echo "✅ PASS"
|
|
else
|
|
echo "❌ FAIL"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 9: Get Adherence
|
|
echo "🔍 Test 9: Get Adherence"
|
|
echo "Endpoint: GET /api/medications/$MED_ID/adherence"
|
|
ADHERENCE=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/medications/$MED_ID/adherence \
|
|
-H "Authorization: Bearer $TOKEN")
|
|
HTTP_CODE=$(echo "$ADHERENCE" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$ADHERENCE" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✅ PASS"
|
|
ADH_PCT=$(echo "$BODY" | grep -o '"adherence_percentage":[0-9.]*' | cut -d: -f2)
|
|
echo "Adherence: $ADH_PCT%"
|
|
else
|
|
echo "❌ FAIL"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 10: Unauthorized Access
|
|
echo "🔍 Test 10: Unauthorized Access (No Token)"
|
|
echo "Endpoint: GET /api/medications"
|
|
UNAUTH=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/medications)
|
|
HTTP_CODE=$(echo "$UNAUTH" | grep "HTTP_CODE" | cut -d: -f2)
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "401" ]; then
|
|
echo "✅ PASS - Correctly blocked unauthorized access"
|
|
else
|
|
echo "❌ FAIL - Should return 401"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 11: Get Profile
|
|
echo "🔍 Test 11: Get User Profile"
|
|
echo "Endpoint: GET /api/users/me"
|
|
PROFILE=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X GET ${API_URL}/api/users/me \
|
|
-H "Authorization: Bearer $TOKEN")
|
|
HTTP_CODE=$(echo "$PROFILE" | grep "HTTP_CODE" | cut -d: -f2)
|
|
BODY=$(echo "$PROFILE" | sed '/HTTP_CODE/d')
|
|
echo "Response: $BODY"
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "200" ]; then
|
|
echo "✅ PASS"
|
|
else
|
|
echo "❌ FAIL"
|
|
fi
|
|
echo ""
|
|
|
|
# Test 12: Delete Medication
|
|
echo "🔍 Test 12: Delete Medication"
|
|
echo "Endpoint: POST /api/medications/$MED_ID/delete"
|
|
DELETE_MED=$(curl -s -w "\nHTTP_CODE:%{http_code}" -X POST ${API_URL}/api/medications/$MED_ID/delete \
|
|
-H "Authorization: Bearer $TOKEN")
|
|
HTTP_CODE=$(echo "$DELETE_MED" | grep "HTTP_CODE" | cut -d: -f2)
|
|
echo "HTTP Status: $HTTP_CODE"
|
|
if [ "$HTTP_CODE" = "204" ]; then
|
|
echo "✅ PASS - No content (successful deletion)"
|
|
else
|
|
echo "❌ FAIL"
|
|
fi
|
|
echo ""
|
|
|
|
echo "=========================================="
|
|
echo "Test Complete!"
|
|
echo "=========================================="
|