Corp/backend/create_test_data.py
Игорь Надеин 771b93feed fix(requests): Исправлена ошибка с employee_departments и добавлены тесты
- Заменено employee_departments на departments_links в notification_signals.py
- Добавлен импорт Department в serializers.py
- Создан комплексный тестовый скрипт test_recipients.py (7 тестов)
- Создан скрипт test_recipients_api.py для API тестирования
- Добавлены утилиты для создания тестовых данных

Результаты тестирования:
✓ 7/7 тестов модели прошли успешно (100%)
✓ Проверены все методы: add_recipient, is_recipient, all_recipients
✓ Проверена работа с ManyToMany полями
✓ Проверена сериализация через API
✓ Проверен флаг sent_to_all_department
2025-12-02 17:39:09 +03:00

177 lines
5.7 KiB
Python

#!/usr/bin/env python
"""
Создание тестовых пользователей и отделов
"""
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'eusrr_backend.settings')
django.setup()
from django.contrib.auth import get_user_model
from employees.models import Department, EmployeeDepartment, DepartmentRole
User = get_user_model()
def create_test_users():
"""Создание тестовых пользователей"""
print("\n" + "="*60)
print(" Создание тестовых пользователей")
print("="*60)
users_data = [
{
'username': 'recipient1',
'email': 'recipient1@test.local',
'first_name': 'Получатель',
'last_name': 'Первый',
'password': 'test123'
},
{
'username': 'recipient2',
'email': 'recipient2@test.local',
'first_name': 'Получатель',
'last_name': 'Второй',
'password': 'test123'
},
{
'username': 'recipient3',
'email': 'recipient3@test.local',
'first_name': 'Получатель',
'last_name': 'Третий',
'password': 'test123'
},
{
'username': 'cc_user1',
'email': 'cc_user1@test.local',
'first_name': 'Копия',
'last_name': 'Первый',
'password': 'test123'
},
{
'username': 'cc_user2',
'email': 'cc_user2@test.local',
'first_name': 'Копия',
'last_name': 'Второй',
'password': 'test123'
},
]
created_users = []
for user_data in users_data:
username = user_data['username']
# Проверяем, существует ли
if User.objects.filter(username=username).exists():
user = User.objects.get(username=username)
print(f" ⚠ Пользователь {username} уже существует")
else:
user = User.objects.create_user(**user_data)
user.is_active = True
user.save()
print(f" ✓ Создан {username} - {user.get_full_name()}")
created_users.append(user)
return created_users
def create_test_departments():
"""Создание тестовых отделов"""
print("\n" + "="*60)
print(" Создание тестовых отделов")
print("="*60)
departments_data = [
{'name': 'Отдел тестирования 1', 'code': 'TEST_DEPT_1'},
{'name': 'Отдел тестирования 2', 'code': 'TEST_DEPT_2'},
]
created_depts = []
for dept_data in departments_data:
code = dept_data['code']
if Department.objects.filter(code=code).exists():
dept = Department.objects.get(code=code)
print(f" ⚠ Отдел {code} уже существует")
else:
dept = Department.objects.create(**dept_data)
print(f" ✓ Создан отдел {dept.name}")
created_depts.append(dept)
return created_depts
def link_users_to_departments(users, departments):
"""Привязка пользователей к отделам"""
print("\n" + "="*60)
print(" Привязка пользователей к отделам")
print("="*60)
if not departments:
print(" ⚠ Нет отделов для привязки")
return
# Получаем или создаем роль
role, created = DepartmentRole.objects.get_or_create(
name='Сотрудник',
defaults={'description': 'Обычный сотрудник отдела'}
)
if created:
print(f" ✓ Создана роль: {role.name}")
# Привязываем пользователей
for i, user in enumerate(users):
dept = departments[i % len(departments)]
link, created = EmployeeDepartment.objects.get_or_create(
employee=user,
department=dept,
defaults={'role': role, 'is_active': True}
)
if created:
print(f" ✓ {user.username} → {dept.name}")
else:
print(f" ⚠ {user.username} уже в {dept.name}")
def show_summary():
"""Показать итоги"""
print("\n" + "="*60)
print(" ИТОГИ")
print("="*60)
total_users = User.objects.filter(is_active=True).count()
total_depts = Department.objects.count()
total_links = EmployeeDepartment.objects.filter(is_active=True).count()
print(f"\nАктивных пользователей: {total_users}")
print(f"Отделов: {total_depts}")
print(f"Связей пользователь-отдел: {total_links}")
print("\nПользователи для тестирования:")
test_users = User.objects.filter(
username__in=['recipient1', 'recipient2', 'recipient3', 'cc_user1', 'cc_user2']
)
for user in test_users:
depts = user.departments_links.filter(is_active=True)
dept_names = ', '.join([d.department.name for d in depts])
print(f" - {user.username}: {user.get_full_name()} ({dept_names})")
if __name__ == '__main__':
print("\n" + "="*60)
print(" 🔧 ПОДГОТОВКА ТЕСТОВЫХ ДАННЫХ")
print("="*60)
users = create_test_users()
departments = create_test_departments()
link_users_to_departments(users, departments)
show_summary()
print("\n✓ Готово! Теперь можно запускать тесты API.\n")