#!/bin/bash # Test Environment Setup Script # Sets up the complete testing environment for YouTube Summarizer set -e echo "🚀 Setting up YouTube Summarizer Test Environment..." # 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_step() { echo -e "${BLUE}➤${NC} $1" } print_success() { echo -e "${GREEN}✅${NC} $1" } print_warning() { echo -e "${YELLOW}⚠️${NC} $1" } print_error() { echo -e "${RED}❌${NC} $1" } # Check if running from correct directory if [[ ! -f "backend/main.py" ]]; then print_error "Please run this script from the youtube-summarizer root directory" exit 1 fi # Step 1: Verify Python version print_step "Checking Python version..." PYTHON_VERSION=$(python3 --version 2>&1 | cut -d" " -f2) REQUIRED_VERSION="3.11" if [[ $(echo "${PYTHON_VERSION}" | cut -d"." -f1-2) != "${REQUIRED_VERSION}" ]]; then print_warning "Python ${REQUIRED_VERSION} recommended (found ${PYTHON_VERSION})" else print_success "Python ${PYTHON_VERSION} detected" fi # Step 2: Create virtual environment if it doesn't exist print_step "Setting up virtual environment..." if [[ ! -d "venv" ]]; then python3 -m venv venv print_success "Virtual environment created" else print_success "Virtual environment already exists" fi # Step 3: Activate virtual environment and install dependencies print_step "Installing dependencies..." source venv/bin/activate # Install core dependencies pip install --upgrade pip # Install backend dependencies if [[ -f "backend/requirements.txt" ]]; then pip install -r backend/requirements.txt print_success "Backend dependencies installed" else print_warning "backend/requirements.txt not found - installing core packages" pip install fastapi uvicorn python-multipart fi # Install test dependencies pip install pytest pytest-asyncio pytest-cov pytest-xdist pytest-timeout pytest-mock pip install httpx # For FastAPI testing print_success "Test dependencies installed" # Step 4: Install frontend dependencies print_step "Installing frontend dependencies..." if [[ -d "frontend" ]] && [[ -f "frontend/package.json" ]]; then cd frontend if command -v npm >/dev/null 2>&1; then npm install print_success "Frontend dependencies installed" else print_warning "npm not found - skipping frontend setup" fi cd .. else print_warning "Frontend directory not found - skipping frontend setup" fi # Step 5: Create test directories and files print_step "Setting up test structure..." # Create test report directories mkdir -p test_reports/coverage_html mkdir -p test_reports/junit mkdir -p test_reports/json print_success "Test report directories created" # Create test data directories mkdir -p test_data/fixtures mkdir -p test_data/mock_videos mkdir -p test_data/sample_transcripts print_success "Test data directories created" # Step 6: Create sample test data files print_step "Creating sample test data..." # Create sample transcript file cat > test_data/sample_transcripts/sample_transcript.json << 'EOF' { "video_id": "test123", "title": "Sample Video", "transcript": [ {"text": "Welcome to our sample video.", "start": 0.0, "duration": 2.5}, {"text": "This is a test transcript.", "start": 2.5, "duration": 2.0}, {"text": "Thank you for watching.", "start": 4.5, "duration": 1.5} ] } EOF # Create sample test fixture cat > test_data/fixtures/sample_video_data.py << 'EOF' """Sample test data for video processing tests.""" SAMPLE_YOUTUBE_URL = "https://www.youtube.com/watch?v=dQw4w9WgXcQ" SAMPLE_VIDEO_ID = "dQw4w9WgXcQ" SAMPLE_TRANSCRIPT_DATA = { "video_id": SAMPLE_VIDEO_ID, "title": "Sample Video Title", "transcript": "This is a sample transcript for testing purposes." } SAMPLE_SUMMARY_DATA = { "summary": "This is a sample summary.", "key_points": ["Point 1", "Point 2", "Point 3"], "chapters": [ {"title": "Introduction", "start_time": 0, "end_time": 30}, {"title": "Main Content", "start_time": 30, "end_time": 120} ] } EOF print_success "Sample test data created" # Step 7: Validate test runner installation print_step "Validating test runner installation..." # Test the test runner module if python3 -c "from backend.test_runner.cli import TestCLI" 2>/dev/null; then print_success "Test runner module accessible" else print_error "Test runner module not found - check installation" exit 1 fi # Step 8: Run dependency check print_step "Checking test dependencies..." python3 -c " from backend.test_runner.utils.environment import check_test_dependencies deps = check_test_dependencies() missing = [name for name, available in deps.items() if not available] if missing: print('Missing dependencies:', ', '.join(missing)) exit(1) else: print('All test dependencies available') " || print_warning "Some dependencies may be missing" # Step 9: Create test configuration print_step "Creating test configuration..." # Create test environment file cat > .env.test << 'EOF' # Test Environment Configuration DATABASE_URL=sqlite:///:memory: TESTING=true TEST_MODE=true LOG_LEVEL=DEBUG MOCK_EXTERNAL_APIS=true ANTHROPIC_API_KEY=test_key OPENAI_API_KEY=test_key JWT_SECRET_KEY=test_secret_key_for_testing_only SECRET_KEY=test_secret_key EOF print_success "Test configuration created" # Step 10: Run validation tests print_step "Running validation tests..." # Run a quick test to verify setup if python3 -m pytest backend/tests/unit/test_youtube_service.py::TestYouTubeService::test_extract_video_id -v 2>/dev/null; then print_success "Test execution validated" else print_warning "Test execution failed - check configuration" fi # Step 11: Create convenience scripts print_step "Creating convenience scripts..." # Create test runner shortcut cat > run_tests.sh << 'EOF' #!/bin/bash # Convenience script to run tests # Activate virtual environment source venv/bin/activate # Set test environment export DATABASE_URL="sqlite:///:memory:" export TESTING=true # Run test runner python3 -m backend.test_runner "$@" EOF chmod +x run_tests.sh print_success "Convenience scripts created" # Final summary echo "" echo "🎉 Test Environment Setup Complete!" echo "" echo "📋 Summary:" echo " ✅ Virtual environment: venv/" echo " ✅ Dependencies installed" echo " ✅ Test directories created" echo " ✅ Sample data generated" echo " ✅ Configuration files created" echo "" echo "🚀 Quick Start:" echo " 1. Activate environment: source venv/bin/activate" echo " 2. Run all tests: ./run_tests.sh run-all" echo " 3. Run specific tests: ./run_tests.sh run-unit" echo " 4. Generate coverage: ./run_tests.sh run-coverage" echo "" echo "📖 For detailed usage, see docs/TEST_RUNNER_GUIDE.md" echo "" print_success "Setup completed successfully!"