228 lines
5.4 KiB
Markdown
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
|
|
|