Major fixes and new features
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
198
tests/test_api.sh
Executable file
198
tests/test_api.sh
Executable file
@@ -0,0 +1,198 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Women Safety App - API Testing Script
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${BLUE}=======================================${NC}"
|
||||
echo -e "${BLUE}🔍 Women Safety App API Testing Script ${NC}"
|
||||
echo -e "${BLUE}=======================================${NC}"
|
||||
|
||||
# Base URLs
|
||||
GATEWAY_URL="http://localhost:8000"
|
||||
USER_URL="http://localhost:8001"
|
||||
EMERGENCY_URL="http://localhost:8002"
|
||||
LOCATION_URL="http://localhost:8003"
|
||||
CALENDAR_URL="http://localhost:8004"
|
||||
NOTIFICATION_URL="http://localhost:8005"
|
||||
|
||||
# Check if services are running
|
||||
check_service() {
|
||||
local url=$1
|
||||
local service_name=$2
|
||||
|
||||
echo -e "${YELLOW}🔎 Checking $service_name service...${NC}"
|
||||
# Проверяем оба возможных эндпоинта health
|
||||
if curl -s "$url/health" | grep -q "status.*healthy" || curl -s "$url/api/v1/health" | grep -q "status.*healthy"; then
|
||||
echo -e "${GREEN}✅ $service_name is running${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ $service_name is not available${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Test all services health
|
||||
test_health() {
|
||||
echo -e "${BLUE}📊 Testing service health endpoints...${NC}"
|
||||
|
||||
local errors=0
|
||||
check_service "$GATEWAY_URL" "API Gateway" || ((errors++))
|
||||
check_service "$USER_URL" "User Service" || ((errors++))
|
||||
check_service "$EMERGENCY_URL" "Emergency Service" || ((errors++))
|
||||
check_service "$LOCATION_URL" "Location Service" || ((errors++))
|
||||
check_service "$CALENDAR_URL" "Calendar Service" || ((errors++))
|
||||
check_service "$NOTIFICATION_URL" "Notification Service" || ((errors++))
|
||||
|
||||
if [ $errors -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ All services are healthy${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ $errors service(s) are not running properly${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Register a test user
|
||||
register_user() {
|
||||
echo -e "${YELLOW}👤 Registering test user...${NC}"
|
||||
local response
|
||||
response=$(curl -s -X POST "$GATEWAY_URL/api/v1/auth/register" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"username": "testuser",
|
||||
"email": "test@example.com",
|
||||
"password": "Test@1234",
|
||||
"full_name": "Test User",
|
||||
"phone_number": "+1234567890"
|
||||
}')
|
||||
|
||||
echo "$response" | jq
|
||||
if echo "$response" | grep -q "id"; then
|
||||
echo -e "${GREEN}✅ User registered successfully${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Failed to register user${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Login with test user
|
||||
login_user() {
|
||||
echo -e "${YELLOW}🔑 Logging in as test user...${NC}"
|
||||
local response
|
||||
response=$(curl -s -X POST "$GATEWAY_URL/api/v1/auth/login" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"username": "testuser",
|
||||
"password": "Test@1234"
|
||||
}')
|
||||
|
||||
echo "$response" | jq
|
||||
|
||||
# Extract token
|
||||
TOKEN=$(echo "$response" | jq -r '.access_token')
|
||||
if [ "$TOKEN" != "null" ] && [ -n "$TOKEN" ]; then
|
||||
echo -e "${GREEN}✅ Login successful${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ Login failed${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Test emergency alert
|
||||
create_emergency() {
|
||||
if [ -z "$TOKEN" ]; then
|
||||
echo -e "${RED}❌ No token available. Please login first.${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}🚨 Creating emergency alert...${NC}"
|
||||
local response
|
||||
response=$(curl -s -X POST "$GATEWAY_URL/api/v1/emergency/alerts" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-d '{
|
||||
"latitude": 37.7749,
|
||||
"longitude": -122.4194,
|
||||
"alert_type": "SOS",
|
||||
"message": "This is a test emergency alert"
|
||||
}')
|
||||
|
||||
echo "$response" | jq
|
||||
|
||||
if echo "$response" | grep -q "id"; then
|
||||
echo -e "${GREEN}✅ Emergency alert created successfully${NC}"
|
||||
# Extract emergency ID
|
||||
EMERGENCY_ID=$(echo "$response" | jq -r '.id')
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ Failed to create emergency alert${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Test updating location
|
||||
update_location() {
|
||||
if [ -z "$TOKEN" ]; then
|
||||
echo -e "${RED}❌ No token available. Please login first.${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}📍 Updating user location...${NC}"
|
||||
local response
|
||||
response=$(curl -s -X POST "$GATEWAY_URL/api/v1/locations/update" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-d '{
|
||||
"latitude": 37.7749,
|
||||
"longitude": -122.4194,
|
||||
"accuracy": 10.0
|
||||
}')
|
||||
|
||||
echo "$response" | jq
|
||||
|
||||
if echo "$response" | grep -q "success"; then
|
||||
echo -e "${GREEN}✅ Location updated successfully${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ Failed to update location${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Main test sequence
|
||||
run_tests() {
|
||||
test_health
|
||||
echo -e "${BLUE}---------------------------------------${NC}"
|
||||
|
||||
register_user
|
||||
echo -e "${BLUE}---------------------------------------${NC}"
|
||||
|
||||
login_user
|
||||
echo -e "${BLUE}---------------------------------------${NC}"
|
||||
|
||||
if [ -n "$TOKEN" ]; then
|
||||
update_location
|
||||
echo -e "${BLUE}---------------------------------------${NC}"
|
||||
|
||||
create_emergency
|
||||
echo -e "${BLUE}---------------------------------------${NC}"
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}✨ API testing completed${NC}"
|
||||
echo -e "${YELLOW}📖 API Documentation available at: ${GREEN}http://localhost:8000/docs${NC}"
|
||||
}
|
||||
|
||||
# Check for jq dependency
|
||||
if ! command -v jq &> /dev/null; then
|
||||
echo -e "${RED}❌ jq is required but not installed. Please install jq to continue.${NC}"
|
||||
echo -e "Run: ${YELLOW}sudo apt-get install jq${NC} (Debian/Ubuntu)"
|
||||
echo -e "or: ${YELLOW}brew install jq${NC} (macOS)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Run tests
|
||||
run_tests
|
||||
Reference in New Issue
Block a user