Files
bakery-ia/scripts/test_deletion_system.sh
2025-10-31 11:54:19 +01:00

226 lines
6.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ================================================================
# Tenant Deletion System - Integration Test Script
# ================================================================
# Tests all 12 services' deletion endpoints
# Usage: ./scripts/test_deletion_system.sh [tenant_id]
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
TENANT_ID="${1:-dbc2128a-7539-470c-94b9-c1e37031bd77}" # Default demo tenant
SERVICE_TOKEN="${SERVICE_TOKEN:-demo_service_token}"
# Service URLs (update these based on your environment)
ORDERS_URL="${ORDERS_URL:-http://localhost:8000/api/v1/orders}"
INVENTORY_URL="${INVENTORY_URL:-http://localhost:8001/api/v1/inventory}"
RECIPES_URL="${RECIPES_URL:-http://localhost:8002/api/v1/recipes}"
SALES_URL="${SALES_URL:-http://localhost:8003/api/v1/sales}"
PRODUCTION_URL="${PRODUCTION_URL:-http://localhost:8004/api/v1/production}"
SUPPLIERS_URL="${SUPPLIERS_URL:-http://localhost:8005/api/v1/suppliers}"
POS_URL="${POS_URL:-http://localhost:8006/api/v1/pos}"
EXTERNAL_URL="${EXTERNAL_URL:-http://localhost:8007/api/v1/external}"
FORECASTING_URL="${FORECASTING_URL:-http://localhost:8008/api/v1/forecasting}"
TRAINING_URL="${TRAINING_URL:-http://localhost:8009/api/v1/training}"
ALERT_PROCESSOR_URL="${ALERT_PROCESSOR_URL:-http://localhost:8010/api/v1/alerts}"
NOTIFICATION_URL="${NOTIFICATION_URL:-http://localhost:8011/api/v1/notifications}"
# Test results
TOTAL_TESTS=0
PASSED_TESTS=0
FAILED_TESTS=0
declare -a FAILED_SERVICES
# Helper functions
print_header() {
echo -e "${BLUE}================================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}================================================${NC}"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_info() {
echo -e "${BLUE}${NC} $1"
}
# Test individual service deletion preview
test_service_preview() {
local service_name=$1
local service_url=$2
local endpoint_path=$3
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo ""
print_info "Testing $service_name service..."
local full_url="${service_url}${endpoint_path}/tenant/${TENANT_ID}/deletion-preview"
# Make request
response=$(curl -k -s -w "\nHTTP_STATUS:%{http_code}" \
-H "Authorization: Bearer ${SERVICE_TOKEN}" \
-H "X-Service-Token: ${SERVICE_TOKEN}" \
"${full_url}" 2>&1)
# Extract HTTP status
http_status=$(echo "$response" | grep "HTTP_STATUS" | cut -d':' -f2)
body=$(echo "$response" | sed '/HTTP_STATUS/d')
if [ "$http_status" = "200" ]; then
# Parse total records if available
total_records=$(echo "$body" | grep -o '"total_records":[0-9]*' | cut -d':' -f2 || echo "N/A")
print_success "$service_name: HTTP $http_status (Records: $total_records)"
PASSED_TESTS=$((PASSED_TESTS + 1))
# Show preview details if verbose
if [ "${VERBOSE:-0}" = "1" ]; then
echo "$body" | jq '.' 2>/dev/null || echo "$body"
fi
else
print_error "$service_name: HTTP $http_status"
FAILED_TESTS=$((FAILED_TESTS + 1))
FAILED_SERVICES+=("$service_name")
# Show error details
echo " URL: $full_url"
echo " Response: $body" | head -n 5
fi
}
# Main test execution
main() {
print_header "Tenant Deletion System - Integration Tests"
print_info "Testing tenant: $TENANT_ID"
print_info "Using service token: ${SERVICE_TOKEN:0:20}..."
echo ""
# Test all services
print_header "Testing Individual Services (12 total)"
test_service_preview "Orders" "$ORDERS_URL" "/orders"
test_service_preview "Inventory" "$INVENTORY_URL" "/inventory"
test_service_preview "Recipes" "$RECIPES_URL" "/recipes"
test_service_preview "Sales" "$SALES_URL" "/sales"
test_service_preview "Production" "$PRODUCTION_URL" "/production"
test_service_preview "Suppliers" "$SUPPLIERS_URL" "/suppliers"
test_service_preview "POS" "$POS_URL" "/pos"
test_service_preview "External" "$EXTERNAL_URL" "/external"
test_service_preview "Forecasting" "$FORECASTING_URL" "/forecasting"
test_service_preview "Training" "$TRAINING_URL" "/training"
test_service_preview "Alert Processor" "$ALERT_PROCESSOR_URL" "/alerts"
test_service_preview "Notification" "$NOTIFICATION_URL" "/notifications"
# Print summary
echo ""
print_header "Test Summary"
echo -e "Total Tests: $TOTAL_TESTS"
echo -e "${GREEN}Passed: $PASSED_TESTS${NC}"
if [ $FAILED_TESTS -gt 0 ]; then
echo -e "${RED}Failed: $FAILED_TESTS${NC}"
echo ""
print_error "Failed services:"
for service in "${FAILED_SERVICES[@]}"; do
echo " - $service"
done
echo ""
print_warning "Some services are not accessible or not implemented."
print_info "Make sure all services are running and URLs are correct."
exit 1
else
echo -e "${GREEN}Failed: $FAILED_TESTS${NC}"
echo ""
print_success "All services passed! ✨"
exit 0
fi
}
# Check dependencies
check_dependencies() {
if ! command -v curl &> /dev/null; then
print_error "curl is required but not installed."
exit 1
fi
if ! command -v jq &> /dev/null; then
print_warning "jq not found. Install for better output formatting."
fi
}
# Show usage
show_usage() {
cat << EOF
Usage: $0 [OPTIONS] [tenant_id]
Test the tenant deletion system across all 12 microservices.
Options:
-h, --help Show this help message
-v, --verbose Show detailed response bodies
-t, --tenant ID Specify tenant ID to test (default: demo tenant)
Environment Variables:
SERVICE_TOKEN Service authentication token
*_URL Individual service URLs (e.g., ORDERS_URL)
Examples:
# Test with default demo tenant
$0
# Test specific tenant
$0 abc-123-def-456
# Test with verbose output
VERBOSE=1 $0
# Test with custom service URLs
ORDERS_URL=http://orders:8000/api/v1/orders $0
EOF
}
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_usage
exit 0
;;
-v|--verbose)
VERBOSE=1
shift
;;
-t|--tenant)
TENANT_ID="$2"
shift 2
;;
*)
TENANT_ID="$1"
shift
;;
esac
done
# Run tests
check_dependencies
main