123 lines
3.7 KiB
Bash
Executable File
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
|