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
219
test-mvp-phase-2.7.sh
Executable file
219
test-mvp-phase-2.7.sh
Executable file
|
|
@ -0,0 +1,219 @@
|
|||
#!/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 "=========================================="
|
||||
Loading…
Add table
Add a link
Reference in a new issue