193 lines
5.6 KiB
Bash
Executable File
193 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# =====================================================================
|
|
# run-tests.sh - Main test runner for the resume site
|
|
# =====================================================================
|
|
# This script starts a local Caddy server and runs all tests against it
|
|
# =====================================================================
|
|
|
|
set -e # Exit on any error
|
|
|
|
# Define constants
|
|
TEST_PORT=8080
|
|
CADDY_DIR="docker/resume"
|
|
CADDY_FILE="Caddyfile.local"
|
|
TESTS_DIR="$(dirname "$0")"
|
|
LOG_FILE="$TESTS_DIR/test-run.log"
|
|
|
|
# Function to clean up processes on exit
|
|
cleanup() {
|
|
echo "Cleaning up..."
|
|
# Find and kill any Caddy processes we started
|
|
if [ -f "$TESTS_DIR/.caddy.pid" ]; then
|
|
CADDY_PID=$(cat "$TESTS_DIR/.caddy.pid")
|
|
if ps -p $CADDY_PID > /dev/null; then
|
|
echo "Stopping Caddy server (PID: $CADDY_PID)"
|
|
kill $CADDY_PID
|
|
fi
|
|
rm "$TESTS_DIR/.caddy.pid"
|
|
fi
|
|
|
|
echo "Cleanup complete"
|
|
}
|
|
|
|
# Register the cleanup function to run on exit
|
|
trap cleanup EXIT
|
|
|
|
# Start the Caddy server
|
|
start_caddy() {
|
|
echo "Starting Caddy server on port $TEST_PORT..."
|
|
|
|
# Navigate to the Caddy directory
|
|
cd "$CADDY_DIR"
|
|
|
|
# Check if Caddyfile.local exists, if not, create it from Caddyfile
|
|
if [ ! -f "$CADDY_FILE" ]; then
|
|
echo "Creating $CADDY_FILE from Caddyfile..."
|
|
cp Caddyfile "$CADDY_FILE"
|
|
# Modify the Caddyfile.local to use the test port
|
|
sed -i '' "s/:80/:$TEST_PORT/g" "$CADDY_FILE"
|
|
fi
|
|
|
|
# Start Caddy in the background using the local config
|
|
echo "Running: caddy run --config $CADDY_FILE"
|
|
mkdir -p $(dirname "$LOG_FILE") && caddy run --config "$CADDY_FILE" > "$LOG_FILE" 2>&1 &
|
|
CADDY_PID=$!
|
|
mkdir -p "$TESTS_DIR" && echo $CADDY_PID > "$TESTS_DIR/.caddy.pid"
|
|
|
|
# Return to the original directory
|
|
cd - > /dev/null
|
|
|
|
# Wait for Caddy to start
|
|
echo "Waiting for Caddy to start..."
|
|
sleep 2
|
|
|
|
# Check if Caddy is running
|
|
if ! ps -p $CADDY_PID > /dev/null; then
|
|
echo "Failed to start Caddy server. Check $LOG_FILE for details."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Caddy server started with PID: $CADDY_PID"
|
|
|
|
# Wait a bit more to ensure Caddy is fully initialized
|
|
sleep 3
|
|
}
|
|
|
|
# Run Node.js server for tests that require it
|
|
start_node_server() {
|
|
if [ -f "$TESTS_DIR/serve.js" ]; then
|
|
echo "Starting Node.js server for tests..."
|
|
node "$TESTS_DIR/serve.js" > "$TESTS_DIR/node-server.log" 2>&1 &
|
|
NODE_SERVER_PID=$!
|
|
echo $NODE_SERVER_PID > "$TESTS_DIR/.node-server.pid"
|
|
|
|
# Wait for Node.js server to start
|
|
sleep 2
|
|
|
|
# Check if Node.js server is running
|
|
if ! ps -p $NODE_SERVER_PID > /dev/null; then
|
|
echo "Failed to start Node.js server. Check $TESTS_DIR/node-server.log for details."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Node.js server started with PID: $NODE_SERVER_PID"
|
|
fi
|
|
}
|
|
|
|
# Clean up Node.js server
|
|
cleanup_node_server() {
|
|
if [ -f "$TESTS_DIR/.node-server.pid" ]; then
|
|
NODE_SERVER_PID=$(cat "$TESTS_DIR/.node-server.pid")
|
|
if ps -p $NODE_SERVER_PID > /dev/null; then
|
|
echo "Stopping Node.js server (PID: $NODE_SERVER_PID)"
|
|
kill $NODE_SERVER_PID
|
|
fi
|
|
rm "$TESTS_DIR/.node-server.pid"
|
|
fi
|
|
}
|
|
|
|
# Run shell script tests
|
|
run_shell_tests() {
|
|
echo "Running shell script tests..."
|
|
|
|
# Run unit tests
|
|
echo "Running unit tests..."
|
|
if [ -d "$TESTS_DIR/unit" ] && [ "$(ls -A "$TESTS_DIR/unit")" ]; then
|
|
for test in "$TESTS_DIR/unit"/*.sh; do
|
|
if [ -f "$test" ] && [ -x "$test" ]; then
|
|
echo "Running unit test: $(basename "$test")"
|
|
"$test" || echo "FAILED: $(basename "$test")"
|
|
fi
|
|
done
|
|
else
|
|
echo "No unit tests found."
|
|
fi
|
|
|
|
# Run integration tests
|
|
echo "Running integration tests..."
|
|
if [ -d "$TESTS_DIR/integration" ] && [ "$(ls -A "$TESTS_DIR/integration")" ]; then
|
|
for test in "$TESTS_DIR/integration"/*.sh; do
|
|
if [ -f "$test" ] && [ -x "$test" ]; then
|
|
echo "Running integration test: $(basename "$test")"
|
|
"$test" "http://localhost:$TEST_PORT" || echo "FAILED: $(basename "$test")"
|
|
fi
|
|
done
|
|
|
|
# Check for subdirectories
|
|
for dir in "$TESTS_DIR/integration"/*/; do
|
|
if [ -d "$dir" ]; then
|
|
for test in "$dir"*.sh; do
|
|
if [ -f "$test" ] && [ -x "$test" ]; then
|
|
echo "Running integration test: $(basename "$test")"
|
|
"$test" "http://localhost:$TEST_PORT" || echo "FAILED: $(basename "$test")"
|
|
fi
|
|
done
|
|
fi
|
|
done
|
|
else
|
|
echo "No integration tests found."
|
|
fi
|
|
|
|
# Run e2e tests
|
|
echo "Running e2e tests..."
|
|
if [ -d "$TESTS_DIR/e2e" ] && [ "$(ls -A "$TESTS_DIR/e2e")" ]; then
|
|
for test in "$TESTS_DIR/e2e"/*.sh; do
|
|
if [ -f "$test" ] && [ -x "$test" ]; then
|
|
echo "Running e2e test: $(basename "$test")"
|
|
"$test" "http://localhost:$TEST_PORT" || echo "FAILED: $(basename "$test")"
|
|
fi
|
|
done
|
|
else
|
|
echo "No e2e tests found."
|
|
fi
|
|
}
|
|
|
|
# Run JavaScript tests
|
|
run_js_tests() {
|
|
echo "Running JavaScript tests..."
|
|
|
|
# Check if Playwright is installed
|
|
if command -v npx &> /dev/null && npx playwright --version &> /dev/null; then
|
|
# Run Playwright tests
|
|
echo "Running Playwright tests..."
|
|
npx playwright test || echo "FAILED: Playwright tests"
|
|
else
|
|
echo "Playwright not found, skipping Playwright tests."
|
|
fi
|
|
|
|
# Run Lighthouse tests if available
|
|
if [ -f "$TESTS_DIR/lighthouse.js" ]; then
|
|
echo "Running Lighthouse tests..."
|
|
node "$TESTS_DIR/lighthouse.js" "http://localhost:$TEST_PORT" || echo "FAILED: Lighthouse tests"
|
|
fi
|
|
}
|
|
|
|
# Main execution
|
|
echo "=== Starting Test Suite ==="
|
|
start_caddy
|
|
start_node_server
|
|
run_shell_tests
|
|
run_js_tests
|
|
cleanup_node_server
|
|
echo "=== Test Suite Completed ==="
|