creator-o1
Initial commit: Complete VoiceForge Enterprise Speech AI Platform
d00203b
# VoiceForge Testing Guide
## Overview
VoiceForge uses a comprehensive, multi-layered testing strategy to ensure code quality, security, and performance.
## Test Structure
```
backend/tests/
├── unit/ # Service-level unit tests
│ ├── test_stt_service.py
│ ├── test_tts_service.py
│ ├── test_translation_service.py
│ ├── test_emotion_meeting_service.py
│ ├── test_audio.py
│ ├── test_cloning.py
│ ├── test_export.py
│ ├── test_nlp.py
│ └── test_sign.py
├── integration/ # API & E2E tests
│ ├── test_auth.py
│ ├── test_api_integration.py
│ ├── test_e2e_full_flow.py
│ ├── test_diarization.py
│ └── test_project_health.py
├── performance/ # Load & benchmark tests
│ ├── locustfile.py
│ ├── benchmark_*.py
│ └── run_benchmarks.py
├── quality/ # Code quality tools
│ ├── analyze_codebase.py
│ ├── check_syntax.py
│ ├── check_dependencies.py
│ ├── check_pipeline.py
│ ├── coverage_tracker.py
│ ├── lighthouse_audit.py
│ └── project_audit.py
├── security/ # Security audits
│ └── run_audit.py
├── conftest.py # Shared fixtures
├── pytest.ini # Pytest configuration
└── run_all_tests.py # Master test runner
```
## Running Tests
### Quick Start
```bash
cd backend
python tests/run_all_tests.py
```
### Individual Test Categories
```bash
# Unit tests
pytest tests/unit -v
# Integration tests
pytest tests/integration -v
# Performance benchmarks
python tests/performance/run_benchmarks.py
# Security audit
python tests/security/run_audit.py
```
### Docker (Recommended)
```bash
# Run all tests in clean Docker environment
docker-compose run --rm backend python tests/run_all_tests.py
# Run specific category
docker-compose run --rm backend pytest tests/unit -v
```
## Quality Tools
### Code Quality Analysis
```bash
python tests/quality/analyze_codebase.py --path app
```
**Checks:**
- File sizes (flags >500 lines)
- Cyclomatic complexity (Radon)
- Maintainability index
- Long functions (>50 lines)
- Import dependencies
### Syntax & Import Check
```bash
python tests/quality/check_syntax.py --path app
```
**Checks:**
- Python syntax errors
- Circular imports
- Missing `__init__.py` files
### Dependency Health
```bash
python tests/quality/check_dependencies.py
```
**Checks:**
- Local pip compatibility (`pip check`)
- PyPI availability (online check)
- Outdated packages
- Security vulnerabilities (via `pip-audit`)
### Pipeline Validation
```bash
python tests/quality/check_pipeline.py --root ..
```
**Checks:**
- GitHub Actions workflow syntax
- Dockerfile validation
- docker-compose.yml structure
- Environment file presence
### Coverage Tracking
```bash
python tests/quality/coverage_tracker.py --app app --tests tests
```
**Provides:**
- Module coverage matrix
- Untested function identification
- Coverage percentage by component
### Frontend Performance (Lighthouse)
```bash
python tests/quality/lighthouse_audit.py --url http://localhost:8501
```
**Audits:**
- Performance score
- Accessibility score
- Best practices
- SEO metrics
## Test Fixtures
### Database Setup
```python
@pytest.fixture(scope="module")
def setup_db():
Base.metadata.create_all(bind=engine)
yield
# Cleanup optional
```
### Test Client (Sync)
```python
@pytest.fixture
def client():
return TestClient(app)
```
### Async Client
```python
@pytest_asyncio.fixture
async def async_client():
transport = ASGITransport(app=app)
async with AsyncClient(transport=transport, base_url="http://test") as client:
yield client
```
## Best Practices
### Writing Unit Tests
- Test one function per test case
- Use mocks for external dependencies
- Follow AAA pattern (Arrange, Act, Assert)
```python
@pytest.mark.asyncio
async def test_synthesize_returns_audio_bytes():
# Arrange
with patch('app.services.edge_tts_service.EdgeTTSService') as MockService:
mock_service = MockService.return_value
mock_service.synthesize = AsyncMock(return_value=b'AUDIO_DATA')
# Act
audio = await mock_service.synthesize("Hello", voice="en-US-Neural2-F")
# Assert
assert isinstance(audio, bytes)
assert len(audio) > 0
```
### Writing Integration Tests
- Test realistic user flows
- Use actual database (with cleanup)
- Test authentication & authorization
```python
def test_full_user_journey(client):
# Register
response = client.post("/api/v1/auth/register", json={...})
assert response.status_code == 200
# Login
response = client.post("/api/v1/auth/login", data={...})
token = response.json()["access_token"]
# Use protected endpoint
response = client.get("/api/v1/auth/me", headers={"Authorization": f"Bearer {token}"})
assert response.status_code == 200
```
## CI/CD Integration
### GitHub Actions Workflow
```yaml
name: Test Suite
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run tests
run: |
docker-compose run --rm backend python tests/run_all_tests.py
```
## Coverage Goals
- **Unit Tests**: >80% line coverage
- **Integration Tests**: All critical user flows
- **Performance**: All endpoints benchmarked
- **Security**: Zero high/critical vulnerabilities
## Current Status
**74+ tests** across all categories
**100% module coverage** (all services have tests)
**7 quality tools** for automated analysis
**Master runner** for one-command execution