gateway/tests/README.md
2025-11-17 23:12:18 +01:00

228 lines
5.4 KiB
Markdown

# Test Suite Documentation
## Overview
This test suite includes:
- **Unit Tests**: Fast, isolated tests for individual components
- **Integration Tests**: Tests for component interactions
- **Validation Tests**: End-to-end architecture validation
- **Functional Tests**: Standalone async test scripts for real-world scenarios
## Running Tests
### Prerequisites
```bash
# Install dependencies (pytest is already in requirements.txt)
cd gateway
pip install -r requirements.txt
# Or install pytest separately if needed
pip install pytest pytest-asyncio pytest-cov
```
### Running Pytest Tests
**All tests:**
```bash
cd gateway
pytest
```
**By category:**
```bash
# Unit tests only
pytest tests/unit/
# Integration tests only
pytest tests/integration/
# Validation tests only
pytest tests/validation/
```
**Specific test:**
```bash
# Specific file
pytest tests/unit/datamodels/test_workflow_models.py
# Specific test class
pytest tests/unit/datamodels/test_workflow_models.py::TestActionDefinition
# Specific test function
pytest tests/unit/datamodels/test_workflow_models.py::TestActionDefinition::test_actionDefinition_needsStage2_without_parameters
```
**With options:**
```bash
# Verbose output
pytest -v
# Show print statements
pytest -s
# Stop on first failure
pytest -x
# Run tests matching pattern
pytest -k "test_actionDefinition"
# Run with coverage
pytest --cov=modules --cov-report=html
```
### Running Functional Tests
These are standalone async scripts that test real AI operations. They are **NOT pytest-compatible** and must be run directly:
```bash
cd gateway
# AI Models Test (IMAGE_GENERATE)
python tests/functional/test_ai_models.py
# AI Model Selection Test
python tests/functional/test_ai_model_selection.py
# AI Behavior Test
python tests/functional/test_ai_behavior.py
# AI Operations Test
python tests/functional/test_ai_operations.py
```
**Note:** These functional tests require:
- Valid API keys configured in environment/config
- Database access
- May make actual AI API calls (costs may apply)
- Must be run directly (not via pytest)
## Test Structure
```
tests/
├── unit/ # Unit tests (fast, isolated, pytest-compatible)
│ ├── datamodels/ # Data model tests
│ ├── services/ # Service layer tests
│ ├── workflows/ # Workflow tests
│ └── utils/ # Utility function tests
├── integration/ # Integration tests (pytest-compatible)
│ └── workflows/ # Workflow integration tests
├── validation/ # Architecture validation tests (pytest-compatible)
└── functional/ # Functional tests (standalone scripts, NOT pytest-compatible)
├── test_ai_models.py
├── test_ai_behavior.py
├── test_ai_model_selection.py
└── test_ai_operations.py
```
## Test Categories
### Unit Tests (`tests/unit/`)
**Data Models:**
- `test_workflow_models.py` - ActionDefinition, AiResponse, etc.
- `test_docref.py` - DocumentReference models
**Services:**
- `test_ai_service.py` - AI service methods (mocked)
**Workflows:**
- `test_state_management.py` - ChatWorkflow state management
**Utils:**
- `test_json_utils.py` - JSON parsing utilities
### Integration Tests (`tests/integration/`)
- `test_workflow_execution.py` - Full workflow execution flows
### Validation Tests (`tests/validation/`)
- `test_architecture_validation.py` - End-to-end architecture validation
### Functional Tests (`tests/functional/`)
**Note:** These are standalone scripts that must be run directly (not via pytest):
- `test_ai_models.py` - Real AI model testing (IMAGE_GENERATE)
- `test_ai_model_selection.py` - Model selection logic
- `test_ai_behavior.py` - AI behavior with different prompts
- `test_ai_operations.py` - AI operations testing
## Pytest Configuration
Configuration is in `pytest.ini`:
- Default: Runs non-expensive tests only
- Use `pytest -m ""` to run ALL tests (including expensive ones)
- Test paths: `tests/`
- Python paths: `.` (gateway directory)
## Markers
Tests can be marked with pytest markers:
```python
@pytest.mark.asyncio
async def test_something():
...
@pytest.mark.expensive
def test_expensive_operation():
...
```
Run only expensive tests:
```bash
pytest -m expensive
```
## Debugging Tests
**Run with debugger:**
```bash
pytest --pdb # Drop into debugger on failure
```
**Show local variables:**
```bash
pytest -l # Show local variables in traceback
```
**Run last failed tests:**
```bash
pytest --lf
```
## Continuous Integration
For CI/CD, use:
```bash
# Run all tests with coverage
pytest --cov=modules --cov-report=xml --cov-report=html
# Run only fast tests (exclude expensive)
pytest -m "not expensive"
```
## Troubleshooting
**Import errors (`ModuleNotFoundError: No module named 'modules'`):**
- Ensure you're running pytest from the `gateway/` directory
- The `conftest.py` file automatically adds the gateway directory to `sys.path`
- If issues persist, verify `pytest.ini` has `pythonpath = .` (not `python_paths`)
- You can also set PYTHONPATH manually:
```powershell
$env:PYTHONPATH = "."
pytest
```
**Async test issues:**
- Ensure `pytest-asyncio` is installed
- Tests marked with `@pytest.mark.asyncio` will run correctly
**Path issues:**
- Standalone scripts automatically add gateway to `sys.path`
- Pytest tests use `conftest.py` to set up the path automatically
- If running from a different directory, use: `python -m pytest` from the gateway directory