API Testing:
- docs/guides/API_TESTING_GUIDE.md - полное руководство по API тестированию
* Использование Postman коллекции
* Newman CLI интеграция
* REST Client примеры
* Pytest примеры с fixtures
- docs/reports/API_EMPLOYEES_COVERAGE.md - анализ покрытия эндпоинтов
* Покрытие расширено с 23% до ~70%
* Список протестированных и непокрытых эндпоинтов
Database Optimization:
- backend/docs/reports/DB_QUERIES_ANALYSIS.md - детальный анализ запросов к БД
* 8 ViewSet'ов проанализированы
* Найдены критические N+1 проблемы:
- SkillViewSet.merge() делает 2N запросов в цикле
- GroupViewSet.retrieve не использует prefetch_related
- RegisterAPIView дважды проверяет email
* Предложены оптимизации с raw SQL
* Рейтинг текущего состояния: 4/5 звезд
7.8 KiB
7.8 KiB
Employees API Endpoints Coverage Report
Текущая ситуация
✅ Покрыто тестами:
EmployeeViewSet (/api/v1/employees/):
- ✅ GET /employees/ - список сотрудников
- ✅ GET /employees/me/ - текущий пользователь
- ✅ GET /employees/{id}/ - конкретный сотрудник
- ✅ PATCH /employees/{id}/ - обновление сотрудника
- ✅ GET /employees/?search=... - поиск
DepartmentViewSet (/api/v1/departments/):
- ✅ GET /departments/ - список отделов
- ✅ GET /departments/{id}/ - конкретный отдел
- ✅ POST /departments/ - создание отдела
PositionViewSet (/api/v1/positions/):
- ✅ GET /positions/ - список должностей
- ✅ POST /positions/ - создание должности
SkillViewSet (/api/v1/skills/):
- ✅ GET /skills/ - список навыков
- ✅ POST /skills/ - создание навыка
GroupViewSet (/api/v1/groups/):
- ✅ GET /groups/ - список групп
- ✅ GET /groups/{id}/ - конкретная группа
- ✅ POST /groups/ - создание группы
❌ НЕ покрыто тестами:
EmployeeViewSet дополнительные endpoints:
-
POST /api/v1/employees/ - создание нового сотрудника
- Требует staff права
- Поля: email, password, first_name, last_name, phone_number
- Может включать LDAP синхронизацию
-
DELETE /api/v1/employees/{id}/ - удаление сотрудника
- Требует staff права
- Синхронизация с LDAP при удалении
-
POST /api/v1/employees/{id}/add_skill/
- Добавление навыка сотруднику
- Body:
{"skill_id": 3}или{"skill_name": "Python"} - Требует permission:
employees.manage_employee_skills
-
POST /api/v1/employees/{id}/remove_skill/
- Удаление навыка у сотрудника
- Body:
{"skill_id": 3}или{"skill_name": "Python"} - Требует permission:
employees.manage_employee_skills
-
GET /api/v1/employees/{id}/ldap-info/
- Получение LDAP информации о сотруднике
- Query params:
?force_refresh=true - Требует permission:
employees.view_ldap_info - Возвращает: dn, groups, department_dn, sync статус
-
GET /api/v1/employees/export-excel/
- Экспорт списка сотрудников в Excel
- Query params: фильтры, поиск
- Возвращает: Excel файл
-
PATCH /api/v1/employees/me/
- Обновление собственного профиля
- Любой аутентифицированный пользователь
EmployeeActionViewSet (/api/v1/employee-actions/):
- GET /api/v1/employee-actions/ - список всех кадровых действий
- POST /api/v1/employee-actions/ - создание кадрового действия
- GET /api/v1/employee-actions/{id}/ - детали действия
- PATCH /api/v1/employee-actions/{id}/ - обновление
- DELETE /api/v1/employee-actions/{id}/ - удаление
DepartmentRoleViewSet (/api/v1/department-roles/):
- GET /api/v1/department-roles/ - список ролей в отделах
- POST /api/v1/department-roles/ - создание роли
- GET /api/v1/department-roles/{id}/ - детали роли
- PATCH /api/v1/department-roles/{id}/ - обновление
- DELETE /api/v1/department-roles/{id}/ - удаление
- GET /api/v1/department-roles/my_roles/ - роли текущего пользователя
- GET /api/v1/department-roles/{id}/employees/ - сотрудники с этой ролью
- POST /api/v1/department-roles/{id}/assign/ - назначить роль сотрудникам
- GET /api/v1/department-roles/{id}/permissions/ - права роли
- POST /api/v1/department-roles/{id}/set_permissions/ - установить права
SkillViewSet дополнительные endpoints:
- PUT /api/v1/skills/{id}/ - полное обновление навыка
- DELETE /api/v1/skills/{id}/ - удаление навыка
- POST /api/v1/skills/bulk_create/ - массовое создание навыков
- Body:
{"skills": ["Python", "JavaScript", "Docker"]}
- Body:
- POST /api/v1/skills/merge/ - объединение навыков
- Body:
{"source_id": 1, "target_id": 2}
- Body:
GroupViewSet дополнительные endpoints:
- PUT /api/v1/groups/{id}/ - полное обновление группы
- DELETE /api/v1/groups/{id}/ - удаление группы
- GET /api/v1/groups/{id}/permissions/ - права группы
- POST /api/v1/groups/{id}/set-permissions/ - установить права
- Body:
{"permission_ids": [1, 2, 3]}
- Body:
- POST /api/v1/groups/{id}/add-permissions/ - добавить права
- Body:
{"permission_ids": [4, 5]}
- Body:
- POST /api/v1/groups/{id}/remove-permissions/ - удалить права
- Body:
{"permission_ids": [1]}
- Body:
- POST /api/v1/groups/{id}/sync/ - синхронизация с LDAP
- POST /api/v1/groups/{id}/set-description/ - установить описание
- Body:
{"description": "..."}
- Body:
- GET /api/v1/groups/{id}/employees/ - участники группы
- POST /api/v1/groups/{id}/add-members/ - добавить участников
- Body:
{"employee_ids": [1, 2, 3]}
- Body:
- POST /api/v1/groups/{id}/remove-members/ - удалить участников
- Body:
{"employee_ids": [1]}
- Body:
- POST /api/v1/groups/{id}/replace-members/ - заменить всех участников
- Body:
{"employee_ids": [1, 2, 3]}
- Body:
Auth endpoints:
- POST /api/v1/auth/register/ - ✅ уже есть (но возвращает 400)
- POST /api/v1/auth/resend-email/ - повторная отправка письма верификации
- Body:
{"email": "user@example.com"}
- Body:
- POST /api/v1/auth/verify-email/ - подтверждение email
- Body:
{"code": "123456", "email": "user@example.com"}
- Body:
DepartmentViewSet дополнительные:
- PUT /api/v1/departments/{id}/ - полное обновление
- DELETE /api/v1/departments/{id}/ - удаление
- PATCH /api/v1/departments/{id}/ - частичное обновление
PositionViewSet дополнительные:
- GET /api/v1/positions/{id}/ - детали должности
- PUT /api/v1/positions/{id}/ - полное обновление
- PATCH /api/v1/positions/{id}/ - частичное обновление
- DELETE /api/v1/positions/{id}/ - удаление
Итого:
- Покрыто: ~15 endpoints
- Не покрыто: ~50+ endpoints
- Покрытие: ~23%
Рекомендации:
-
Приоритет 1 (критичные базовые операции):
- POST /employees/ (create)
- DELETE /employees/{id}/
- PATCH /employees/me/
- POST /employees/{id}/add_skill/
- POST /employees/{id}/remove_skill/
-
Приоритет 2 (LDAP и расширенные функции):
- GET /employees/{id}/ldap-info/
- GET /employees/export-excel/
- POST /auth/verify-email/
- POST /auth/resend-email/
-
Приоритет 3 (управление ролями и группами):
- DepartmentRoleViewSet все endpoints
- GroupViewSet custom actions
- EmployeeActionViewSet
-
Приоритет 4 (CRUD для вспомогательных сущностей):
- Skills CRUD
- Positions CRUD
- Departments CRUD