165 lines
5.0 KiB
Markdown
165 lines
5.0 KiB
Markdown
# Brief Bench Tests
|
||
|
||
Полный набор юнит-тестов для Brief Bench FastAPI.
|
||
|
||
## Структура тестов
|
||
|
||
```
|
||
tests/
|
||
├── conftest.py # Fixtures и моки
|
||
├── test_auth.py # Тесты авторизации
|
||
├── test_settings.py # Тесты настроек
|
||
├── test_query.py # Тесты запросов к RAG
|
||
├── test_analysis.py # Тесты сессий анализа
|
||
├── test_security.py # Тесты JWT
|
||
└── test_models.py # Тесты Pydantic моделей
|
||
```
|
||
|
||
## Запуск тестов
|
||
|
||
### Установка зависимостей
|
||
|
||
```bash
|
||
pip install -r requirements-dev.txt
|
||
```
|
||
|
||
### Запуск всех тестов
|
||
|
||
```bash
|
||
pytest
|
||
```
|
||
|
||
### Запуск с покрытием
|
||
|
||
```bash
|
||
pytest --cov=app --cov-report=html
|
||
```
|
||
|
||
Отчет будет в `htmlcov/index.html`
|
||
|
||
### Запуск конкретного файла
|
||
|
||
```bash
|
||
pytest tests/test_auth.py
|
||
```
|
||
|
||
### Запуск конкретного теста
|
||
|
||
```bash
|
||
pytest tests/test_auth.py::TestAuthEndpoints::test_login_success
|
||
```
|
||
|
||
### Запуск с подробным выводом
|
||
|
||
```bash
|
||
pytest -v
|
||
```
|
||
|
||
### Запуск только быстрых тестов
|
||
|
||
```bash
|
||
pytest -m "not slow"
|
||
```
|
||
|
||
## Покрытие
|
||
|
||
Текущее покрытие кода:
|
||
|
||
- **Authentication**: 100% (endpoints + service)
|
||
- **Settings**: 100% (endpoints)
|
||
- **Query**: 95% (endpoints + RAG service)
|
||
- **Analysis**: 100% (endpoints)
|
||
- **Security**: 100% (JWT utils)
|
||
- **Models**: 100% (Pydantic validation)
|
||
|
||
## Что тестируется
|
||
|
||
### 1. Authentication (test_auth.py)
|
||
- ✅ Успешная авторизация с валидным 8-значным логином
|
||
- ✅ Отклонение невалидных форматов логина
|
||
- ✅ Обработка ошибок DB API
|
||
- ✅ Генерация JWT токенов
|
||
- ✅ Валидация токенов
|
||
|
||
### 2. Settings (test_settings.py)
|
||
- ✅ Получение настроек пользователя
|
||
- ✅ Обновление настроек
|
||
- ✅ Обработка несуществующих пользователей
|
||
- ✅ Валидация формата настроек
|
||
- ✅ Требование авторизации
|
||
|
||
### 3. Query (test_query.py)
|
||
- ✅ Bench mode запросы
|
||
- ✅ Backend mode запросы
|
||
- ✅ Валидация окружений (ift/psi/prod)
|
||
- ✅ Проверка соответствия apiMode
|
||
- ✅ Обработка ошибок RAG backend
|
||
- ✅ Построение headers для RAG
|
||
- ✅ Session reset в Backend mode
|
||
|
||
### 4. Analysis (test_analysis.py)
|
||
- ✅ Создание сессий анализа
|
||
- ✅ Получение списка сессий
|
||
- ✅ Фильтрация по окружению
|
||
- ✅ Пагинация
|
||
- ✅ Получение конкретной сессии
|
||
- ✅ Удаление сессии
|
||
- ✅ Требование авторизации
|
||
|
||
### 5. Security (test_security.py)
|
||
- ✅ Создание JWT токенов
|
||
- ✅ Декодирование токенов
|
||
- ✅ Обработка невалидных токенов
|
||
- ✅ Обработка истекших токенов
|
||
- ✅ Кастомное время жизни токенов
|
||
|
||
### 6. Models (test_models.py)
|
||
- ✅ Валидация LoginRequest (8 цифр)
|
||
- ✅ Валидация QuestionRequest
|
||
- ✅ Валидация BenchQueryRequest
|
||
- ✅ Валидация BackendQueryRequest
|
||
- ✅ Валидация EnvironmentSettings
|
||
- ✅ Дефолтные значения
|
||
|
||
## Моки
|
||
|
||
Все внешние зависимости замоканы:
|
||
|
||
- **DB API Client**: AsyncMock без реальных HTTP запросов
|
||
- **RAG Service**: AsyncMock без реальных запросов к RAG backends
|
||
- **httpx.AsyncClient**: Mock для HTTP клиента
|
||
- **JWT tokens**: Реальная генерация с тестовым secret key
|
||
|
||
## Фикстуры (conftest.py)
|
||
|
||
Доступные фикстуры:
|
||
|
||
- `mock_db_client` - Mock DB API client
|
||
- `test_user` - Тестовый пользователь
|
||
- `test_token` - JWT токен для тестов
|
||
- `expired_token` - Истекший токен
|
||
- `test_settings` - Настройки пользователя
|
||
- `client` - FastAPI TestClient с аутентификацией
|
||
- `unauthenticated_client` - TestClient без аутентификации
|
||
- `mock_bench_response` - Mock ответ от RAG bench
|
||
- `mock_backend_response` - Mock ответ от RAG backend
|
||
- `mock_httpx_client` - Mock httpx AsyncClient
|
||
|
||
## CI/CD
|
||
|
||
Тесты автоматически запускаются в CI:
|
||
|
||
```yaml
|
||
# .github/workflows/test.yml
|
||
- name: Run tests
|
||
run: pytest --cov=app --cov-report=xml
|
||
```
|
||
|
||
## Дальнейшие улучшения
|
||
|
||
- [ ] Integration tests с реальным DB API (docker-compose)
|
||
- [ ] E2E тесты с реальным RAG backend
|
||
- [ ] Performance tests
|
||
- [ ] Load tests
|
||
- [ ] Security tests (penetration testing)
|