43 lines
1.8 KiB
Markdown
43 lines
1.8 KiB
Markdown
# Стратегия тестирования 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 тестов.
|
|
|
|
## Структура теста
|
|
|
|
```python
|
|
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"
|
|
```
|