167 lines
4.6 KiB
Bash
Executable File
167 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Universal test runner for Insforge backend tests
|
|
# This script runs all test files in the tests directory
|
|
|
|
# Don't exit on error - we want to run all tests even if some fail
|
|
# set -e # Exit on error
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
PREFLIGHT_ONLY=0
|
|
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--preflight-only)
|
|
PREFLIGHT_ONLY=1
|
|
;;
|
|
-h|--help)
|
|
echo "Usage: $0 [--preflight-only]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --preflight-only Check local E2E prerequisites, then exit."
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo -e "${RED}Unknown option: $arg${NC}"
|
|
echo "Usage: $0 [--preflight-only]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Get the directory where this script is located
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
# PROJECT_ROOT is the repository root, not just the backend directory
|
|
PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
|
|
BACKEND_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
|
|
# Load environment from .env file if it exists
|
|
if [ -f "$PROJECT_ROOT/.env" ]; then
|
|
echo "Loading environment from .env file..."
|
|
set -a # automatically export all variables
|
|
source "$PROJECT_ROOT/.env"
|
|
set +a # turn off automatic export
|
|
fi
|
|
|
|
echo "=========================================="
|
|
echo "Running all Insforge backend tests"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Export API configuration for all tests
|
|
export TEST_API_BASE="${TEST_API_BASE:-http://localhost:7130/api}"
|
|
|
|
# Check if root admin credentials are set
|
|
if [ -z "$ROOT_ADMIN_USERNAME" ] || [ -z "$ROOT_ADMIN_PASSWORD" ]; then
|
|
echo -e "${YELLOW}Warning: Root admin credentials not set. Using defaults.${NC}"
|
|
echo "Set with: export ROOT_ADMIN_USERNAME=admin ROOT_ADMIN_PASSWORD=your_password"
|
|
export ROOT_ADMIN_USERNAME="${ROOT_ADMIN_USERNAME:-admin}"
|
|
export ROOT_ADMIN_PASSWORD="${ROOT_ADMIN_PASSWORD:-change-this-password}"
|
|
echo ""
|
|
fi
|
|
|
|
# Check if running cloud tests
|
|
if [ -z "$AWS_S3_BUCKET" ]; then
|
|
echo -e "${YELLOW}Note: AWS_S3_BUCKET not set. Cloud/S3 tests will be skipped.${NC}"
|
|
echo ""
|
|
fi
|
|
|
|
# Export root admin credentials for tests
|
|
export TEST_ADMIN_USERNAME="$ROOT_ADMIN_USERNAME"
|
|
export TEST_ADMIN_PASSWORD="$ROOT_ADMIN_PASSWORD"
|
|
|
|
. "$SCRIPT_DIR/preflight.sh"
|
|
|
|
if ! run_preflight; then
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$PREFLIGHT_ONLY" -eq 1 ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Keep track of test results
|
|
TOTAL_TESTS=0
|
|
PASSED_TESTS=0
|
|
FAILED_TESTS=0
|
|
FAILED_TEST_NAMES=()
|
|
|
|
# Function to run a test and handle cleanup
|
|
run_test() {
|
|
local test_script=$1
|
|
local test_name=$(basename "$test_script" .sh)
|
|
|
|
echo -e "${YELLOW}Running $test_name...${NC}"
|
|
echo "----------------------------------------"
|
|
|
|
# Run the test in a subshell to isolate cleanup
|
|
(
|
|
# Run the test script
|
|
"$test_script"
|
|
)
|
|
|
|
local exit_code=$?
|
|
|
|
if [ $exit_code -eq 0 ]; then
|
|
echo -e "${GREEN}✓ $test_name passed${NC}"
|
|
PASSED_TESTS=$((PASSED_TESTS + 1))
|
|
else
|
|
echo -e "${RED}✗ $test_name failed${NC}"
|
|
FAILED_TESTS=$((FAILED_TESTS + 1))
|
|
FAILED_TEST_NAMES+=("$test_name")
|
|
fi
|
|
|
|
echo ""
|
|
# Don't return the exit code - we want to continue running other tests
|
|
return 0
|
|
}
|
|
|
|
# Run local tests
|
|
echo -e "${YELLOW}=== Running Local Tests ===${NC}"
|
|
for test_script in "$SCRIPT_DIR"/local/test-*.sh; do
|
|
if [ -f "$test_script" ] && [ -x "$test_script" ]; then
|
|
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
|
run_test "$test_script"
|
|
fi
|
|
done
|
|
|
|
# Run cloud tests if AWS is configured
|
|
if [ -n "$AWS_S3_BUCKET" ] && [ -n "$APP_KEY" ]; then
|
|
echo -e "${YELLOW}=== Running Cloud Tests ===${NC}"
|
|
for test_script in "$SCRIPT_DIR"/cloud/test-*.sh; do
|
|
if [ -f "$test_script" ] && [ -x "$test_script" ]; then
|
|
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
|
run_test "$test_script"
|
|
fi
|
|
done
|
|
else
|
|
echo -e "${YELLOW}Skipping cloud tests (AWS_S3_BUCKET or APP_KEY not configured)${NC}"
|
|
fi
|
|
|
|
# Summary
|
|
echo "=========================================="
|
|
echo "Test Summary"
|
|
echo "=========================================="
|
|
echo "Total tests: $TOTAL_TESTS"
|
|
echo -e "Passed: ${GREEN}$PASSED_TESTS${NC}"
|
|
echo -e "Failed: ${RED}$FAILED_TESTS${NC}"
|
|
|
|
if [ $FAILED_TESTS -gt 0 ]; then
|
|
echo ""
|
|
echo -e "${RED}Failed tests:${NC}"
|
|
for failed_test in "${FAILED_TEST_NAMES[@]}"; do
|
|
echo " - $failed_test"
|
|
done
|
|
exit 1
|
|
else
|
|
echo ""
|
|
echo -e "${GREEN}All tests passed!${NC}"
|
|
exit 0
|
|
fi
|