resume/tests/integration/functional-test.sh

123 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
# =====================================================================
# functional-test.sh - Test the main functionality of the website
# =====================================================================
# This script checks if the main features of the website are working
# =====================================================================
# Check if base URL is provided
if [ -z "$1" ]; then
BASE_URL="http://localhost:8080"
else
BASE_URL="$1"
fi
echo "=== Testing Website Functionality ==="
echo "Using base URL: $BASE_URL"
# Array to track failures
FAILURES=0
# Function to test a page and check for expected content
test_page() {
local url="$1"
local name="$2"
local expected_title="$3"
local expected_content="$4"
echo "Testing $name page at $url"
# Check if the page loads
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" "$url")
if [ "$RESPONSE" -eq 200 ]; then
echo "$name page loads successfully (HTTP $RESPONSE)"
else
echo "$name page failed to load (HTTP $RESPONSE)"
FAILURES=$((FAILURES+1))
return
fi
# Check page title
TITLE=$(curl -s "$url" | grep -o "<title>.*</title>" | sed 's/<title>\(.*\)<\/title>/\1/')
if [[ "$TITLE" == *"$expected_title"* ]]; then
echo "✅ Page title matches: $TITLE"
else
echo "❌ Page title doesn't match. Expected: $expected_title, Got: $TITLE"
FAILURES=$((FAILURES+1))
fi
# Check for expected content
if [ -n "$expected_content" ]; then
CONTENT=$(curl -s "$url")
if echo "$CONTENT" | grep -q "$expected_content"; then
echo "✅ Page contains expected content: $expected_content"
else
echo "❌ Page doesn't contain expected content: $expected_content"
FAILURES=$((FAILURES+1))
fi
fi
echo "---"
}
# Test main page
test_page "$BASE_URL/" "Main" "Colin Knapp - Portfolio" "Colin Knapp"
# Test stories page
test_page "$BASE_URL/stories/" "Stories" "Stories" "Case Studies"
# Test CSV tool
test_page "$BASE_URL/one-pager-tools/csv-tool.html" "CSV Tool" "CSV Viewer" "Paste your CSV data here"
# Check for JavaScript files
echo "Checking for required JavaScript files..."
JS_FILES=("theme.js" "includes.js" "utils.js")
for js_file in "${JS_FILES[@]}"; do
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" "$BASE_URL/$js_file")
if [ "$RESPONSE" -eq 200 ]; then
echo "$js_file loads successfully (HTTP $RESPONSE)"
else
echo "$js_file failed to load (HTTP $RESPONSE)"
FAILURES=$((FAILURES+1))
fi
done
# Check for CSS files
echo "Checking for required CSS files..."
CSS_FILES=("styles.css")
for css_file in "${CSS_FILES[@]}"; do
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" "$BASE_URL/$css_file")
if [ "$RESPONSE" -eq 200 ]; then
echo "$css_file loads successfully (HTTP $RESPONSE)"
else
echo "$css_file failed to load (HTTP $RESPONSE)"
FAILURES=$((FAILURES+1))
fi
done
# Check for security headers
echo "Checking for security headers..."
HEADERS=$(curl -s -I "$BASE_URL/")
if echo "$HEADERS" | grep -q "Content-Security-Policy"; then
echo "✅ Content-Security-Policy header found"
else
echo "❌ Content-Security-Policy header not found"
FAILURES=$((FAILURES+1))
fi
if echo "$HEADERS" | grep -q "X-Frame-Options"; then
echo "✅ X-Frame-Options header found"
else
echo "❌ X-Frame-Options header not found"
FAILURES=$((FAILURES+1))
fi
# Check if any failures occurred
if [ "$FAILURES" -eq 0 ]; then
echo "=== All Functionality Tests Passed ==="
exit 0
else
echo "=== Functionality Tests Failed: $FAILURES failures ==="
exit 1
fi