1.8 KiB
1.8 KiB
Стратегия тестирования API
9 обязательных сценариев
| # | Сценарий | Статус | Пример |
|---|---|---|---|
| 1 | Missing field → 422 | Обязателен | POST /ideas без body |
| 2 | Wrong type → 422 | Обязателен | title: 123 вместо строки |
| 3 | Invalid/expired token → 401 | Обязателен | Authorization: Bearer bad |
| 4 | Wrong permissions → 403 | Обязателен | user пытается в /admin |
| 5 | Not found → 404 | Обязателен | GET /ideas/nonexistent |
| 6 | Conflict → 409 | Обязателен | Дубликат email при регистрации |
| 7 | Success → 200/201 | Обязателен | Успешный CRUD |
| 8 | Rate limit → 429 | Когда реализован | 100 запросов подряд |
| 9 | Idempotency | Для DELETE/PATCH | Повторный delete → 404 |
Цель: 4 группы endpoints
tests/integration/
├── conftest.py # async_client, auth headers
├── test_auth.py # register / login / refresh
├── test_ideas.py # CRUD + analyze
├── test_users.py # profile
└── test_admin.py # users / health / logs
Каждый файл — минимум 9 тестов (по 1 на сценарий). Итого ~36 тестов.
Структура теста
async def test_create_idea_success(async_client, user_token):
response = await async_client.post(
"/api/v1/ideas",
json={"title": "Test", "content": "Content"},
headers={"Authorization": f"Bearer {user_token}"},
)
assert response.status_code == 201
data = response.json()
assert data["title"] == "Test"