Files
easystream-main/run-tests.sh
SamiAhmed7777 0b7e2d0a5b feat: Add comprehensive documentation suite and reorganize project structure
- Created complete documentation in docs/ directory
- Added PROJECT_OVERVIEW.md with feature highlights and getting started guide
- Added ARCHITECTURE.md with system design and technical details
- Added SECURITY.md with comprehensive security implementation guide
- Added DEVELOPMENT.md with development workflows and best practices
- Added DEPLOYMENT.md with production deployment instructions
- Added API.md with complete REST API documentation
- Added CONTRIBUTING.md with contribution guidelines
- Added CHANGELOG.md with version history and migration notes
- Reorganized all documentation files into docs/ directory for better organization
- Updated README.md with proper documentation links and quick navigation
- Enhanced project structure with professional documentation standards
2025-10-21 00:39:45 -07:00

211 lines
6.6 KiB
Bash

#!/bin/bash
# EasyStream Test Runner Script
# This script sets up the test environment and runs the complete test suite
set -e
echo "🚀 EasyStream Test Runner"
echo "========================="
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if Docker is available
if ! command -v docker &> /dev/null; then
print_error "Docker is not installed or not in PATH"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
print_error "Docker Compose is not installed or not in PATH"
exit 1
fi
# Function to cleanup
cleanup() {
print_status "Cleaning up test environment..."
docker-compose -f docker-compose.test.yml down -v --remove-orphans 2>/dev/null || true
}
# Set trap to cleanup on exit
trap cleanup EXIT
# Parse command line arguments
TEST_SUITE="all"
COVERAGE=false
VERBOSE=false
while [[ $# -gt 0 ]]; do
case $1 in
--suite)
TEST_SUITE="$2"
shift 2
;;
--coverage)
COVERAGE=true
shift
;;
--verbose)
VERBOSE=true
shift
;;
--help)
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " --suite SUITE Run specific test suite (unit|integration|security|performance|all)"
echo " --coverage Generate code coverage report"
echo " --verbose Enable verbose output"
echo " --help Show this help message"
echo ""
echo "Examples:"
echo " $0 # Run all tests"
echo " $0 --suite unit # Run only unit tests"
echo " $0 --coverage # Run tests with coverage"
echo " $0 --suite security --verbose # Run security tests with verbose output"
exit 0
;;
*)
print_error "Unknown option: $1"
echo "Use --help for usage information"
exit 1
;;
esac
done
print_status "Starting EasyStream test suite..."
print_status "Test suite: $TEST_SUITE"
print_status "Coverage: $COVERAGE"
print_status "Verbose: $VERBOSE"
# Create necessary directories
print_status "Creating test directories..."
mkdir -p tests/temp tests/fixtures tests/coverage tests/results
mkdir -p f_data/logs/test f_data/uploads/test f_data/cache/test
# Start test environment
print_status "Starting test environment with Docker Compose..."
docker-compose -f docker-compose.test.yml up -d
# Wait for services to be ready
print_status "Waiting for services to be ready..."
sleep 10
# Check if services are healthy
print_status "Checking service health..."
if ! docker-compose -f docker-compose.test.yml ps | grep -q "healthy"; then
print_warning "Some services may not be fully ready, waiting additional time..."
sleep 20
fi
# Install dependencies if needed
if [ ! -d "vendor" ]; then
print_status "Installing PHP dependencies..."
docker-compose -f docker-compose.test.yml exec -T test-php composer install --no-progress --prefer-dist
fi
# Run the appropriate test suite
case $TEST_SUITE in
"unit")
print_status "Running unit tests..."
if [ "$COVERAGE" = true ]; then
docker-compose -f docker-compose.test.yml exec -T test-php composer run-script test-unit -- --coverage-html tests/coverage/html
else
docker-compose -f docker-compose.test.yml exec -T test-php composer run-script test-unit
fi
;;
"integration")
print_status "Running integration tests..."
docker-compose -f docker-compose.test.yml exec -T test-php composer run-script test-integration
;;
"security")
print_status "Running security tests..."
docker-compose -f docker-compose.test.yml exec -T test-php composer run-script test-security
;;
"performance")
print_status "Running performance tests..."
docker-compose -f docker-compose.test.yml exec -T test-php composer run-script test-performance
;;
"all")
print_status "Running complete test suite..."
if [ "$COVERAGE" = true ]; then
docker-compose -f docker-compose.test.yml exec -T test-php composer run-script test-coverage
else
docker-compose -f docker-compose.test.yml exec -T test-php composer run-script test
fi
;;
*)
print_error "Unknown test suite: $TEST_SUITE"
print_error "Valid options: unit, integration, security, performance, all"
exit 1
;;
esac
TEST_EXIT_CODE=$?
# Copy test results from container
print_status "Copying test results..."
docker-compose -f docker-compose.test.yml exec -T test-php find tests/results -name "*.xml" -exec cp {} tests/results/ \; 2>/dev/null || true
docker-compose -f docker-compose.test.yml exec -T test-php find tests/coverage -name "*.html" -exec cp {} tests/coverage/ \; 2>/dev/null || true
# Display results
if [ $TEST_EXIT_CODE -eq 0 ]; then
print_success "All tests passed! ✅"
if [ "$COVERAGE" = true ]; then
print_status "Coverage report generated in tests/coverage/html/"
if command -v open &> /dev/null; then
print_status "Opening coverage report..."
open tests/coverage/html/index.html
elif command -v xdg-open &> /dev/null; then
print_status "Opening coverage report..."
xdg-open tests/coverage/html/index.html
fi
fi
else
print_error "Some tests failed! ❌"
print_status "Check the output above for details"
fi
# Show test summary
print_status "Test Summary:"
echo "=============="
if [ -f "tests/results/junit.xml" ]; then
# Parse JUnit XML for summary (basic parsing)
TOTAL_TESTS=$(grep -o 'tests="[0-9]*"' tests/results/junit.xml | grep -o '[0-9]*' | head -1)
FAILED_TESTS=$(grep -o 'failures="[0-9]*"' tests/results/junit.xml | grep -o '[0-9]*' | head -1)
ERROR_TESTS=$(grep -o 'errors="[0-9]*"' tests/results/junit.xml | grep -o '[0-9]*' | head -1)
echo "Total Tests: ${TOTAL_TESTS:-0}"
echo "Failed Tests: ${FAILED_TESTS:-0}"
echo "Error Tests: ${ERROR_TESTS:-0}"
echo "Passed Tests: $((${TOTAL_TESTS:-0} - ${FAILED_TESTS:-0} - ${ERROR_TESTS:-0}))"
else
print_warning "No JUnit results file found"
fi
print_status "Test run completed!"
exit $TEST_EXIT_CODE