# Testing Issues Documentation **Date**: 2025-08-27 **Status**: Active Issues Documented **Reporter**: Claude Code Agent This document captures the testing problems encountered and their solutions for future reference. ## Issue #1: SQLAlchemy Relationship Resolution Error **Problem**: Test runner and direct pytest failing with SQLAlchemy errors: ``` NameError: Module 'models' has no mapped classes registered under the name 'batch_job' sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper[User(users)], expression 'backend.models.batch_job.BatchJob' failed to locate a name ``` **Root Cause**: The `BatchJob` and `BatchJobItem` models existed in `backend/models/batch_job.py` but were not imported in the models `__init__.py` file. This caused SQLAlchemy to fail when resolving relationships defined in the User model. **Solution**: Added missing imports to `backend/models/__init__.py`: ```python # Before (missing imports) from .user import User, RefreshToken, APIKey, EmailVerificationToken, PasswordResetToken from .summary import Summary, ExportHistory # After (fixed) from .user import User, RefreshToken, APIKey, EmailVerificationToken, PasswordResetToken from .summary import Summary, ExportHistory from .batch_job import BatchJob, BatchJobItem # Added this line __all__ = [ # ... existing models ... "BatchJob", # Added "BatchJobItem", # Added ] ``` **Verification**: Auth service tests went from 20/21 failing to 21/21 passing. ## Issue #2: Pydantic Configuration Validation Errors **Problem**: Tests failing with Pydantic validation errors: ``` pydantic_core._pydantic_core.ValidationError: 19 validation errors for VideoDownloadConfig anthropic_api_key: Extra inputs are not permitted [type=extra_forbidden] openai_api_key: Extra inputs are not permitted [type=extra_forbidden] ... ``` **Root Cause**: The `VideoDownloadConfig` class extends `BaseSettings` and automatically loads environment variables. However, the environment contained many API keys and configuration variables that weren't defined in the model schema. Pydantic 2.x defaults to `extra="forbid"` which rejects unknown fields. **Solution**: Modified the `VideoDownloadConfig` class configuration: ```python # File: backend/config/video_download_config.py class VideoDownloadConfig(BaseSettings): # ... model fields ... class Config: env_file = ".env" env_prefix = "VIDEO_DOWNLOAD_" case_sensitive = False extra = "ignore" # Added this line to allow extra environment variables ``` **Verification**: Enhanced video service tests went from collection errors to 13/23 passing. ## Issue #3: Test Runner Result Parsing Bug **Problem**: The custom test runner consistently reports "0/X passed" even when tests are actually passing. **Evidence**: - Test runner shows: `Completed unit tests: 0/229 passed` - Direct pytest shows: `182 passed, 61 failed, 38 errors` (75% pass rate) - Individual test files run successfully when tested directly **Root Cause**: Bug in the test runner's pytest result parsing logic. The `TestExecutor` class in `backend/test_runner/core/test_execution.py` is not correctly parsing the pytest output or exit codes. **Current Status**: **UNRESOLVED** - Test runner display bug exists but does not affect actual test functionality. **Workaround**: Use direct pytest commands for accurate results: ```bash # Instead of: ./run_tests.sh run-unit # Use: PYTHONPATH=/path/to/project python3 -m pytest backend/tests/unit/ # For specific tests: PYTHONPATH=/Users/enias/projects/my-ai-projects/apps/youtube-summarizer python3 -m pytest backend/tests/unit/test_auth_service.py -v ``` ## Issue #4: Test Environment Setup **Problem**: Tests may fail if run without proper PYTHONPATH configuration. **Solution**: Always set PYTHONPATH when running tests directly: ```bash export PYTHONPATH="/Users/enias/projects/my-ai-projects/apps/youtube-summarizer" # or PYTHONPATH=/Users/enias/projects/my-ai-projects/apps/youtube-summarizer python3 -m pytest ``` **Verification Script**: Use `./scripts/validate_test_setup.py` to check environment. ## Current Test Status (as of 2025-08-27 01:45 UTC) ### ✅ Working Test Categories: - **Authentication Tests**: 21/21 passing (100%) - **Core Service Tests**: Most passing - **Database Model Tests**: Working after BatchJob fix - **Basic Integration Tests**: Many passing ### ❌ Known Failing Areas: - **Enhanced Video Service**: 10/23 failing (test implementation issues) - **Video Downloader Tests**: Multiple failures (mocking issues) - **AI Service Tests**: Some import/dependency errors - **Complex Integration Tests**: Various issues ### Overall Stats: - **Total Discovered**: 241 tests - **Passing**: 182 tests (75%) - **Failing**: 61 tests - **Errors**: 38 tests ## Recommended Next Steps 1. **Fix Test Runner Parsing Bug**: - Investigate `backend/test_runner/core/test_execution.py` - Fix pytest result parsing logic - Ensure proper exit code handling 2. **Address Remaining Test Failures**: - Fix mocking issues in video downloader tests - Resolve import/dependency errors in AI service tests - Update test implementations for enhanced video service 3. **Improve Test Environment**: - Create more reliable test fixtures - Improve test isolation - Add better error reporting 4. **Documentation**: - Update TESTING-INSTRUCTIONS.md with current status - Document workarounds for known issues - Create debugging guide for test failures ## Commands for Testing Tomorrow ```bash # Quick verification (works reliably) PYTHONPATH=/Users/enias/projects/my-ai-projects/apps/youtube-summarizer python3 -m pytest backend/tests/unit/test_auth_service.py -v # Full unit test run (accurate results) PYTHONPATH=/Users/enias/projects/my-ai-projects/apps/youtube-summarizer python3 -m pytest backend/tests/unit/ --tb=no -q # Debug specific failures PYTHONPATH=/Users/enias/projects/my-ai-projects/apps/youtube-summarizer python3 -m pytest backend/tests/unit/test_enhanced_video_service.py -v --tb=short # Test runner (has display bug but still useful for discovery) ./run_tests.sh list --category unit ``` --- **Last Updated**: 2025-08-27 01:45 UTC **Next Review**: When test runner parsing bug is resolved *This document should be updated as issues are resolved and new problems are discovered.*